mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 01:05:26 +01:00 
			
		
		
		
	 0e54bae0c4
			
		
	
	0e54bae0c4
	
	
	
		
			
			I tested this somewhat, but I haven't been using the cli before so I'm not sure if there are changes - there shouldn't be though. Reviewed-on: https://gitea.com/gitea/tea/pulls/760 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: TheFox0x7 <thefox0x7@gmail.com> Co-committed-by: TheFox0x7 <thefox0x7@gmail.com>
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2021 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package flags
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	"code.gitea.io/tea/modules/utils"
 | |
| 	"github.com/urfave/cli/v3"
 | |
| )
 | |
| 
 | |
| // CsvFlag is a wrapper around cli.StringFlag, with an added GetValues() method
 | |
| // to retrieve comma separated string values as a slice.
 | |
| type CsvFlag struct {
 | |
| 	cli.StringFlag
 | |
| 	AvailableFields []string
 | |
| }
 | |
| 
 | |
| // NewCsvFlag creates a CsvFlag, while setting its usage string and default values
 | |
| func NewCsvFlag(name, usage string, aliases, availableValues, defaults []string) *CsvFlag {
 | |
| 	var availableDesc string
 | |
| 	if len(availableValues) != 0 {
 | |
| 		availableDesc = " Available values:"
 | |
| 	}
 | |
| 	return &CsvFlag{
 | |
| 		AvailableFields: availableValues,
 | |
| 		StringFlag: cli.StringFlag{
 | |
| 			Name:    name,
 | |
| 			Aliases: aliases,
 | |
| 			Value:   strings.Join(defaults, ","),
 | |
| 			Usage: fmt.Sprintf(`Comma-separated list of %s.%s
 | |
| 			%s
 | |
| 		`, usage, availableDesc, strings.Join(availableValues, ",")),
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // GetValues returns the value of the flag, parsed as a commaseparated list
 | |
| func (f CsvFlag) GetValues(cmd *cli.Command) ([]string, error) {
 | |
| 	val := cmd.String(f.Name)
 | |
| 	selection := strings.Split(val, ",")
 | |
| 	if f.AvailableFields != nil && val != "" {
 | |
| 		for _, field := range selection {
 | |
| 			if !utils.Contains(f.AvailableFields, field) {
 | |
| 				return nil, fmt.Errorf("Invalid field '%s'", field)
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	return selection, nil
 | |
| }
 |