mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 01:05:26 +01:00 
			
		
		
		
	Add more issue / pr creation params (#331)
adds assignees, labels, deadline, milestone params - [x] add flags to `tea issue create` (this is BREAKING, `-b` moved to `-d` for consistency with pr create) - [x] add interactive mode to `tea issue create` - [x] add flags to `tea pr create` - [x] add interactive mode to `tea pr create` fixes #171, fixes #303 Co-authored-by: Norwin Roosen <git@nroo.de> Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/331 Reviewed-by: 6543 <6543@obermui.de> Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-committed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
		| @@ -8,8 +8,12 @@ import ( | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
|  | ||||
| 	"code.gitea.io/sdk/gitea" | ||||
| 	"code.gitea.io/tea/modules/context" | ||||
| 	"code.gitea.io/tea/modules/task" | ||||
| 	"code.gitea.io/tea/modules/utils" | ||||
|  | ||||
| 	"github.com/araddon/dateparse" | ||||
| 	"github.com/urfave/cli/v2" | ||||
| ) | ||||
|  | ||||
| @@ -97,6 +101,82 @@ var IssuePRFlags = append([]cli.Flag{ | ||||
| 	&PaginationLimitFlag, | ||||
| }, AllDefaultFlags...) | ||||
|  | ||||
| // IssuePREditFlags defines flags for properties of issues and PRs | ||||
| var IssuePREditFlags = append([]cli.Flag{ | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "title", | ||||
| 		Aliases: []string{"t"}, | ||||
| 	}, | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "description", | ||||
| 		Aliases: []string{"d"}, | ||||
| 	}, | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "assignees", | ||||
| 		Aliases: []string{"a"}, | ||||
| 		Usage:   "Comma-separated list of usernames to assign", | ||||
| 	}, | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "labels", | ||||
| 		Aliases: []string{"L"}, | ||||
| 		Usage:   "Comma-separated list of labels to assign", | ||||
| 	}, | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "deadline", | ||||
| 		Aliases: []string{"D"}, | ||||
| 		Usage:   "Deadline timestamp to assign", | ||||
| 	}, | ||||
| 	&cli.StringFlag{ | ||||
| 		Name:    "milestone", | ||||
| 		Aliases: []string{"m"}, | ||||
| 		Usage:   "Milestone to assign", | ||||
| 	}, | ||||
| }, LoginRepoFlags...) | ||||
|  | ||||
| // GetIssuePREditFlags parses all IssuePREditFlags | ||||
| func GetIssuePREditFlags(ctx *context.TeaContext) (*gitea.CreateIssueOption, error) { | ||||
| 	opts := gitea.CreateIssueOption{ | ||||
| 		Title:     ctx.String("title"), | ||||
| 		Body:      ctx.String("body"), | ||||
| 		Assignees: strings.Split(ctx.String("assignees"), ","), | ||||
| 	} | ||||
| 	var err error | ||||
|  | ||||
| 	date := ctx.String("deadline") | ||||
| 	if date != "" { | ||||
| 		t, err := dateparse.ParseAny(date) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		opts.Deadline = &t | ||||
| 	} | ||||
|  | ||||
| 	client := ctx.Login.Client() | ||||
|  | ||||
| 	labelNames := strings.Split(ctx.String("labels"), ",") | ||||
| 	if len(labelNames) != 0 { | ||||
| 		if client == nil { | ||||
| 			client = ctx.Login.Client() | ||||
| 		} | ||||
| 		if opts.Labels, err = task.ResolveLabelNames(client, ctx.Owner, ctx.Repo, labelNames); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if milestoneName := ctx.String("milestone"); len(milestoneName) != 0 { | ||||
| 		if client == nil { | ||||
| 			client = ctx.Login.Client() | ||||
| 		} | ||||
| 		ms, _, err := client.GetMilestoneByName(ctx.Owner, ctx.Repo, milestoneName) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("Milestone '%s' not found", milestoneName) | ||||
| 		} | ||||
| 		opts.Milestone = ms.ID | ||||
| 	} | ||||
|  | ||||
| 	return &opts, nil | ||||
| } | ||||
|  | ||||
| // FieldsFlag generates a flag selecting printable fields. | ||||
| // To retrieve the value, use GetFields() | ||||
| func FieldsFlag(availableFields, defaultFields []string) *cli.StringFlag { | ||||
|   | ||||
| @@ -20,18 +20,7 @@ var CmdIssuesCreate = cli.Command{ | ||||
| 	Usage:       "Create an issue on repository", | ||||
| 	Description: `Create an issue on repository`, | ||||
| 	Action:      runIssuesCreate, | ||||
| 	Flags: append([]cli.Flag{ | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "title", | ||||
| 			Aliases: []string{"t"}, | ||||
| 			Usage:   "issue title to create", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "body", | ||||
| 			Aliases: []string{"b"}, | ||||
| 			Usage:   "issue body to create", | ||||
| 		}, | ||||
| 	}, flags.LoginRepoFlags...), | ||||
| 	Flags:       flags.IssuePREditFlags, | ||||
| } | ||||
|  | ||||
| func runIssuesCreate(cmd *cli.Context) error { | ||||
| @@ -42,11 +31,15 @@ func runIssuesCreate(cmd *cli.Context) error { | ||||
| 		return interact.CreateIssue(ctx.Login, ctx.Owner, ctx.Repo) | ||||
| 	} | ||||
|  | ||||
| 	opts, err := flags.GetIssuePREditFlags(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return task.CreateIssue( | ||||
| 		ctx.Login, | ||||
| 		ctx.Owner, | ||||
| 		ctx.Repo, | ||||
| 		ctx.String("title"), | ||||
| 		ctx.String("body"), | ||||
| 		*opts, | ||||
| 	) | ||||
| } | ||||
|   | ||||
| @@ -30,17 +30,7 @@ var CmdPullsCreate = cli.Command{ | ||||
| 			Aliases: []string{"b"}, | ||||
| 			Usage:   "Set base branch (default is default branch)", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "title", | ||||
| 			Aliases: []string{"t"}, | ||||
| 			Usage:   "Set title of pull (default is head branch name)", | ||||
| 		}, | ||||
| 		&cli.StringFlag{ | ||||
| 			Name:    "description", | ||||
| 			Aliases: []string{"d"}, | ||||
| 			Usage:   "Set body of new pull", | ||||
| 		}, | ||||
| 	}, flags.AllDefaultFlags...), | ||||
| 	}, flags.IssuePREditFlags...), | ||||
| } | ||||
|  | ||||
| func runPullsCreate(cmd *cli.Context) error { | ||||
| @@ -53,13 +43,17 @@ func runPullsCreate(cmd *cli.Context) error { | ||||
| 	} | ||||
|  | ||||
| 	// else use args to create PR | ||||
| 	opts, err := flags.GetIssuePREditFlags(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	return task.CreatePull( | ||||
| 		ctx.Login, | ||||
| 		ctx.Owner, | ||||
| 		ctx.Repo, | ||||
| 		ctx.String("base"), | ||||
| 		ctx.String("head"), | ||||
| 		ctx.String("title"), | ||||
| 		ctx.String("description"), | ||||
| 		opts, | ||||
| 	) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Norwin
					Norwin