mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 09:15: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>
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2020 The Gitea Authors. All rights reserved.
 | |
| // SPDX-License-Identifier: MIT
 | |
| 
 | |
| package labels
 | |
| 
 | |
| import (
 | |
| 	"bufio"
 | |
| 	stdctx "context"
 | |
| 	"log"
 | |
| 	"os"
 | |
| 	"strings"
 | |
| 
 | |
| 	"code.gitea.io/tea/cmd/flags"
 | |
| 	"code.gitea.io/tea/modules/context"
 | |
| 
 | |
| 	"code.gitea.io/sdk/gitea"
 | |
| 	"github.com/urfave/cli/v3"
 | |
| )
 | |
| 
 | |
| // CmdLabelCreate represents a sub command of labels to create label.
 | |
| var CmdLabelCreate = cli.Command{
 | |
| 	Name:        "create",
 | |
| 	Aliases:     []string{"c"},
 | |
| 	Usage:       "Create a label",
 | |
| 	Description: `Create a label`,
 | |
| 	ArgsUsage:   " ", // command does not accept arguments
 | |
| 	Action:      runLabelCreate,
 | |
| 	Flags: append([]cli.Flag{
 | |
| 		&cli.StringFlag{
 | |
| 			Name:  "name",
 | |
| 			Usage: "label name",
 | |
| 		},
 | |
| 		&cli.StringFlag{
 | |
| 			Name:  "color",
 | |
| 			Usage: "label color value",
 | |
| 		},
 | |
| 		&cli.StringFlag{
 | |
| 			Name:  "description",
 | |
| 			Usage: "label description",
 | |
| 		},
 | |
| 		&cli.StringFlag{
 | |
| 			Name:  "file",
 | |
| 			Usage: "indicate a label file",
 | |
| 		},
 | |
| 	}, flags.AllDefaultFlags...),
 | |
| }
 | |
| 
 | |
| func runLabelCreate(_ stdctx.Context, cmd *cli.Command) error {
 | |
| 	ctx := context.InitCommand(cmd)
 | |
| 	ctx.Ensure(context.CtxRequirement{RemoteRepo: true})
 | |
| 
 | |
| 	labelFile := ctx.String("file")
 | |
| 	var err error
 | |
| 	if len(labelFile) == 0 {
 | |
| 		_, _, err = ctx.Login.Client().CreateLabel(ctx.Owner, ctx.Repo, gitea.CreateLabelOption{
 | |
| 			Name:        ctx.String("name"),
 | |
| 			Color:       ctx.String("color"),
 | |
| 			Description: ctx.String("description"),
 | |
| 		})
 | |
| 	} else {
 | |
| 		f, err := os.Open(labelFile)
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 		defer f.Close()
 | |
| 
 | |
| 		scanner := bufio.NewScanner(f)
 | |
| 		var i = 1
 | |
| 		for scanner.Scan() {
 | |
| 			line := scanner.Text()
 | |
| 			color, name, description := splitLabelLine(line)
 | |
| 			if color == "" || name == "" {
 | |
| 				log.Printf("Line %d ignored because lack of enough fields: %s\n", i, line)
 | |
| 			} else {
 | |
| 				_, _, err = ctx.Login.Client().CreateLabel(ctx.Owner, ctx.Repo, gitea.CreateLabelOption{
 | |
| 					Name:        name,
 | |
| 					Color:       color,
 | |
| 					Description: description,
 | |
| 				})
 | |
| 			}
 | |
| 
 | |
| 			i++
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| func splitLabelLine(line string) (string, string, string) {
 | |
| 	fields := strings.SplitN(line, ";", 2)
 | |
| 	var color, name, description string
 | |
| 	if len(fields) < 1 {
 | |
| 		return "", "", ""
 | |
| 	} else if len(fields) >= 2 {
 | |
| 		description = strings.TrimSpace(fields[1])
 | |
| 	}
 | |
| 	fields = strings.Fields(fields[0])
 | |
| 	if len(fields) <= 0 {
 | |
| 		return "", "", ""
 | |
| 	}
 | |
| 	color = fields[0]
 | |
| 	if len(fields) == 2 {
 | |
| 		name = fields[1]
 | |
| 	} else if len(fields) > 2 {
 | |
| 		name = strings.Join(fields[1:], " ")
 | |
| 	}
 | |
| 	return color, name, description
 | |
| }
 |