github.com/ianfoo/lab@v0.9.5-0.20180123060006-5ed79f2ccfc7/cmd/mrCheckout.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/spf13/cobra" 8 "github.com/xanzy/go-gitlab" 9 "github.com/zaquestion/lab/internal/git" 10 lab "github.com/zaquestion/lab/internal/gitlab" 11 ) 12 13 var ( 14 branch string 15 ) 16 17 // listCmd represents the list command 18 var checkoutCmd = &cobra.Command{ 19 Use: "checkout", 20 Short: "Checkout an open merge request", 21 Long: ``, 22 Args: cobra.ExactArgs(1), 23 Run: func(cmd *cobra.Command, args []string) { 24 rn, mrID, err := parseArgs(args) 25 if err != nil { 26 log.Fatal(err) 27 } 28 29 mrs, err := lab.MRList(rn, &gitlab.ListProjectMergeRequestsOptions{ 30 IIDs: []int{int(mrID)}, 31 }) 32 if err != nil { 33 log.Fatal(err) 34 } 35 if len(mrs) < 1 { 36 fmt.Printf("MR #%d not found\n", mrID) 37 return 38 } 39 // https://docs.gitlab.com/ee/user/project/merge_requests/#checkout-merge-requests-locally 40 if branch == "" { 41 branch = mrs[0].SourceBranch 42 } 43 mr := fmt.Sprintf("refs/merge-requests/%d/head", mrID) 44 gitf := git.New("fetch", forkedFromRemote, fmt.Sprintf("%s:%s", mr, branch)) 45 err = gitf.Run() 46 if err != nil { 47 log.Fatal(err) 48 } 49 50 gitc := git.New("checkout", branch) 51 err = gitc.Run() 52 if err != nil { 53 log.Fatal(err) 54 } 55 }, 56 } 57 58 func init() { 59 checkoutCmd.Flags().StringVarP(&branch, "branch", "b", "", "checkout merge request with <branch> name") 60 mrCmd.AddCommand(checkoutCmd) 61 }