mirror of
https://gitea.com/gitea/tea.git
synced 2024-11-25 12:01:36 +01:00
Add subcomand 'pulls create' (#144)
wordings print pull URL change title required mesage inform User on push error fix body 🚀 finish impruve fix help menue of pull create refactor Add pull-request command Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Sandro Santilli <strk@kbt.io> Reviewed-on: https://gitea.com/gitea/tea/pulls/144 Reviewed-by: Lunny Xiao <xiaolunwen@gmail.com> Reviewed-by: lafriks <lafriks@noreply.gitea.io>
This commit is contained in:
parent
66947bcf09
commit
f1801f39a6
106
cmd/pulls.go
106
cmd/pulls.go
@ -35,6 +35,7 @@ var CmdPulls = cli.Command{
|
|||||||
Subcommands: []*cli.Command{
|
Subcommands: []*cli.Command{
|
||||||
&CmdPullsCheckout,
|
&CmdPullsCheckout,
|
||||||
&CmdPullsClean,
|
&CmdPullsClean,
|
||||||
|
&CmdPullsCreate,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,6 +265,111 @@ call me again with the --ignore-sha flag`, pr.Head.Ref)
|
|||||||
return r.TeaDeleteBranch(branch, pr.Head.Ref, auth)
|
return r.TeaDeleteBranch(branch, pr.Head.Ref, auth)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CmdPullsCreate creates a pull request
|
||||||
|
var CmdPullsCreate = cli.Command{
|
||||||
|
Name: "create",
|
||||||
|
Usage: "Create a pull-request",
|
||||||
|
Description: "Create a pull-request",
|
||||||
|
Action: runPullsCreate,
|
||||||
|
Flags: append([]cli.Flag{
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "head",
|
||||||
|
Usage: "Set head branch (default is current one)",
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "base",
|
||||||
|
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",
|
||||||
|
},
|
||||||
|
}, AllDefaultFlags...),
|
||||||
|
}
|
||||||
|
|
||||||
|
func runPullsCreate(ctx *cli.Context) error {
|
||||||
|
login, ownerArg, repoArg := initCommand()
|
||||||
|
client := login.Client()
|
||||||
|
|
||||||
|
repo, err := login.Client().GetRepo(ownerArg, repoArg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// open local git repo
|
||||||
|
localRepo, err := local_git.RepoForWorkdir()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
base := ctx.String("base")
|
||||||
|
// default is default branch
|
||||||
|
if len(base) == 0 {
|
||||||
|
base = repo.DefaultBranch
|
||||||
|
}
|
||||||
|
|
||||||
|
head := ctx.String("head")
|
||||||
|
// default is current one
|
||||||
|
if len(head) == 0 {
|
||||||
|
head, err = localRepo.TeaGetCurrentBranchName()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
title := ctx.String("title")
|
||||||
|
// default is head branch name
|
||||||
|
if len(title) == 0 {
|
||||||
|
title = head
|
||||||
|
if strings.Contains(title, ":") {
|
||||||
|
title = strings.SplitN(title, ":", 2)[1]
|
||||||
|
}
|
||||||
|
title = strings.Replace(title, "-", " ", -1)
|
||||||
|
title = strings.Replace(title, "_", " ", -1)
|
||||||
|
title = strings.Title(strings.ToLower(title))
|
||||||
|
}
|
||||||
|
// title is required
|
||||||
|
if len(title) == 0 {
|
||||||
|
fmt.Printf("Title is required")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// push if possible
|
||||||
|
err = localRepo.Push(&git.PushOptions{})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error occurred during 'git push':\n%s\n", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
pr, err := client.CreatePullRequest(ownerArg, repoArg, gitea.CreatePullRequestOption{
|
||||||
|
Head: head,
|
||||||
|
Base: base,
|
||||||
|
Title: title,
|
||||||
|
Body: ctx.String("description"),
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("#%d %s\n%s created %s\n", pr.Index,
|
||||||
|
pr.Title,
|
||||||
|
pr.Poster.UserName,
|
||||||
|
pr.Created.Format("2006-01-02 15:04:05"),
|
||||||
|
)
|
||||||
|
if len(pr.Body) != 0 {
|
||||||
|
fmt.Printf("\n%s\n", pr.Body)
|
||||||
|
}
|
||||||
|
fmt.Println(pr.HTMLURL)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func argToIndex(arg string) (int64, error) {
|
func argToIndex(arg string) (int64, error) {
|
||||||
if strings.HasPrefix(arg, "#") {
|
if strings.HasPrefix(arg, "#") {
|
||||||
arg = arg[1:]
|
arg = arg[1:]
|
||||||
|
@ -175,3 +175,17 @@ func (r TeaRepo) TeaFindBranchByName(branchName, repoURL string) (b *git_config.
|
|||||||
}
|
}
|
||||||
return b, b.Validate()
|
return b, b.Validate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TeaGetCurrentBranchName return the name of the branch witch is currently active
|
||||||
|
func (r TeaRepo) TeaGetCurrentBranchName() (string, error) {
|
||||||
|
localHead, err := r.Head()
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !localHead.Name().IsBranch() {
|
||||||
|
return "", fmt.Errorf("active ref is no branch")
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.TrimLeft(localHead.Name().String(), "refs/heads/"), nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user