github.com/jfrog/jfrog-cli-core/v2@v2.51.0/plugins/common/utils.go (about) 1 package common 2 3 import ( 4 "sort" 5 "strconv" 6 "strings" 7 8 "github.com/jfrog/jfrog-cli-core/v2/common/cliutils" 9 "github.com/jfrog/jfrog-cli-core/v2/plugins/components" 10 "github.com/jfrog/jfrog-client-go/utils/log" 11 "golang.org/x/exp/slices" 12 ) 13 14 func GetStringsArrFlagValue(c *components.Context, flagName string) (resultArray []string) { 15 if c.IsFlagSet(flagName) { 16 resultArray = append(resultArray, strings.Split(c.GetStringFlagValue(flagName), ";")...) 17 } 18 return 19 } 20 21 // If `fieldName` exist in the cli args, read it to `field` as an array split by `;`. 22 func OverrideArrayIfSet(field *[]string, c *components.Context, fieldName string) { 23 if c.IsFlagSet(fieldName) { 24 *field = append([]string{}, strings.Split(c.GetStringFlagValue(fieldName), ";")...) 25 } 26 } 27 28 // If `fieldName` exist in the cli args, read it to `field` as a int. 29 func OverrideIntIfSet(field *int, c *components.Context, fieldName string) { 30 if c.IsFlagSet(fieldName) { 31 value, err := strconv.ParseInt(c.GetStringFlagValue(fieldName), 0, 64) 32 if err != nil { 33 return 34 } 35 *field = int(value) 36 } 37 } 38 39 // If `fieldName` exist in the cli args, read it to `field` as a string. 40 func OverrideStringIfSet(field *string, c *components.Context, fieldName string) { 41 if c.IsFlagSet(fieldName) { 42 *field = c.GetStringFlagValue(fieldName) 43 } 44 } 45 46 // Get a secret value from a flag or from stdin. 47 func HandleSecretInput(c *components.Context, stringFlag, stdinFlag string) (secret string, err error) { 48 return cliutils.HandleSecretInput(stringFlag, c.GetStringFlagValue(stringFlag), stdinFlag, c.GetBoolFlagValue(stdinFlag)) 49 } 50 51 func RunCmdWithDeprecationWarning(cmdName, oldSubcommand string, c *components.Context, 52 cmd func(c *components.Context) error) error { 53 cliutils.LogNonNativeCommandDeprecation(cmdName, oldSubcommand) 54 return cmd(c) 55 } 56 57 func GetThreadsCount(c *components.Context) (threads int, err error) { 58 return cliutils.GetThreadsCount(c.GetStringFlagValue("threads")) 59 } 60 61 func GetPrintCurrentCmdHelp(c *components.Context) func() error { 62 return func() error { 63 return c.PrintCommandHelp(c.CommandName) 64 } 65 } 66 67 // This function checks whether the command received --help as a single option. 68 // If it did, the command's help is shown and true is returned. 69 // This function should be used iff the SkipFlagParsing option is used. 70 func ShowCmdHelpIfNeeded(c *components.Context, args []string) (bool, error) { 71 return cliutils.ShowCmdHelpIfNeeded(args, GetPrintCurrentCmdHelp(c)) 72 } 73 74 func PrintHelpAndReturnError(msg string, context *components.Context) error { 75 return cliutils.PrintHelpAndReturnError(msg, GetPrintCurrentCmdHelp(context)) 76 } 77 78 func WrongNumberOfArgumentsHandler(context *components.Context) error { 79 return cliutils.WrongNumberOfArgumentsHandler(len(context.Arguments), GetPrintCurrentCmdHelp(context)) 80 } 81 82 func ExtractArguments(context *components.Context) []string { 83 return slices.Clone(context.Arguments) 84 } 85 86 // Return a sorted list of a command's flags by a given command key. 87 func GetCommandFlags(cmdKey string, commandToFlags map[string][]string, flagsMap map[string]components.Flag) []components.Flag { 88 flagList, ok := commandToFlags[cmdKey] 89 if !ok { 90 log.Error("The command \"", cmdKey, "\" is not found in commands flags map.") 91 return nil 92 } 93 return buildAndSortFlags(flagList, flagsMap) 94 } 95 96 func buildAndSortFlags(keys []string, flagsMap map[string]components.Flag) (flags []components.Flag) { 97 for _, flag := range keys { 98 flags = append(flags, flagsMap[flag]) 99 } 100 sort.Slice(flags, func(i, j int) bool { return flags[i].GetName() < flags[j].GetName() }) 101 return 102 }