ref(cmd): Use method to list formats

This isolates the listing of the different formats to the output.go
file.  It is more future-proof if another format is added.

Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
pull/6641/head
Marc Khouzam 5 years ago
parent 0141f9c806
commit 7fd384c8fb

@ -18,6 +18,7 @@ package main
import ( import (
"fmt" "fmt"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -51,7 +52,14 @@ func addChartPathOptionsFlags(f *pflag.FlagSet, c *action.ChartPathOptions) {
// bindOutputFlag will add the output flag to the given command and bind the // bindOutputFlag will add the output flag to the given command and bind the
// value to the given format pointer // value to the given format pointer
func bindOutputFlag(cmd *cobra.Command, varRef *output.Format) { func bindOutputFlag(cmd *cobra.Command, varRef *output.Format) {
cmd.Flags().VarP(newOutputValue(output.Table, varRef), outputFlag, "o", fmt.Sprintf("prints the output in the specified format. Allowed values: %s, %s, %s", output.Table, output.JSON, output.YAML)) var formats strings.Builder
for index, format := range output.Formats() {
if index != 0 {
formats.WriteString(", ")
}
formats.WriteString(format.String())
}
cmd.Flags().VarP(newOutputValue(output.Table, varRef), outputFlag, "o", fmt.Sprintf("prints the output in the specified format. Allowed values: %s", formats.String()))
// Setup shell completion for the flag // Setup shell completion for the flag
cmd.MarkFlagCustom(outputFlag, "__helm_output_options") cmd.MarkFlagCustom(outputFlag, "__helm_output_options")
} }

@ -17,13 +17,16 @@ limitations under the License.
package main // import "helm.sh/helm/v3/cmd/helm" package main // import "helm.sh/helm/v3/cmd/helm"
import ( import (
"fmt"
"io" "io"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"helm.sh/helm/v3/cmd/helm/require" "helm.sh/helm/v3/cmd/helm/require"
"helm.sh/helm/v3/internal/experimental/registry" "helm.sh/helm/v3/internal/experimental/registry"
"helm.sh/helm/v3/pkg/action" "helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/cli/output"
) )
const ( const (
@ -92,7 +95,7 @@ __helm_get_namespaces()
__helm_output_options() __helm_output_options()
{ {
__helm_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" __helm_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
COMPREPLY+=( $( compgen -W "table json yaml" -- "$cur" ) ) COMPREPLY+=( $( compgen -W "%[1]s" -- "$cur" ) )
} }
__helm_binary_name() __helm_binary_name()
@ -203,13 +206,19 @@ By default, the default directories depend on the Operating System. The defaults
` `
func newRootCmd(actionConfig *action.Configuration, out io.Writer, args []string) *cobra.Command { func newRootCmd(actionConfig *action.Configuration, out io.Writer, args []string) *cobra.Command {
var formats strings.Builder
for _, format := range output.Formats() {
formats.WriteString(format.String())
formats.WriteByte(' ')
}
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "helm", Use: "helm",
Short: "The Helm package manager for Kubernetes.", Short: "The Helm package manager for Kubernetes.",
Long: globalUsage, Long: globalUsage,
SilenceUsage: true, SilenceUsage: true,
Args: require.NoArgs, Args: require.NoArgs,
BashCompletionFunction: bashCompletionFunc, BashCompletionFunction: fmt.Sprintf(bashCompletionFunc, formats.String()),
} }
flags := cmd.PersistentFlags() flags := cmd.PersistentFlags()

@ -35,6 +35,11 @@ const (
YAML Format = "yaml" YAML Format = "yaml"
) )
// Formats returns a list of supported formats
func Formats() []Format {
return []Format{Table, JSON, YAML}
}
// ErrInvalidFormatType is returned when an unsupported format type is used // ErrInvalidFormatType is returned when an unsupported format type is used
var ErrInvalidFormatType = fmt.Errorf("invalid format type") var ErrInvalidFormatType = fmt.Errorf("invalid format type")

Loading…
Cancel
Save