func NewLocalPackage(r *repo.Repo, pkgDir string) *LocalPackage { pkg := &LocalPackage{ desc: &PackageDesc{}, PkgV: viper.New(), SyscfgV: viper.New(), repo: r, basePath: filepath.Clean(pkgDir) + "/", // XXX: Remove slash. injectedSettings: map[string]string{}, } return pkg }
func readNewtrc() *viper.Viper { usr, err := user.Current() if err != nil { log.Warn("Failed to obtain user name") return viper.New() } dir := usr.HomeDir + "/" + NEWTRC_DIR v, err := util.ReadConfig(dir, strings.TrimSuffix(REPOS_FILENAME, ".yml")) if err != nil { log.Debugf("Failed to read %s/%s file", dir, REPOS_FILENAME) return viper.New() } return v }
// Read in the configuration file specified by name, in path // return a new viper config object if successful, and error if not func ReadConfig(path string, name string) (*viper.Viper, error) { v := viper.New() v.SetConfigType("yaml") v.SetConfigName(name) v.AddConfigPath(path) err := v.ReadInConfig() if err != nil { return nil, NewNewtError(fmt.Sprintf("Error reading %s.yml: %s", filepath.Join(path, name), err.Error())) } else { return v, nil } }
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")) } InitProject() // 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) if !strings.HasPrefix(kv[0], "target.") { kv[0] = "target." + kv[0] } 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().SyscfgV = viper.New() kv, err := targetSyscfgKVFromStr(kv[1]) if err != nil { NewtUsage(cmd, err) } t.Package().SyscfgV.Set("syscfg.vals", kv) } else if kv[0] == "target.cflags" || 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().PkgV.Set(kv[0], nil) } else { t.Package().PkgV.Set(kv[0], strings.Fields(kv[1])) } } else { if kv[1] == "" { // User specified empty value; delete variable. delete(t.Vars, kv[0]) } else { // Assign value to specified variable. t.Vars[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]) } } }