You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2022/03/22 14:30:48 UTC

[mynewt-newt] 01/02: Add experimental state for syscfg

This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git

commit 7a04837f0663b74ee6fe547a1650b4869610e6ba
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Mar 22 11:04:41 2022 +0100

    Add experimental state for syscfg
    
    This will produce warning if used.
---
 newt/builder/targetbuild.go |  4 ++++
 newt/resolve/resolve.go     |  4 ++++
 newt/syscfg/marshal.go      |  7 ++++---
 newt/syscfg/syscfg.go       | 28 ++++++++++++++++++++++++++++
 4 files changed, 40 insertions(+), 3 deletions(-)

diff --git a/newt/builder/targetbuild.go b/newt/builder/targetbuild.go
index 57e4952..532db09 100644
--- a/newt/builder/targetbuild.go
+++ b/newt/builder/targetbuild.go
@@ -275,6 +275,10 @@ func (t *TargetBuilder) validateAndWriteCfg() error {
 		log.Warn(line)
 	}
 
+	for _, line := range t.res.ExperimentalWarning() {
+		log.Warn(line)
+	}
+
 	incDir := GeneratedIncludeDir(t.target.FullName())
 	srcDir := GeneratedSrcDir(t.target.FullName())
 
diff --git a/newt/resolve/resolve.go b/newt/resolve/resolve.go
index 684b3c1..84e2aab 100644
--- a/newt/resolve/resolve.go
+++ b/newt/resolve/resolve.go
@@ -1357,6 +1357,10 @@ func (res *Resolution) DeprecatedWarning() []string {
 	return res.Cfg.DeprecatedWarning()
 }
 
+func (res *Resolution) ExperimentalWarning() []string {
+	return res.Cfg.ExperimentalWarning()
+}
+
 func LogTransientWarning(lpkg *pkg.LocalPackage) {
 	if lpkg.Type() == pkg.PACKAGE_TYPE_TRANSIENT {
 		log.Warnf("Transient package %s used, update configuration "+
diff --git a/newt/syscfg/marshal.go b/newt/syscfg/marshal.go
index 73c8428..5b3f2a0 100644
--- a/newt/syscfg/marshal.go
+++ b/newt/syscfg/marshal.go
@@ -32,9 +32,10 @@ var cfgSettingNameTypeMap = map[string]CfgSettingType{
 }
 
 var cfgSettingNameStateMap = map[string]CfgSettingState{
-	"good":       CFG_SETTING_STATE_GOOD,
-	"deprecated": CFG_SETTING_STATE_DEPRECATED,
-	"defunct":    CFG_SETTING_STATE_DEFUNCT,
+	"good":         CFG_SETTING_STATE_GOOD,
+	"deprecated":   CFG_SETTING_STATE_DEPRECATED,
+	"defunct":      CFG_SETTING_STATE_DEFUNCT,
+	"experimental": CFG_SETTING_STATE_EXPERIMENTAL,
 }
 
 var cfgFlashConflictNameCodeMap = map[string]CfgFlashConflictCode{
diff --git a/newt/syscfg/syscfg.go b/newt/syscfg/syscfg.go
index 90645d3..ae30e9e 100644
--- a/newt/syscfg/syscfg.go
+++ b/newt/syscfg/syscfg.go
@@ -63,6 +63,7 @@ const (
 	CFG_SETTING_STATE_CONST
 	CFG_SETTING_STATE_DEPRECATED
 	CFG_SETTING_STATE_DEFUNCT
+	CFG_SETTING_STATE_EXPERIMENTAL
 )
 
 type CfgFlashConflictCode int
@@ -153,6 +154,9 @@ type Cfg struct {
 	// Use of const settings (error).
 	Consts map[string]struct{}
 
+	// Use of experimental settings (warning).
+	Experimental map[string]struct{}
+
 	// Unresolved value references
 	UnresolvedValueRefs map[string]struct{}
 }
@@ -171,6 +175,7 @@ func NewCfg() Cfg {
 		Deprecated:          map[string]struct{}{},
 		Defunct:             map[string]struct{}{},
 		Consts:              map[string]struct{}{},
+		Experimental:        map[string]struct{}{},
 		UnresolvedValueRefs: map[string]struct{}{},
 	}
 }
@@ -452,6 +457,8 @@ func readSetting(name string, lpkg *pkg.LocalPackage,
 		entry.State = CFG_SETTING_STATE_DEFUNCT
 	} else if boolValue(vals["deprecated"]) {
 		entry.State = CFG_SETTING_STATE_DEPRECATED
+	} else if boolValue(vals["experimental"]) {
+		entry.State = CFG_SETTING_STATE_EXPERIMENTAL
 	} else {
 		entry.State = CFG_SETTING_STATE_GOOD
 	}
@@ -712,6 +719,8 @@ func (cfg *Cfg) readValsOnce(lpkg *pkg.LocalPackage,
 			cfg.Defunct[k] = struct{}{}
 		case CFG_SETTING_STATE_CONST:
 			cfg.Consts[k] = struct{}{}
+		case CFG_SETTING_STATE_EXPERIMENTAL:
+			cfg.Experimental[k] = struct{}{}
 		}
 	}
 
@@ -1120,6 +1129,25 @@ func (cfg *Cfg) DeprecatedWarning() []string {
 	return lines
 }
 
+func (cfg *Cfg) ExperimentalWarning() []string {
+	lines := []string{}
+
+	for k, _ := range cfg.Experimental {
+		entry, ok := cfg.Settings[k]
+		if !ok {
+			log.Errorf("Internal error; experimental setting \"%s\" not in cfg",
+				k)
+		}
+
+		point := mostRecentPoint(entry)
+		lines = append(lines,
+			fmt.Sprintf("Use of experimental setting %s in %s", k,
+				point.Source.FullName()))
+	}
+
+	return lines
+}
+
 func settingName(setting string) string {
 	return SYSCFG_PREFIX_SETTING + util.CIdentifier(setting)
 }