gitlab.com/lab-cli/lab@v0.14.0/cmd/issue_show.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strings"
     7  	"time"
     8  
     9  	"github.com/spf13/cobra"
    10  	"github.com/xanzy/go-gitlab"
    11  	lab "github.com/zaquestion/lab/internal/gitlab"
    12  )
    13  
    14  var issueShowCmd = &cobra.Command{
    15  	Use:        "show [remote] <id>",
    16  	Aliases:    []string{"get"},
    17  	ArgAliases: []string{"s"},
    18  	Short:      "Describe an issue",
    19  	Long:       ``,
    20  	Run: func(cmd *cobra.Command, args []string) {
    21  		rn, issueNum, err := parseArgs(args)
    22  		if err != nil {
    23  			log.Fatal(err)
    24  		}
    25  
    26  		issue, err := lab.IssueGet(rn, int(issueNum))
    27  		if err != nil {
    28  			log.Fatal(err)
    29  		}
    30  
    31  		printIssue(issue, rn)
    32  	},
    33  }
    34  
    35  func printIssue(issue *gitlab.Issue, project string) {
    36  	milestone := "None"
    37  	timestats := "None"
    38  	dueDate := "None"
    39  	state := map[string]string{
    40  		"opened": "Open",
    41  		"closed": "Closed",
    42  	}[issue.State]
    43  	if issue.Milestone != nil {
    44  		milestone = issue.Milestone.Title
    45  	}
    46  	if issue.TimeStats != nil && issue.TimeStats.HumanTimeEstimate != "" &&
    47  		issue.TimeStats.HumanTotalTimeSpent != "" {
    48  		timestats = fmt.Sprintf(
    49  			"Estimated %s, Spent %s",
    50  			issue.TimeStats.HumanTimeEstimate,
    51  			issue.TimeStats.HumanTotalTimeSpent)
    52  	}
    53  	if issue.DueDate != nil {
    54  		dueDate = time.Time(*issue.DueDate).String()
    55  	}
    56  	assignees := make([]string, len(issue.Assignees))
    57  	if len(issue.Assignees) > 0 && issue.Assignees[0].Username != "" {
    58  		for i, a := range issue.Assignees {
    59  			assignees[i] = a.Username
    60  		}
    61  	}
    62  
    63  	fmt.Printf(`
    64  #%d %s
    65  ===================================
    66  %s
    67  -----------------------------------
    68  Project: %s
    69  Status: %s
    70  Assignees: %s
    71  Author: %s
    72  Milestone: %s
    73  Due Date: %s
    74  Time Stats: %s
    75  Labels: %s
    76  WebURL: %s
    77  `,
    78  		issue.IID, issue.Title, issue.Description, project, state, strings.Join(assignees, ", "),
    79  		issue.Author.Username, milestone, dueDate, timestats,
    80  		strings.Join(issue.Labels, ", "), issue.WebURL,
    81  	)
    82  }
    83  
    84  func init() {
    85  	issueCmd.AddCommand(issueShowCmd)
    86  }