cmd/cue/cmd: move tag flags handling to central location
This refactoring will help implement variable injection (os, user, etc.)
Change-Id: I7fb234f015ab54807c578052752e2d6ddc96b5ea
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/9577
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Paul Jolly <paul@myitcv.org.uk>
diff --git a/cmd/cue/cmd/cmd.go b/cmd/cue/cmd/cmd.go
index 8850811..b0daf5a 100644
--- a/cmd/cue/cmd/cmd.go
+++ b/cmd/cue/cmd/cmd.go
@@ -149,8 +149,8 @@
}
cmd.Flags().SetInterspersed(false)
- cmd.Flags().StringArrayP(string(flagInject), "t", nil,
- "set the value of a tagged field")
+
+ addInjectionFlags(cmd.Flags(), true)
return cmd
}
diff --git a/cmd/cue/cmd/common.go b/cmd/cue/cmd/common.go
index eddf609..9f6fbbf 100644
--- a/cmd/cue/cmd/common.go
+++ b/cmd/cue/cmd/common.go
@@ -22,6 +22,7 @@
"regexp"
"strings"
+ "github.com/spf13/pflag"
"golang.org/x/text/language"
"golang.org/x/text/message"
@@ -392,7 +393,9 @@
}
cfg.reFile = re
- cfg.loadCfg.Tags = flagInject.StringArray(cmd)
+ if err := setTags(cmd.Flags(), cfg.loadCfg); err != nil {
+ return nil, err
+ }
return p, nil
}
@@ -401,6 +404,12 @@
return p.cfg.reFile.MatchString(file)
}
+func setTags(f *pflag.FlagSet, cfg *load.Config) error {
+ tags, _ := f.GetStringArray(string(flagInject))
+ cfg.Tags = tags
+ return nil
+}
+
type decoderInfo struct {
file *build.File
d *encoding.Decoder // may be nil if delayed
@@ -728,12 +737,16 @@
return instances, nil
}
-func buildTools(cmd *Command, tags, args []string) (*cue.Instance, error) {
+func buildTools(cmd *Command, args []string) (*cue.Instance, error) {
cfg := &load.Config{
- Tags: tags,
Tools: true,
}
+ f := cmd.cmd.Flags()
+ if err := setTags(f, cfg); err != nil {
+ return nil, err
+ }
+
binst := loadFromArgs(cmd, args, cfg)
if len(binst) == 0 {
return nil, nil
diff --git a/cmd/cue/cmd/def.go b/cmd/cue/cmd/def.go
index 9173ceb..32fce52 100644
--- a/cmd/cue/cmd/def.go
+++ b/cmd/cue/cmd/def.go
@@ -37,15 +37,13 @@
addOutFlags(cmd.Flags(), true)
addOrphanFlags(cmd.Flags())
+ addInjectionFlags(cmd.Flags(), false)
cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "evaluate this expression only")
cmd.Flags().BoolP(string(flagAttributes), "A", false,
"display field attributes")
- cmd.Flags().StringArrayP(string(flagInject), "t", nil,
- "set the value of a tagged field")
-
// TODO: Option to include comments in output.
return cmd
}
diff --git a/cmd/cue/cmd/eval.go b/cmd/cue/cmd/eval.go
index 244f053..fcebb7f 100644
--- a/cmd/cue/cmd/eval.go
+++ b/cmd/cue/cmd/eval.go
@@ -53,6 +53,7 @@
addOutFlags(cmd.Flags(), true)
addOrphanFlags(cmd.Flags())
+ addInjectionFlags(cmd.Flags(), false)
cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "evaluate this expression only")
@@ -71,9 +72,6 @@
cmd.Flags().BoolP(string(flagAll), "a", false,
"show optional and hidden fields")
- cmd.Flags().StringArrayP(string(flagInject), "t", nil,
- "set the value of a tagged field")
-
// TODO: Option to include comments in output.
return cmd
}
diff --git a/cmd/cue/cmd/export.go b/cmd/cue/cmd/export.go
index a675261..bec6704 100644
--- a/cmd/cue/cmd/export.go
+++ b/cmd/cue/cmd/export.go
@@ -94,11 +94,10 @@
addOutFlags(cmd.Flags(), true)
addOrphanFlags(cmd.Flags())
+ addInjectionFlags(cmd.Flags(), false)
cmd.Flags().Bool(string(flagEscape), false, "use HTML escaping")
cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "export this expression only")
- cmd.Flags().StringArrayP(string(flagInject), "t", nil,
- "set the value of a tagged field")
return cmd
}
diff --git a/cmd/cue/cmd/flags.go b/cmd/cue/cmd/flags.go
index edfa8dd..a9edfe4 100644
--- a/cmd/cue/cmd/flags.go
+++ b/cmd/cue/cmd/flags.go
@@ -87,6 +87,11 @@
f.Bool(string(flagMerge), true, "merge non-CUE files")
}
+func addInjectionFlags(f *pflag.FlagSet, auto bool) {
+ f.StringArrayP(string(flagInject), "t", nil,
+ "set the value of a tagged field")
+}
+
type flagName string
func (f flagName) Bool(cmd *Command) bool {
diff --git a/cmd/cue/cmd/root.go b/cmd/cue/cmd/root.go
index de4c8f6..c0c3dbd 100644
--- a/cmd/cue/cmd/root.go
+++ b/cmd/cue/cmd/root.go
@@ -257,10 +257,6 @@
return nil, err
}
- tags, err := cmd.cmd.Flags().GetStringArray(string(flagInject))
- if err != nil {
- return nil, err
- }
args = cmd.cmd.Flags().Args()
rootCmd.SetArgs(args)
@@ -272,7 +268,7 @@
return cmd, nil // Forces unknown command message from Cobra.
}
- tools, err := buildTools(cmd, tags, args[1:])
+ tools, err := buildTools(cmd, args[1:])
if err != nil {
return cmd, err
}
@@ -295,7 +291,6 @@
}
func addSubcommands(cmd *Command, sub map[string]*subSpec, args []string, isHelp bool) error {
- var tags []string
if len(args) > 0 {
if _, ok := sub[args[0]]; ok {
oldargs := []string{args[0]}
@@ -313,10 +308,6 @@
if err != nil {
return err
}
- tags, err = cmd.cmd.Flags().GetStringArray(string(flagInject))
- if err != nil {
- return err
- }
args = cmd.cmd.Flags().Args()
cmd.root.SetArgs(append(oldargs, args...))
}
@@ -330,7 +321,7 @@
args = args[1:]
}
- tools, err := buildTools(cmd, tags, args)
+ tools, err := buildTools(cmd, args)
if err != nil {
return err
}
diff --git a/cmd/cue/cmd/vet.go b/cmd/cue/cmd/vet.go
index 61baf28..e2e1280 100644
--- a/cmd/cue/cmd/vet.go
+++ b/cmd/cue/cmd/vet.go
@@ -70,13 +70,11 @@
}
addOrphanFlags(cmd.Flags())
+ addInjectionFlags(cmd.Flags(), false)
cmd.Flags().BoolP(string(flagConcrete), "c", false,
"require the evaluation to be concrete")
- cmd.Flags().StringArrayP(string(flagInject), "t", nil,
- "set the value of a tagged field")
-
return cmd
}