github.com/nkprince007/lab@v0.6.2-0.20171218071646-19d68b56f403/cmd/mrShow.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  	"strings"
     8  
     9  	"github.com/spf13/cobra"
    10  	"github.com/xanzy/go-gitlab"
    11  	"github.com/zaquestion/lab/internal/git"
    12  	lab "github.com/zaquestion/lab/internal/gitlab"
    13  )
    14  
    15  var mrShowCmd = &cobra.Command{
    16  	Use:        "show [remote]",
    17  	Aliases:    []string{"get"},
    18  	ArgAliases: []string{"s"},
    19  	Short:      "Describe a merge request",
    20  	Long:       ``,
    21  	Run: func(cmd *cobra.Command, args []string) {
    22  		remote, mrNum, err := parseArgsRemote(args)
    23  		if err != nil {
    24  			log.Fatal(err)
    25  		}
    26  		if remote == "" {
    27  			remote = forkedFromRemote
    28  		}
    29  		rn, err := git.PathWithNameSpace(remote)
    30  		if err != nil {
    31  			log.Fatal(err)
    32  		}
    33  
    34  		mr, err := lab.GetMR(rn, int(mrNum))
    35  		if err != nil {
    36  			log.Fatal(err)
    37  		}
    38  
    39  		printMR(mr, rn)
    40  	},
    41  }
    42  
    43  func printMR(mr *gitlab.MergeRequest, project string) {
    44  	assignee := "None"
    45  	milestone := "None"
    46  	labels := "None"
    47  	state := map[string]string{
    48  		"opened": "Open",
    49  		"closed": "Closed",
    50  		"merged": "Merged",
    51  	}[mr.State]
    52  	if mr.Assignee.Username != "" {
    53  		assignee = mr.Assignee.Username
    54  	}
    55  	if mr.Milestone != nil {
    56  		milestone = mr.Milestone.Title
    57  	}
    58  	if len(mr.Labels) > 0 {
    59  		labels = strings.Join(mr.Labels, ", ")
    60  	}
    61  
    62  	fmt.Printf(`
    63  #%d %s
    64  ===================================
    65  %s
    66  -----------------------------------
    67  Project: %s
    68  Branches: %s->%s
    69  Status: %s
    70  Work in Progress: %s
    71  Assignee: %s
    72  Author: %s
    73  Milestone: %s
    74  Labels: %s
    75  WebURL: %s
    76  `,
    77  		mr.IID, mr.Title, mr.Description, project, mr.SourceBranch,
    78  		mr.TargetBranch, state, strconv.FormatBool(mr.WorkInProgress), assignee,
    79  		mr.Author.Username, milestone, labels, mr.WebURL)
    80  }
    81  
    82  func init() {
    83  	mrCmd.AddCommand(mrShowCmd)
    84  }