You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2018/11/01 18:40:10 UTC
[mynewt-newt] 09/09: CLI: Move some target commands to a new file
This is an automated email from the ASF dual-hosted git repository.
ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
commit 2f34faf8d3a282cc29bae44d60a50e02a067579c
Author: Christopher Collins <cc...@apache.org>
AuthorDate: Wed Oct 24 17:33:14 2018 -0700
CLI: Move some target commands to a new file
Clean up `target_cmds.go` by moving the following commands to a new file:
* target config
* target logcfg
* target sysinit
* target sysdown
---
newt/cli/target_cfg_cmds.go | 856 ++++++++++++++++++++++++++++++++++++++++++++
newt/cli/target_cmds.go | 790 +---------------------------------------
2 files changed, 861 insertions(+), 785 deletions(-)
diff --git a/newt/cli/target_cfg_cmds.go b/newt/cli/target_cfg_cmds.go
new file mode 100644
index 0000000..6966519
--- /dev/null
+++ b/newt/cli/target_cfg_cmds.go
@@ -0,0 +1,856 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Implements commands that show or modify a target's configuration.
+
+package cli
+
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "sort"
+ "strings"
+
+ log "github.com/Sirupsen/logrus"
+ "github.com/spf13/cobra"
+
+ "mynewt.apache.org/newt/newt/builder"
+ "mynewt.apache.org/newt/newt/logcfg"
+ "mynewt.apache.org/newt/newt/newtutil"
+ "mynewt.apache.org/newt/newt/pkg"
+ "mynewt.apache.org/newt/newt/resolve"
+ "mynewt.apache.org/newt/newt/stage"
+ "mynewt.apache.org/newt/newt/syscfg"
+ "mynewt.apache.org/newt/newt/sysdown"
+ "mynewt.apache.org/newt/newt/sysinit"
+ "mynewt.apache.org/newt/newt/val"
+ "mynewt.apache.org/newt/util"
+)
+
+func printSetting(entry syscfg.CfgEntry) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " * Setting: %s\n", entry.Name)
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " * Description: %s\n", entry.Description)
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " * Value: %s", entry.Value)
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+
+ if len(entry.History) > 1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " * Overridden: ")
+ for i := 1; i < len(entry.History); i++ {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "%s, ",
+ entry.History[i].Source.FullName())
+ }
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ "default=%s\n", entry.History[0].Value)
+ }
+ if len(entry.ValueRefName) > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " * Copied from: %s\n",
+ entry.ValueRefName)
+ }
+}
+
+func printBriefSetting(entry syscfg.CfgEntry) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " %s: %s",
+ entry.Name, entry.Value)
+
+ var extras []string
+
+ if len(entry.History) > 1 {
+ s := fmt.Sprintf("overridden by %s",
+ entry.History[len(entry.History)-1].Source.FullName())
+ extras = append(extras, s)
+ }
+ if len(entry.ValueRefName) > 0 {
+ s := fmt.Sprintf("copied from %s", entry.ValueRefName)
+ extras = append(extras, s)
+ }
+
+ if len(extras) > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " (%s)",
+ strings.Join(extras, ", "))
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+}
+
+func printPkgCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "* PACKAGE: %s\n", pkgName)
+
+ settingNames := make([]string, len(entries))
+ for i, entry := range entries {
+ settingNames[i] = entry.Name
+ }
+ sort.Strings(settingNames)
+
+ for _, name := range settingNames {
+ printSetting(cfg.Settings[name])
+ }
+}
+
+func printCfg(targetName string, cfg syscfg.Cfg) {
+ if errText := cfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Syscfg for %s:\n", targetName)
+ pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
+
+ pkgNames := make([]string, 0, len(pkgNameEntryMap))
+ for pkgName, _ := range pkgNameEntryMap {
+ pkgNames = append(pkgNames, pkgName)
+ }
+ sort.Strings(pkgNames)
+
+ for i, pkgName := range pkgNames {
+ if i > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ printPkgCfg(pkgName, cfg, pkgNameEntryMap[pkgName])
+ }
+}
+
+func printPkgBriefCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "[%s]\n", pkgName)
+
+ settingNames := make([]string, len(entries))
+ for i, entry := range entries {
+ settingNames[i] = entry.Name
+ }
+ sort.Strings(settingNames)
+
+ for _, name := range settingNames {
+ printBriefSetting(cfg.Settings[name])
+ }
+}
+
+func printBriefCfg(targetName string, cfg syscfg.Cfg) {
+ if errText := cfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief syscfg for %s:\n", targetName)
+ pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
+
+ pkgNames := make([]string, 0, len(pkgNameEntryMap))
+ for pkgName, _ := range pkgNameEntryMap {
+ pkgNames = append(pkgNames, pkgName)
+ }
+ sort.Strings(pkgNames)
+
+ for i, pkgName := range pkgNames {
+ if i > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ printPkgBriefCfg(pkgName, cfg, pkgNameEntryMap[pkgName])
+ }
+}
+
+func yamlPkgCfg(w io.Writer, pkgName string, cfg syscfg.Cfg,
+ entries []syscfg.CfgEntry) {
+
+ settingNames := make([]string, len(entries))
+ for i, entry := range entries {
+ settingNames[i] = entry.Name
+ }
+ sort.Strings(settingNames)
+
+ fmt.Fprintf(w, " ### %s\n", pkgName)
+ for _, name := range settingNames {
+ fmt.Fprintf(w, " %s: '%s'\n", name, cfg.Settings[name].Value)
+ }
+}
+
+func yamlCfg(cfg syscfg.Cfg) string {
+ if errText := cfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
+
+ pkgNames := make([]string, 0, len(pkgNameEntryMap))
+ for pkgName, _ := range pkgNameEntryMap {
+ pkgNames = append(pkgNames, pkgName)
+ }
+ sort.Strings(pkgNames)
+
+ buf := bytes.Buffer{}
+
+ fmt.Fprintf(&buf, "syscfg.vals:\n")
+ for i, pkgName := range pkgNames {
+ if i > 0 {
+ fmt.Fprintf(&buf, "\n")
+ }
+ yamlPkgCfg(&buf, pkgName, cfg, pkgNameEntryMap[pkgName])
+ }
+
+ return string(buf.Bytes())
+}
+
+func targetBuilderConfigResolve(b *builder.TargetBuilder) *resolve.Resolution {
+ res, err := b.Resolve()
+ if err != nil {
+ NewtUsage(nil, err)
+ }
+
+ warningText := strings.TrimSpace(res.WarningText())
+ if warningText != "" {
+ log.Warn(warningText + "\n")
+ }
+
+ return res
+}
+
+func targetConfigShowCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printCfg(b.GetTarget().Name(), res.Cfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func targetConfigBriefCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printBriefCfg(b.GetTarget().Name(), res.Cfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func valSettingString(vs val.ValSetting) string {
+ intVal, _ := vs.IntVal()
+
+ s := fmt.Sprintf("%d", intVal)
+ if vs.RefName != "" {
+ s += fmt.Sprintf("%*s [%s]", 16-len(s), "", vs.RefName)
+ }
+
+ return s
+}
+
+func logLevelString(ls val.ValSetting) string {
+ intVal, _ := ls.IntVal()
+
+ s := fmt.Sprintf("%d (%s)", intVal, logcfg.LogLevelString(intVal))
+ if ls.RefName != "" {
+ s += fmt.Sprintf("%*s [%s]", 16-len(s), "", ls.RefName)
+ }
+
+ return s
+}
+
+func printLogCfgOne(l logcfg.Log) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "%s:\n", l.Name)
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " Package: %s\n",
+ l.Source.FullName())
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " Module: %s\n",
+ valSettingString(l.Module))
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " Level: %s\n",
+ logLevelString(l.Level))
+}
+
+func printLogCfg(targetName string, lcfg logcfg.LCfg) {
+ if errText := lcfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Log config for %s:\n",
+ targetName)
+
+ logNames := make([]string, 0, len(lcfg.Logs))
+ for name, _ := range lcfg.Logs {
+ logNames = append(logNames, name)
+ }
+ sort.Strings(logNames)
+
+ for i, logName := range logNames {
+ if i > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ printLogCfgOne(lcfg.Logs[logName])
+ }
+}
+
+func targetLogShowCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printLogCfg(b.GetTarget().Name(), res.LCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func printLogCfgBriefOne(l logcfg.Log, colWidth int) {
+ intMod, _ := l.Module.IntVal()
+ intLevel, _ := l.Level.IntVal()
+
+ levelStr := fmt.Sprintf("%d (%s)", intLevel,
+ logcfg.LogLevelString(intLevel))
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "%*s | %-8d | %-12s\n",
+ colWidth, l.Name, intMod, levelStr)
+}
+
+func printLogCfgBrief(targetName string, lcfg logcfg.LCfg) {
+ if errText := lcfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief log config for %s:\n",
+ targetName)
+
+ longest := 6
+ logNames := make([]string, 0, len(lcfg.Logs))
+ for name, _ := range lcfg.Logs {
+ logNames = append(logNames, name)
+ if len(name) > longest {
+ longest = len(name)
+ }
+ }
+ sort.Strings(logNames)
+
+ colWidth := longest + 4
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ "%*s | MODULE | LEVEL\n", colWidth, "LOG")
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ "%s-+----------+--------------\n",
+ strings.Repeat("-", colWidth))
+ for _, logName := range logNames {
+ printLogCfgBriefOne(lcfg.Logs[logName], colWidth)
+ }
+}
+
+func targetLogBriefCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printLogCfgBrief(b.GetTarget().Name(), res.LCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func printStage(sf stage.StageFunc) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "%s:\n", sf.Name)
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " Package: %s\n",
+ sf.Pkg.FullName())
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " Stage: %s\n",
+ valSettingString(sf.Stage))
+}
+
+func printStageBriefOne(sf stage.StageFunc,
+ stageWidth int, pkgWidth int, fnWidth int, settingWidth int) {
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " %-*s | %-*s | %-*s | %-*s\n",
+ stageWidth, sf.Stage.Value,
+ pkgWidth, sf.Pkg.FullName(),
+ fnWidth, sf.Name,
+ settingWidth, sf.Stage.RefName)
+}
+
+func printStageBriefTable(sfs []stage.StageFunc) {
+ longestStage := 5
+ longestPkg := 7
+ longestFn := 8
+ longestSetting := 7
+ for _, sf := range sfs {
+ if len(sf.Stage.Value) > longestStage {
+ longestStage = len(sf.Stage.Value)
+ }
+ if len(sf.Pkg.FullName()) > longestPkg {
+ longestPkg = len(sf.Pkg.FullName())
+ }
+ if len(sf.Name) > longestFn {
+ longestFn = len(sf.Name)
+ }
+ if len(sf.Stage.RefName) > longestSetting {
+ longestSetting = len(sf.Stage.RefName)
+ }
+ }
+
+ stageWidth := longestStage + 2
+ pkgWidth := longestPkg + 2
+ fnWidth := longestFn + 2
+ settingWidth := longestSetting + 2
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ " %-*s | %-*s | %-*s | %-*s\n",
+ stageWidth, "STAGE",
+ pkgWidth, "PACKAGE",
+ fnWidth, "FUNCTION",
+ settingWidth, "SETTING")
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ "-%s-+-%s-+-%s-+-%s-\n",
+ strings.Repeat("-", stageWidth),
+ strings.Repeat("-", pkgWidth),
+ strings.Repeat("-", fnWidth),
+ strings.Repeat("-", settingWidth))
+ for _, sf := range sfs {
+ printStageBriefOne(sf, stageWidth, pkgWidth, fnWidth, settingWidth)
+ }
+}
+
+func printSysinitCfg(targetName string, scfg sysinit.SysinitCfg) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Sysinit config for %s:\n",
+ targetName)
+
+ if errText := scfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ for i, sf := range scfg.StageFuncs {
+ if i > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ printStage(sf)
+ }
+}
+
+func printSysinitBrief(targetName string, scfg sysinit.SysinitCfg) {
+ if errText := scfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief sysinit config for %s:\n",
+ targetName)
+
+ printStageBriefTable(scfg.StageFuncs)
+}
+
+func targetSysinitShowCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printSysinitCfg(b.GetTarget().Name(), res.SysinitCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func targetSysinitBriefCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printSysinitBrief(b.GetTarget().Name(), res.SysinitCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func printSysdownCfg(targetName string, scfg sysdown.SysdownCfg) {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Sysdown config for %s:\n",
+ targetName)
+
+ if errText := scfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ for i, sf := range scfg.StageFuncs {
+ if i > 0 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ printStage(sf)
+ }
+}
+
+func targetSysdownShowCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printSysdownCfg(b.GetTarget().Name(), res.SysdownCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func printSysdownBrief(targetName string, scfg sysdown.SysdownCfg) {
+ if errText := scfg.ErrorText(); errText != "" {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
+ }
+
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief sysdown config for %s:\n",
+ targetName)
+
+ printStageBriefTable(scfg.StageFuncs)
+}
+
+func targetSysdownBriefCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ TryGetProject()
+
+ for i, arg := range args {
+ b, err := TargetBuilderForTargetOrUnittest(arg)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+
+ res := targetBuilderConfigResolve(b)
+ printSysdownBrief(b.GetTarget().Name(), res.SysdownCfg)
+
+ if i < len(args)-1 {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+ }
+ }
+}
+
+func targetConfigInitCmd(cmd *cobra.Command, args []string) {
+ if len(args) < 1 {
+ NewtUsage(cmd,
+ util.NewNewtError("Must specify target or unittest name"))
+ }
+
+ type entry struct {
+ lpkg *pkg.LocalPackage
+ path string
+ b *builder.TargetBuilder
+ exists bool
+ }
+
+ TryGetProject()
+
+ anyExist := false
+ entries := make([]entry, len(args))
+ for i, pkgName := range args {
+ e := &entries[i]
+
+ b, err := TargetBuilderForTargetOrUnittest(pkgName)
+ if err != nil {
+ NewtUsage(cmd, err)
+ }
+ e.b = b
+
+ e.lpkg = b.GetTestPkg()
+ if e.lpkg == nil {
+ e.lpkg = b.GetTarget().Package()
+ }
+
+ e.path = builder.PkgSyscfgPath(e.lpkg.BasePath())
+
+ if util.NodeExist(e.path) {
+ e.exists = true
+ anyExist = true
+ }
+ }
+
+ if anyExist && !newtutil.NewtForce {
+ util.StatusMessage(util.VERBOSITY_DEFAULT,
+ "Configuration files already exist:\n")
+ for _, e := range entries {
+ if e.exists {
+ util.StatusMessage(util.VERBOSITY_DEFAULT, " * %s\n",
+ e.path)
+ }
+ }
+ util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
+
+ fmt.Printf("Overwrite them? (y/N): ")
+ rsp := PromptYesNo(false)
+ if !rsp {
+ return
+ }
+ }
+
+ for _, e := range entries {
+ res := targetBuilderConfigResolve(e.b)
+ yaml := yamlCfg(res.Cfg)
+
+ if err := ioutil.WriteFile(e.path, []byte(yaml), 0644); err != nil {
+ NewtUsage(nil, util.FmtNewtError("Error writing file \"%s\"; %s",
+ e.path, err.Error()))
+ }
+ }
+}
+
+func targetCfgCmdAll() []*cobra.Command {
+ cmds := []*cobra.Command{}
+
+ configHelpText := "View or populate a target's system configuration"
+
+ configCmd := &cobra.Command{
+ Use: "config",
+ Short: configHelpText,
+ Long: configHelpText,
+ Run: func(cmd *cobra.Command, args []string) {
+ cmd.Usage()
+ },
+ }
+
+ cmds = append(cmds, configCmd)
+
+ configShowCmd := &cobra.Command{
+ Use: "show <target> [target...]",
+ Short: "View a target's system configuration",
+ Long: "View a target's system configuration",
+ Run: targetConfigShowCmd,
+ }
+
+ configCmd.AddCommand(configShowCmd)
+ AddTabCompleteFn(configShowCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ configBriefCmd := &cobra.Command{
+ Use: "brief <target> [target...]",
+ Short: "View a summary of target's system configuration",
+ Long: "View a summary of target's system configuration",
+ Run: targetConfigBriefCmd,
+ }
+
+ configCmd.AddCommand(configBriefCmd)
+ AddTabCompleteFn(configBriefCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ configInitCmd := &cobra.Command{
+ Use: "init",
+ Short: "Populate a target's system configuration file",
+ Long: "Populate a target's system configuration file (syscfg). " +
+ "Unspecified settings are given default values.",
+ Run: targetConfigInitCmd,
+ }
+ configInitCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
+ "force", "f", false,
+ "Force overwrite of target configuration")
+
+ configCmd.AddCommand(configInitCmd)
+ AddTabCompleteFn(configInitCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ logHelpText := "View a target's log configuration"
+
+ logCmd := &cobra.Command{
+ Use: "logcfg",
+ Short: logHelpText,
+ Long: logHelpText,
+ Run: func(cmd *cobra.Command, args []string) {
+ cmd.Usage()
+ },
+ }
+
+ cmds = append(cmds, logCmd)
+
+ logShowCmd := &cobra.Command{
+ Use: "show <target> [target...]",
+ Short: "View a target's log configuration",
+ Long: "View a target's log configuration",
+ Run: targetLogShowCmd,
+ }
+
+ logCmd.AddCommand(logShowCmd)
+ AddTabCompleteFn(logShowCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ logBriefCmd := &cobra.Command{
+ Use: "brief <target> [target...]",
+ Short: "View a summary of target's log configuration",
+ Long: "View a summary of target's log configuration",
+ Run: targetLogBriefCmd,
+ }
+
+ logCmd.AddCommand(logBriefCmd)
+ AddTabCompleteFn(logBriefCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ sysinitHelpText := "View a target's sysinit configuration"
+
+ sysinitCmd := &cobra.Command{
+ Use: "sysinit",
+ Short: sysinitHelpText,
+ Long: sysinitHelpText,
+ Run: func(cmd *cobra.Command, args []string) {
+ cmd.Usage()
+ },
+ }
+
+ cmds = append(cmds, sysinitCmd)
+
+ sysinitShowCmd := &cobra.Command{
+ Use: "show <target> [target...]",
+ Short: "View a target's sysinit configuration",
+ Long: "View a target's sysinit configuration",
+ Run: targetSysinitShowCmd,
+ }
+
+ sysinitCmd.AddCommand(sysinitShowCmd)
+ AddTabCompleteFn(sysinitShowCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ sysinitBriefCmd := &cobra.Command{
+ Use: "brief <target> [target...]",
+ Short: "View a summary of target's sysinit configuration",
+ Long: "View a summary of target's sysinit configuration",
+ Run: targetSysinitBriefCmd,
+ }
+
+ sysinitCmd.AddCommand(sysinitBriefCmd)
+ AddTabCompleteFn(sysinitBriefCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ sysdownHelpText := "View a target's sysdown configuration"
+
+ sysdownCmd := &cobra.Command{
+ Use: "sysdown",
+ Short: sysdownHelpText,
+ Long: sysdownHelpText,
+ Run: func(cmd *cobra.Command, args []string) {
+ cmd.Usage()
+ },
+ }
+
+ cmds = append(cmds, sysdownCmd)
+
+ sysdownShowCmd := &cobra.Command{
+ Use: "show <target> [target...]",
+ Short: "View a target's sysdown configuration",
+ Long: "View a target's sysdown configuration",
+ Run: targetSysdownShowCmd,
+ }
+
+ sysdownCmd.AddCommand(sysdownShowCmd)
+ AddTabCompleteFn(sysdownShowCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ sysdownBriefCmd := &cobra.Command{
+ Use: "brief <target> [target...]",
+ Short: "View a summary of target's sysdown configuration",
+ Long: "View a summary of target's sysdown configuration",
+ Run: targetSysdownBriefCmd,
+ }
+
+ sysdownCmd.AddCommand(sysdownBriefCmd)
+ AddTabCompleteFn(sysdownBriefCmd, func() []string {
+ return append(targetList(), unittestList()...)
+ })
+
+ return cmds
+}
diff --git a/newt/cli/target_cmds.go b/newt/cli/target_cmds.go
index 41cbb9b..04c3260 100644
--- a/newt/cli/target_cmds.go
+++ b/newt/cli/target_cmds.go
@@ -22,25 +22,19 @@ package cli
import (
"bytes"
"fmt"
- "io"
"io/ioutil"
"os"
"sort"
"strings"
- log "github.com/Sirupsen/logrus"
"github.com/spf13/cobra"
+
"mynewt.apache.org/newt/newt/builder"
- "mynewt.apache.org/newt/newt/logcfg"
"mynewt.apache.org/newt/newt/newtutil"
"mynewt.apache.org/newt/newt/pkg"
"mynewt.apache.org/newt/newt/resolve"
- "mynewt.apache.org/newt/newt/stage"
"mynewt.apache.org/newt/newt/syscfg"
- "mynewt.apache.org/newt/newt/sysdown"
- "mynewt.apache.org/newt/newt/sysinit"
"mynewt.apache.org/newt/newt/target"
- "mynewt.apache.org/newt/newt/val"
"mynewt.apache.org/newt/newt/ycfg"
"mynewt.apache.org/newt/util"
)
@@ -557,620 +551,6 @@ func targetCopyCmd(cmd *cobra.Command, args []string) {
srcTarget.FullName(), dstTarget.FullName())
}
-func printSetting(entry syscfg.CfgEntry) {
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " * Setting: %s\n", entry.Name)
-
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " * Description: %s\n", entry.Description)
-
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " * Value: %s", entry.Value)
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-
- if len(entry.History) > 1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " * Overridden: ")
- for i := 1; i < len(entry.History); i++ {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "%s, ",
- entry.History[i].Source.FullName())
- }
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "default=%s\n", entry.History[0].Value)
- }
- if len(entry.ValueRefName) > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " * Copied from: %s\n",
- entry.ValueRefName)
- }
-}
-
-func printBriefSetting(entry syscfg.CfgEntry) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, " %s: %s",
- entry.Name, entry.Value)
-
- var extras []string
-
- if len(entry.History) > 1 {
- s := fmt.Sprintf("overridden by %s",
- entry.History[len(entry.History)-1].Source.FullName())
- extras = append(extras, s)
- }
- if len(entry.ValueRefName) > 0 {
- s := fmt.Sprintf("copied from %s", entry.ValueRefName)
- extras = append(extras, s)
- }
-
- if len(extras) > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, " (%s)",
- strings.Join(extras, ", "))
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-}
-
-func printPkgCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "* PACKAGE: %s\n", pkgName)
-
- settingNames := make([]string, len(entries))
- for i, entry := range entries {
- settingNames[i] = entry.Name
- }
- sort.Strings(settingNames)
-
- for _, name := range settingNames {
- printSetting(cfg.Settings[name])
- }
-}
-
-func printCfg(targetName string, cfg syscfg.Cfg) {
- if errText := cfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Syscfg for %s:\n", targetName)
- pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
-
- pkgNames := make([]string, 0, len(pkgNameEntryMap))
- for pkgName, _ := range pkgNameEntryMap {
- pkgNames = append(pkgNames, pkgName)
- }
- sort.Strings(pkgNames)
-
- for i, pkgName := range pkgNames {
- if i > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- printPkgCfg(pkgName, cfg, pkgNameEntryMap[pkgName])
- }
-}
-
-func printPkgBriefCfg(pkgName string, cfg syscfg.Cfg, entries []syscfg.CfgEntry) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "[%s]\n", pkgName)
-
- settingNames := make([]string, len(entries))
- for i, entry := range entries {
- settingNames[i] = entry.Name
- }
- sort.Strings(settingNames)
-
- for _, name := range settingNames {
- printBriefSetting(cfg.Settings[name])
- }
-}
-
-func printBriefCfg(targetName string, cfg syscfg.Cfg) {
- if errText := cfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief syscfg for %s:\n", targetName)
- pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
-
- pkgNames := make([]string, 0, len(pkgNameEntryMap))
- for pkgName, _ := range pkgNameEntryMap {
- pkgNames = append(pkgNames, pkgName)
- }
- sort.Strings(pkgNames)
-
- for i, pkgName := range pkgNames {
- if i > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- printPkgBriefCfg(pkgName, cfg, pkgNameEntryMap[pkgName])
- }
-}
-
-func yamlPkgCfg(w io.Writer, pkgName string, cfg syscfg.Cfg,
- entries []syscfg.CfgEntry) {
-
- settingNames := make([]string, len(entries))
- for i, entry := range entries {
- settingNames[i] = entry.Name
- }
- sort.Strings(settingNames)
-
- fmt.Fprintf(w, " ### %s\n", pkgName)
- for _, name := range settingNames {
- fmt.Fprintf(w, " %s: '%s'\n", name, cfg.Settings[name].Value)
- }
-}
-
-func yamlCfg(cfg syscfg.Cfg) string {
- if errText := cfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- pkgNameEntryMap := syscfg.EntriesByPkg(cfg)
-
- pkgNames := make([]string, 0, len(pkgNameEntryMap))
- for pkgName, _ := range pkgNameEntryMap {
- pkgNames = append(pkgNames, pkgName)
- }
- sort.Strings(pkgNames)
-
- buf := bytes.Buffer{}
-
- fmt.Fprintf(&buf, "syscfg.vals:\n")
- for i, pkgName := range pkgNames {
- if i > 0 {
- fmt.Fprintf(&buf, "\n")
- }
- yamlPkgCfg(&buf, pkgName, cfg, pkgNameEntryMap[pkgName])
- }
-
- return string(buf.Bytes())
-}
-
-func targetBuilderConfigResolve(b *builder.TargetBuilder) *resolve.Resolution {
- res, err := b.Resolve()
- if err != nil {
- NewtUsage(nil, err)
- }
-
- warningText := strings.TrimSpace(res.WarningText())
- if warningText != "" {
- log.Warn(warningText + "\n")
- }
-
- return res
-}
-
-func targetConfigShowCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printCfg(b.GetTarget().Name(), res.Cfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func targetConfigBriefCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printBriefCfg(b.GetTarget().Name(), res.Cfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func valSettingString(vs val.ValSetting) string {
- intVal, _ := vs.IntVal()
-
- s := fmt.Sprintf("%d", intVal)
- if vs.RefName != "" {
- s += fmt.Sprintf("%*s [%s]", 16-len(s), "", vs.RefName)
- }
-
- return s
-}
-
-func logLevelString(ls val.ValSetting) string {
- intVal, _ := ls.IntVal()
-
- s := fmt.Sprintf("%d (%s)", intVal, logcfg.LogLevelString(intVal))
- if ls.RefName != "" {
- s += fmt.Sprintf("%*s [%s]", 16-len(s), "", ls.RefName)
- }
-
- return s
-}
-
-func printLogCfgOne(l logcfg.Log) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "%s:\n", l.Name)
- util.StatusMessage(util.VERBOSITY_DEFAULT, " Package: %s\n",
- l.Source.FullName())
- util.StatusMessage(util.VERBOSITY_DEFAULT, " Module: %s\n",
- valSettingString(l.Module))
- util.StatusMessage(util.VERBOSITY_DEFAULT, " Level: %s\n",
- logLevelString(l.Level))
-}
-
-func printLogCfg(targetName string, lcfg logcfg.LCfg) {
- if errText := lcfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Log config for %s:\n",
- targetName)
-
- logNames := make([]string, 0, len(lcfg.Logs))
- for name, _ := range lcfg.Logs {
- logNames = append(logNames, name)
- }
- sort.Strings(logNames)
-
- for i, logName := range logNames {
- if i > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- printLogCfgOne(lcfg.Logs[logName])
- }
-}
-
-func targetLogShowCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printLogCfg(b.GetTarget().Name(), res.LCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func printLogCfgBriefOne(l logcfg.Log, colWidth int) {
- intMod, _ := l.Module.IntVal()
- intLevel, _ := l.Level.IntVal()
-
- levelStr := fmt.Sprintf("%d (%s)", intLevel,
- logcfg.LogLevelString(intLevel))
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "%*s | %-8d | %-12s\n",
- colWidth, l.Name, intMod, levelStr)
-}
-
-func printLogCfgBrief(targetName string, lcfg logcfg.LCfg) {
- if errText := lcfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief log config for %s:\n",
- targetName)
-
- longest := 6
- logNames := make([]string, 0, len(lcfg.Logs))
- for name, _ := range lcfg.Logs {
- logNames = append(logNames, name)
- if len(name) > longest {
- longest = len(name)
- }
- }
- sort.Strings(logNames)
-
- colWidth := longest + 4
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "%*s | MODULE | LEVEL\n", colWidth, "LOG")
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "%s-+----------+--------------\n",
- strings.Repeat("-", colWidth))
- for _, logName := range logNames {
- printLogCfgBriefOne(lcfg.Logs[logName], colWidth)
- }
-}
-
-func targetLogBriefCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printLogCfgBrief(b.GetTarget().Name(), res.LCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func printStage(sf stage.StageFunc) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "%s:\n", sf.Name)
- util.StatusMessage(util.VERBOSITY_DEFAULT, " Package: %s\n",
- sf.Pkg.FullName())
- util.StatusMessage(util.VERBOSITY_DEFAULT, " Stage: %s\n",
- valSettingString(sf.Stage))
-}
-
-func printStageBriefOne(sf stage.StageFunc, fnWidth int, pkgWidth int) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, " %-*s | %-*s | %s\n",
- fnWidth, sf.Name,
- pkgWidth, sf.Pkg.FullName(),
- valSettingString(sf.Stage))
-}
-
-func printStageBriefTable(sfs []stage.StageFunc) {
- longestPkg := 6
- longestFn := 6
- for _, sf := range sfs {
- if len(sf.Name) > longestFn {
- longestFn = len(sf.Name)
- }
- if len(sf.Pkg.FullName()) > longestPkg {
- longestPkg = len(sf.Pkg.FullName())
- }
- }
-
- pkgWidth := longestPkg + 2
- fnWidth := longestFn + 2
-
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- " %-*s | %-*s | STAGE\n",
- fnWidth, "FUNCTION",
- pkgWidth, "PACKAGE")
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "-%s-+-%s-+----------\n",
- strings.Repeat("-", fnWidth), strings.Repeat("-", pkgWidth))
- for _, sf := range sfs {
- printStageBriefOne(sf, fnWidth, pkgWidth)
- }
-}
-
-func printSysinitCfg(targetName string, scfg sysinit.SysinitCfg) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Sysinit config for %s:\n",
- targetName)
-
- for i, sf := range scfg.StageFuncs {
- if i > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- printStage(sf)
- }
-}
-
-func printSysinitBrief(targetName string, scfg sysinit.SysinitCfg) {
- if errText := scfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief sysinit config for %s:\n",
- targetName)
-
- printStageBriefTable(scfg.StageFuncs)
-}
-
-func targetSysinitShowCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printSysinitCfg(b.GetTarget().Name(), res.SysinitCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func targetSysinitBriefCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printSysinitBrief(b.GetTarget().Name(), res.SysinitCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func printSysdownCfg(targetName string, scfg sysdown.SysdownCfg) {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Sysdown config for %s:\n",
- targetName)
-
- for i, sf := range scfg.StageFuncs {
- if i > 0 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- printStage(sf)
- }
-}
-
-func targetSysdownShowCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printSysdownCfg(b.GetTarget().Name(), res.SysdownCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func printSysdownBrief(targetName string, scfg sysdown.SysdownCfg) {
- if errText := scfg.ErrorText(); errText != "" {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "!!! %s\n\n", errText)
- }
-
- util.StatusMessage(util.VERBOSITY_DEFAULT, "Brief sysdown config for %s:\n",
- targetName)
-
- printStageBriefTable(scfg.StageFuncs)
-}
-
-func targetSysdownBriefCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- TryGetProject()
-
- for i, arg := range args {
- b, err := TargetBuilderForTargetOrUnittest(arg)
- if err != nil {
- NewtUsage(cmd, err)
- }
-
- res := targetBuilderConfigResolve(b)
- printSysdownBrief(b.GetTarget().Name(), res.SysdownCfg)
-
- if i < len(args)-1 {
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
- }
- }
-}
-
-func targetConfigInitCmd(cmd *cobra.Command, args []string) {
- if len(args) < 1 {
- NewtUsage(cmd,
- util.NewNewtError("Must specify target or unittest name"))
- }
-
- type entry struct {
- lpkg *pkg.LocalPackage
- path string
- b *builder.TargetBuilder
- exists bool
- }
-
- TryGetProject()
-
- anyExist := false
- entries := make([]entry, len(args))
- for i, pkgName := range args {
- e := &entries[i]
-
- b, err := TargetBuilderForTargetOrUnittest(pkgName)
- if err != nil {
- NewtUsage(cmd, err)
- }
- e.b = b
-
- e.lpkg = b.GetTestPkg()
- if e.lpkg == nil {
- e.lpkg = b.GetTarget().Package()
- }
-
- e.path = builder.PkgSyscfgPath(e.lpkg.BasePath())
-
- if util.NodeExist(e.path) {
- e.exists = true
- anyExist = true
- }
- }
-
- if anyExist && !newtutil.NewtForce {
- util.StatusMessage(util.VERBOSITY_DEFAULT,
- "Configuration files already exist:\n")
- for _, e := range entries {
- if e.exists {
- util.StatusMessage(util.VERBOSITY_DEFAULT, " * %s\n",
- e.path)
- }
- }
- util.StatusMessage(util.VERBOSITY_DEFAULT, "\n")
-
- fmt.Printf("Overwrite them? (y/N): ")
- rsp := PromptYesNo(false)
- if !rsp {
- return
- }
- }
-
- for _, e := range entries {
- res := targetBuilderConfigResolve(e.b)
- yaml := yamlCfg(res.Cfg)
-
- if err := ioutil.WriteFile(e.path, []byte(yaml), 0644); err != nil {
- NewtUsage(nil, util.FmtNewtError("Error writing file \"%s\"; %s",
- e.path, err.Error()))
- }
- }
-}
-
func targetDepCmd(cmd *cobra.Command, args []string) {
if len(args) < 1 {
NewtUsage(cmd,
@@ -1402,170 +782,6 @@ func AddTargetCommands(cmd *cobra.Command) {
targetCmd.AddCommand(copyCmd)
AddTabCompleteFn(copyCmd, targetList)
- configHelpText := "View or populate a target's system configuration"
-
- configCmd := &cobra.Command{
- Use: "config",
- Short: configHelpText,
- Long: configHelpText,
- Run: func(cmd *cobra.Command, args []string) {
- cmd.Usage()
- },
- }
-
- targetCmd.AddCommand(configCmd)
-
- configShowCmd := &cobra.Command{
- Use: "show <target> [target...]",
- Short: "View a target's system configuration",
- Long: "View a target's system configuration",
- Run: targetConfigShowCmd,
- }
-
- configCmd.AddCommand(configShowCmd)
- AddTabCompleteFn(configShowCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- configBriefCmd := &cobra.Command{
- Use: "brief <target> [target...]",
- Short: "View a summary of target's system configuration",
- Long: "View a summary of target's system configuration",
- Run: targetConfigBriefCmd,
- }
-
- configCmd.AddCommand(configBriefCmd)
- AddTabCompleteFn(configBriefCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- configInitCmd := &cobra.Command{
- Use: "init",
- Short: "Populate a target's system configuration file",
- Long: "Populate a target's system configuration file (syscfg). " +
- "Unspecified settings are given default values.",
- Run: targetConfigInitCmd,
- }
- configInitCmd.PersistentFlags().BoolVarP(&newtutil.NewtForce,
- "force", "f", false,
- "Force overwrite of target configuration")
-
- configCmd.AddCommand(configInitCmd)
- AddTabCompleteFn(configInitCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- logHelpText := "View a target's log configuration"
-
- logCmd := &cobra.Command{
- Use: "logcfg",
- Short: logHelpText,
- Long: logHelpText,
- Run: func(cmd *cobra.Command, args []string) {
- cmd.Usage()
- },
- }
-
- targetCmd.AddCommand(logCmd)
-
- logShowCmd := &cobra.Command{
- Use: "show <target> [target...]",
- Short: "View a target's log configuration",
- Long: "View a target's log configuration",
- Run: targetLogShowCmd,
- }
-
- logCmd.AddCommand(logShowCmd)
- AddTabCompleteFn(logShowCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- logBriefCmd := &cobra.Command{
- Use: "brief <target> [target...]",
- Short: "View a summary of target's log configuration",
- Long: "View a summary of target's log configuration",
- Run: targetLogBriefCmd,
- }
-
- logCmd.AddCommand(logBriefCmd)
- AddTabCompleteFn(logBriefCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- sysinitHelpText := "View a target's sysinit configuration"
-
- sysinitCmd := &cobra.Command{
- Use: "sysinit",
- Short: sysinitHelpText,
- Long: sysinitHelpText,
- Run: func(cmd *cobra.Command, args []string) {
- cmd.Usage()
- },
- }
-
- targetCmd.AddCommand(sysinitCmd)
-
- sysinitShowCmd := &cobra.Command{
- Use: "show <target> [target...]",
- Short: "View a target's sysinit configuration",
- Long: "View a target's sysinit configuration",
- Run: targetSysinitShowCmd,
- }
-
- sysinitCmd.AddCommand(sysinitShowCmd)
- AddTabCompleteFn(sysinitShowCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- sysinitBriefCmd := &cobra.Command{
- Use: "brief <target> [target...]",
- Short: "View a summary of target's sysinit configuration",
- Long: "View a summary of target's sysinit configuration",
- Run: targetSysinitBriefCmd,
- }
-
- sysinitCmd.AddCommand(sysinitBriefCmd)
- AddTabCompleteFn(sysinitBriefCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- sysdownHelpText := "View a target's sysdown configuration"
-
- sysdownCmd := &cobra.Command{
- Use: "sysdown",
- Short: sysdownHelpText,
- Long: sysdownHelpText,
- Run: func(cmd *cobra.Command, args []string) {
- cmd.Usage()
- },
- }
-
- targetCmd.AddCommand(sysdownCmd)
-
- sysdownShowCmd := &cobra.Command{
- Use: "show <target> [target...]",
- Short: "View a target's sysdown configuration",
- Long: "View a target's sysdown configuration",
- Run: targetSysdownShowCmd,
- }
-
- sysdownCmd.AddCommand(sysdownShowCmd)
- AddTabCompleteFn(sysdownShowCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
- sysdownBriefCmd := &cobra.Command{
- Use: "brief <target> [target...]",
- Short: "View a summary of target's sysdown configuration",
- Long: "View a summary of target's sysdown configuration",
- Run: targetSysdownBriefCmd,
- }
-
- sysdownCmd.AddCommand(sysdownBriefCmd)
- AddTabCompleteFn(sysdownBriefCmd, func() []string {
- return append(targetList(), unittestList()...)
- })
-
depHelpText := "View a target's dependency graph."
depCmd := &cobra.Command{
@@ -1593,4 +809,8 @@ func AddTargetCommands(cmd *cobra.Command) {
AddTabCompleteFn(revdepCmd, func() []string {
return append(targetList(), unittestList()...)
})
+
+ for _, cmd := range targetCfgCmdAll() {
+ targetCmd.AddCommand(cmd)
+ }
}