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",
Long: usage,
//SilenceUsage: true,
PreRunE: wrapper.Wrapper(
PersistentPreRunE: wrapper.Wrapper(
func(input cli.Input) error {
console.Verbosity = input.Int(flagkey.Verbosity)
return nil
@@ -53,7 +53,7 @@ func App() *cobra.Command {
})
wrapper.SetFlags(rootCmd, flag.FlagSet{
Optional: []flag.Flag{flag.GlobalServer, flag.GlobalVerbosity},
Global: []flag.Flag{flag.GlobalServer, flag.GlobalVerbosity},
})
groups := helptemplate.CommandGroups{}
@@ -64,7 +64,9 @@ func App() *cobra.Command {
groups = append(groups, helptemplate.CreateCmdGroup("Other Commands", support.Commands(), version.Commands()))
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
}
@@ -53,6 +53,14 @@ func Wrapper(action cmd.CommandAction) func(*cobra.Command, []string) error {
func SetFlags(cmd *cobra.Command, flagSet flag.FlagSet) {
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
for _, f := range flagSet.Required {
requiredFlags(cmd, f)
@@ -84,7 +92,7 @@ func SetFlags(cmd *cobra.Command, flagSet flag.FlagSet) {
func optionalFlags(cmd *cobra.Command, flags ...flag.Flag) {
for _, f := range flags {
toCobraFlag(cmd, f)
toCobraFlag(cmd, f, false)
if f.Deprecated {
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)
@@ -96,12 +104,18 @@ func optionalFlags(cmd *cobra.Command, flags ...flag.Flag) {
func requiredFlags(cmd *cobra.Command, flags ...flag.Flag) {
for _, f := range flags {
toCobraFlag(cmd, f)
toCobraFlag(cmd, f, false)
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.
if len(f.Aliases) > 0 {
var aliases []string
@@ -119,67 +133,72 @@ func toCobraFlag(cmd *cobra.Command, f flag.Flag) {
helptemplate.AliasSeparator, f.Usage)
}
flagset := cmd.Flags()
if global {
flagset = cmd.PersistentFlags()
}
switch f.Type {
case flag.Bool:
val, ok := f.DefaultValue.(bool)
if !ok {
val = false
}
cmd.Flags().BoolP(f.Name, f.Short, val, f.Usage)
flagset.BoolP(f.Name, f.Short, val, f.Usage)
case flag.String:
val, ok := f.DefaultValue.(string)
if !ok {
val = ""
}
cmd.Flags().StringP(f.Name, f.Short, val, f.Usage)
flagset.StringP(f.Name, f.Short, val, f.Usage)
case flag.StringSlice:
val, ok := f.DefaultValue.([]string)
if !ok {
val = []string{}
}
cmd.Flags().StringArrayP(f.Name, f.Short, val, f.Usage)
flagset.StringArrayP(f.Name, f.Short, val, f.Usage)
case flag.Int:
val, ok := f.DefaultValue.(int)
if !ok {
val = 0
}
cmd.Flags().IntP(f.Name, f.Short, val, f.Usage)
flagset.IntP(f.Name, f.Short, val, f.Usage)
case flag.IntSlice:
val, ok := f.DefaultValue.([]int)
if !ok {
val = []int{}
}
cmd.Flags().IntSliceP(f.Name, f.Short, val, f.Usage)
flagset.IntSliceP(f.Name, f.Short, val, f.Usage)
case flag.Int64:
val, ok := f.DefaultValue.(int64)
if !ok {
val = 0
}
cmd.Flags().Int64P(f.Name, f.Short, val, f.Usage)
flagset.Int64P(f.Name, f.Short, val, f.Usage)
case flag.Int64Slice:
val, ok := f.DefaultValue.([]int64)
if !ok {
val = []int64{}
}
cmd.Flags().Int64SliceP(f.Name, f.Short, val, f.Usage)
flagset.Int64SliceP(f.Name, f.Short, val, f.Usage)
case flag.Float32:
val, ok := f.DefaultValue.(float32)
if !ok {
val = 0
}
cmd.Flags().Float32P(f.Name, f.Short, val, f.Usage)
flagset.Float32P(f.Name, f.Short, val, f.Usage)
case flag.Float64:
val, ok := f.DefaultValue.(float64)
if !ok {
val = 0
}
cmd.Flags().Float64P(f.Name, f.Short, val, f.Usage)
flagset.Float64P(f.Name, f.Short, val, f.Usage)
case flag.Duration:
val, ok := f.DefaultValue.(time.Duration)
if !ok {
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}}`
// 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}}
{{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/fission-cli/cliwrapper/cli"
"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"
"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
} else {
console.Verbose(2, "Env FISSION_ROUTER: %v", routerURL)
routerURL = strings.TrimPrefix(routerURL, "http://")
}
@@ -77,6 +79,9 @@ func (opts *TestSubCommand) do(input cli.Input) error {
if err != nil {
return err
}
console.Verbose(2, "Function test url: %v", functionUrl.String())
queryParams := input.StringSlice(flagkey.FnTestQuery)
if len(queryParams) > 0 {
query := url.Values{}
+1
View File
@@ -31,6 +31,7 @@ type (
FlagType = int
FlagSet struct {
Global []Flag
Required []Flag
Optional []Flag
}