Fix verbosity flag not show in usage (#1425)

This commit is contained in:
Ta-Ching Chen
2019-11-21 12:36:50 +08:00
committed by GitHub
parent 30d24a85b5
commit af10579be9
5 changed files with 44 additions and 17 deletions
+5 -3
View File
@@ -37,7 +37,7 @@ func App() *cobra.Command {
Use: "fission", Use: "fission",
Long: usage, Long: usage,
//SilenceUsage: true, //SilenceUsage: true,
PreRunE: wrapper.Wrapper( PersistentPreRunE: wrapper.Wrapper(
func(input cli.Input) error { func(input cli.Input) error {
console.Verbosity = input.Int(flagkey.Verbosity) console.Verbosity = input.Int(flagkey.Verbosity)
return nil return nil
@@ -53,7 +53,7 @@ func App() *cobra.Command {
}) })
wrapper.SetFlags(rootCmd, flag.FlagSet{ wrapper.SetFlags(rootCmd, flag.FlagSet{
Optional: []flag.Flag{flag.GlobalServer, flag.GlobalVerbosity}, Global: []flag.Flag{flag.GlobalServer, flag.GlobalVerbosity},
}) })
groups := helptemplate.CommandGroups{} groups := helptemplate.CommandGroups{}
@@ -64,7 +64,9 @@ func App() *cobra.Command {
groups = append(groups, helptemplate.CreateCmdGroup("Other Commands", support.Commands(), version.Commands())) groups = append(groups, helptemplate.CreateCmdGroup("Other Commands", support.Commands(), version.Commands()))
groups.Add(rootCmd) groups.Add(rootCmd)
helptemplate.ActsAsRootCommand(rootCmd, nil, groups...) flagExposer := helptemplate.ActsAsRootCommand(rootCmd, nil, groups...)
// show global options in usage
flagExposer.ExposeFlags(rootCmd, flagkey.Server, flagkey.Verbosity)
return rootCmd return rootCmd
} }
@@ -53,6 +53,14 @@ func Wrapper(action cmd.CommandAction) func(*cobra.Command, []string) error {
func SetFlags(cmd *cobra.Command, flagSet flag.FlagSet) { func SetFlags(cmd *cobra.Command, flagSet flag.FlagSet) {
aliases := make(map[string]string) aliases := make(map[string]string)
// set global flags
for _, f := range flagSet.Global {
globalFlags(cmd, f)
for _, alias := range f.Aliases {
aliases[alias] = f.Name
}
}
// set required flags // set required flags
for _, f := range flagSet.Required { for _, f := range flagSet.Required {
requiredFlags(cmd, f) requiredFlags(cmd, f)
@@ -84,7 +92,7 @@ func SetFlags(cmd *cobra.Command, flagSet flag.FlagSet) {
func optionalFlags(cmd *cobra.Command, flags ...flag.Flag) { func optionalFlags(cmd *cobra.Command, flags ...flag.Flag) {
for _, f := range flags { for _, f := range flags {
toCobraFlag(cmd, f) toCobraFlag(cmd, f, false)
if f.Deprecated { if f.Deprecated {
usage := fmt.Sprintf("Use --%v instead. The flag still works for now and will be removed in future", f.Substitute) usage := fmt.Sprintf("Use --%v instead. The flag still works for now and will be removed in future", f.Substitute)
cmd.Flags().MarkDeprecated(f.Name, usage) cmd.Flags().MarkDeprecated(f.Name, usage)
@@ -96,12 +104,18 @@ func optionalFlags(cmd *cobra.Command, flags ...flag.Flag) {
func requiredFlags(cmd *cobra.Command, flags ...flag.Flag) { func requiredFlags(cmd *cobra.Command, flags ...flag.Flag) {
for _, f := range flags { for _, f := range flags {
toCobraFlag(cmd, f) toCobraFlag(cmd, f, false)
cmd.MarkFlagRequired(f.Name) cmd.MarkFlagRequired(f.Name)
} }
} }
func toCobraFlag(cmd *cobra.Command, f flag.Flag) { func globalFlags(cmd *cobra.Command, flags ...flag.Flag) {
for _, f := range flags {
toCobraFlag(cmd, f, true)
}
}
func toCobraFlag(cmd *cobra.Command, f flag.Flag, global bool) {
// Workaround to pass aliases to templater for generating flag aliases. // Workaround to pass aliases to templater for generating flag aliases.
if len(f.Aliases) > 0 { if len(f.Aliases) > 0 {
var aliases []string var aliases []string
@@ -119,67 +133,72 @@ func toCobraFlag(cmd *cobra.Command, f flag.Flag) {
helptemplate.AliasSeparator, f.Usage) helptemplate.AliasSeparator, f.Usage)
} }
flagset := cmd.Flags()
if global {
flagset = cmd.PersistentFlags()
}
switch f.Type { switch f.Type {
case flag.Bool: case flag.Bool:
val, ok := f.DefaultValue.(bool) val, ok := f.DefaultValue.(bool)
if !ok { if !ok {
val = false val = false
} }
cmd.Flags().BoolP(f.Name, f.Short, val, f.Usage) flagset.BoolP(f.Name, f.Short, val, f.Usage)
case flag.String: case flag.String:
val, ok := f.DefaultValue.(string) val, ok := f.DefaultValue.(string)
if !ok { if !ok {
val = "" val = ""
} }
cmd.Flags().StringP(f.Name, f.Short, val, f.Usage) flagset.StringP(f.Name, f.Short, val, f.Usage)
case flag.StringSlice: case flag.StringSlice:
val, ok := f.DefaultValue.([]string) val, ok := f.DefaultValue.([]string)
if !ok { if !ok {
val = []string{} val = []string{}
} }
cmd.Flags().StringArrayP(f.Name, f.Short, val, f.Usage) flagset.StringArrayP(f.Name, f.Short, val, f.Usage)
case flag.Int: case flag.Int:
val, ok := f.DefaultValue.(int) val, ok := f.DefaultValue.(int)
if !ok { if !ok {
val = 0 val = 0
} }
cmd.Flags().IntP(f.Name, f.Short, val, f.Usage) flagset.IntP(f.Name, f.Short, val, f.Usage)
case flag.IntSlice: case flag.IntSlice:
val, ok := f.DefaultValue.([]int) val, ok := f.DefaultValue.([]int)
if !ok { if !ok {
val = []int{} val = []int{}
} }
cmd.Flags().IntSliceP(f.Name, f.Short, val, f.Usage) flagset.IntSliceP(f.Name, f.Short, val, f.Usage)
case flag.Int64: case flag.Int64:
val, ok := f.DefaultValue.(int64) val, ok := f.DefaultValue.(int64)
if !ok { if !ok {
val = 0 val = 0
} }
cmd.Flags().Int64P(f.Name, f.Short, val, f.Usage) flagset.Int64P(f.Name, f.Short, val, f.Usage)
case flag.Int64Slice: case flag.Int64Slice:
val, ok := f.DefaultValue.([]int64) val, ok := f.DefaultValue.([]int64)
if !ok { if !ok {
val = []int64{} val = []int64{}
} }
cmd.Flags().Int64SliceP(f.Name, f.Short, val, f.Usage) flagset.Int64SliceP(f.Name, f.Short, val, f.Usage)
case flag.Float32: case flag.Float32:
val, ok := f.DefaultValue.(float32) val, ok := f.DefaultValue.(float32)
if !ok { if !ok {
val = 0 val = 0
} }
cmd.Flags().Float32P(f.Name, f.Short, val, f.Usage) flagset.Float32P(f.Name, f.Short, val, f.Usage)
case flag.Float64: case flag.Float64:
val, ok := f.DefaultValue.(float64) val, ok := f.DefaultValue.(float64)
if !ok { if !ok {
val = 0 val = 0
} }
cmd.Flags().Float64P(f.Name, f.Short, val, f.Usage) flagset.Float64P(f.Name, f.Short, val, f.Usage)
case flag.Duration: case flag.Duration:
val, ok := f.DefaultValue.(time.Duration) val, ok := f.DefaultValue.(time.Duration)
if !ok { if !ok {
val = 0 val = 0
} }
cmd.Flags().DurationP(f.Name, f.Short, val, f.Usage) flagset.DurationP(f.Name, f.Short, val, f.Usage)
} }
} }
@@ -50,7 +50,7 @@ const (
{{end}}` {{end}}`
// SectionFlags is the help template section that displays the command's flags. // SectionFlags is the help template section that displays the command's flags.
SectionFlags = `{{ if or $visibleFlags.HasFlags $explicitlyExposedFlags.HasFlags}}Options: SectionFlags = `{{ if or $visibleFlags.HasFlags $explicitlyExposedFlags.HasFlags}}Options
{{ if $visibleFlags.HasFlags}}{{trimRight (flagsUsages $visibleFlags)}}{{end}}{{ if $explicitlyExposedFlags.HasFlags}}{{ if $visibleFlags.HasFlags}} {{ if $visibleFlags.HasFlags}}{{trimRight (flagsUsages $visibleFlags)}}{{end}}{{ if $explicitlyExposedFlags.HasFlags}}{{ if $visibleFlags.HasFlags}}
{{end}}{{trimRight (flagsUsages $explicitlyExposedFlags)}}{{end}} {{end}}{{trimRight (flagsUsages $explicitlyExposedFlags)}}{{end}}
+5
View File
@@ -31,6 +31,7 @@ import (
"github.com/fission/fission/pkg/controller/client" "github.com/fission/fission/pkg/controller/client"
"github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli"
"github.com/fission/fission/pkg/fission-cli/cmd/httptrigger" "github.com/fission/fission/pkg/fission-cli/cmd/httptrigger"
"github.com/fission/fission/pkg/fission-cli/console"
flagkey "github.com/fission/fission/pkg/fission-cli/flag/key" flagkey "github.com/fission/fission/pkg/fission-cli/flag/key"
"github.com/fission/fission/pkg/fission-cli/util" "github.com/fission/fission/pkg/fission-cli/util"
) )
@@ -65,6 +66,7 @@ func (opts *TestSubCommand) do(input cli.Input) error {
} }
routerURL = "127.0.0.1:" + localRouterPort routerURL = "127.0.0.1:" + localRouterPort
} else { } else {
console.Verbose(2, "Env FISSION_ROUTER: %v", routerURL)
routerURL = strings.TrimPrefix(routerURL, "http://") routerURL = strings.TrimPrefix(routerURL, "http://")
} }
@@ -77,6 +79,9 @@ func (opts *TestSubCommand) do(input cli.Input) error {
if err != nil { if err != nil {
return err return err
} }
console.Verbose(2, "Function test url: %v", functionUrl.String())
queryParams := input.StringSlice(flagkey.FnTestQuery) queryParams := input.StringSlice(flagkey.FnTestQuery)
if len(queryParams) > 0 { if len(queryParams) > 0 {
query := url.Values{} query := url.Values{}
+1
View File
@@ -31,6 +31,7 @@ type (
FlagType = int FlagType = int
FlagSet struct { FlagSet struct {
Global []Flag
Required []Flag Required []Flag
Optional []Flag Optional []Flag
} }