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  }