in newt/cli/target_cmds.go [306:407]
func targetSetCmd(cmd *cobra.Command, args []string) {
if len(args) < 2 {
NewtUsage(cmd,
util.NewNewtError("Must specify at least two arguments "+
"(target-name & k=v) to set"))
}
TryGetProject()
// Parse target name.
t, err := resolveExistingTargetArg(args[0])
if err != nil {
NewtUsage(cmd, err)
}
// Parse series of k=v pairs. If an argument doesn't contain a '='
// character, display the valid values for the variable and quit.
vars := [][]string{}
for i := 1; i < len(args); i++ {
kv := strings.SplitN(args[i], "=", 2)
key := strings.TrimPrefix(kv[0], "target.")
supported := false
for _, v := range setVars {
if key == v {
supported = true
break
}
}
if !supported {
NewtUsage(cmd,
util.NewNewtError("Not a valid variable: "+key))
}
if !strings.HasPrefix(kv[0], "target.") {
kv[0] = "target." + kv[0]
}
// Make sure it is a valid variable.
if len(kv) == 1 {
// User entered a variable name without a value.
NewtUsage(cmd, nil)
}
// Trim trailing slash from value. This is necessary when tab
// completion is used to fill in the value.
kv[1] = strings.TrimSuffix(kv[1], "/")
vars = append(vars, kv)
}
// Set each specified variable in the target.
for _, kv := range vars {
// A few variables are special cases; they get set in the base package
// instead of the target.
if kv[0] == "target.syscfg" {
t.Package().SyscfgY.Clear()
kv, err := syscfg.KeyValueFromStr(kv[1])
if err != nil {
NewtUsage(cmd, err)
}
itfMap := util.StringMapStringToItfMapItf(kv)
t.Package().SyscfgY.Replace("syscfg.vals", itfMap)
} else if kv[0] == "target.cflags" ||
kv[0] == "target.cxxflags" ||
kv[0] == "target.lflags" ||
kv[0] == "target.aflags" {
kv[0] = "pkg." + strings.TrimPrefix(kv[0], "target.")
if kv[1] == "" {
// User specified empty value; delete variable.
t.Package().PkgY.Replace(kv[0], nil)
} else {
t.Package().PkgY.Replace(kv[0], strings.Fields(kv[1]))
}
} else {
if kv[1] == "" {
// User specified empty value; delete variable.
t.TargetY.Delete(kv[0])
} else {
// Assign value to specified variable.
t.TargetY.Replace(kv[0], kv[1])
}
}
}
if err := t.Save(); err != nil {
NewtUsage(cmd, err)
}
for _, kv := range vars {
if kv[1] == "" {
util.StatusMessage(util.VERBOSITY_DEFAULT,
"Target %s successfully unset %s\n", t.FullName(), kv[0])
} else {
util.StatusMessage(util.VERBOSITY_DEFAULT,
"Target %s successfully set %s to %s\n", t.FullName(), kv[0],
kv[1])
}
}
}