This repository has been archived by the owner on Nov 22, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 163
/
mr_merge.go
75 lines (67 loc) · 2.38 KB
/
mr_merge.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package commands
import (
"fmt"
"strings"
"github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
"github.com/xanzy/go-gitlab"
"glab/internal/git"
"glab/internal/manip"
)
var mrMergeCmd = &cobra.Command{
Use: "merge <id> [flags]",
Short: `Merge/Accept merge requests`,
Long: ``,
Aliases: []string{"accept"},
Args: cobra.ExactArgs(1),
Run: acceptMergeRequest,
}
func acceptMergeRequest(cmd *cobra.Command, args []string) {
mergeID := strings.Trim(args[0], " ")
l := &gitlab.AcceptMergeRequestOptions{}
if m, _ := cmd.Flags().GetString("message"); m != "" {
l.MergeCommitMessage = gitlab.String(m)
}
if m, _ := cmd.Flags().GetString("squash-message"); m != "" {
l.SquashCommitMessage = gitlab.String(m)
}
if m, _ := cmd.Flags().GetBool("squash"); m {
l.Squash = gitlab.Bool(m)
}
if m, _ := cmd.Flags().GetBool("remove-source-branch"); m {
l.ShouldRemoveSourceBranch = gitlab.Bool(m)
}
if m, _ := cmd.Flags().GetBool("when-pipeline-succeeds"); m {
l.MergeWhenPipelineSucceeds = gitlab.Bool(m)
}
if m, _ := cmd.Flags().GetString("sha"); m != "" {
l.SHA = gitlab.String(m)
}
gitlabClient, repo := git.InitGitlabClient()
if r, _ := cmd.Flags().GetString("repo"); r != "" {
repo = r
}
mr, resp, _ := gitlabClient.MergeRequests.AcceptMergeRequest(repo, manip.StringToInt(mergeID), l)
fmt.Println(aurora.Yellow("Accepting Merge Request #" + mergeID + "..."))
if resp.StatusCode == 200 {
fmt.Println(aurora.Green("Merge Request accepted successfully"))
displayMergeRequest(mr)
} else if resp.StatusCode == 405 {
fmt.Println("Merge request cannot be merged")
} else if resp.StatusCode == 401 {
fmt.Println("You don't have enough permission to accept this merge request")
} else if resp.StatusCode == 406 {
fmt.Println("Branch cannot be merged. There are merge conflicts.")
} else {
fmt.Println(resp)
}
}
func init() {
mrMergeCmd.Flags().StringP("sha", "", "", "Merge Commit sha")
mrMergeCmd.Flags().BoolP("remove-source-branch", "d", false, "Remove source branch on merge")
mrMergeCmd.Flags().BoolP("when-pipeline-succeeds", "", true, "Merge only when pipeline succeeds. Default to true")
mrMergeCmd.Flags().StringP("message", "m", "", "Get only closed merge requests")
mrMergeCmd.Flags().StringP("squash-message", "", "", "Squash commit message")
mrMergeCmd.Flags().BoolP("squash", "s", false, "Squash commits on merge")
mrCmd.AddCommand(mrMergeCmd)
}