forked from zaquestion/lab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
issueShow.go
86 lines (78 loc) · 1.81 KB
/
issueShow.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
76
77
78
79
80
81
82
83
84
85
86
package cmd
import (
"fmt"
"log"
"strings"
"time"
"github.com/spf13/cobra"
"github.com/xanzy/go-gitlab"
lab "github.com/zaquestion/lab/internal/gitlab"
)
var issueShowCmd = &cobra.Command{
Use: "show [remote] <id>",
Aliases: []string{"get"},
ArgAliases: []string{"s"},
Short: "Describe an issue",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
rn, issueNum, err := parseArgs(args)
if err != nil {
log.Fatal(err)
}
issue, err := lab.IssueGet(rn, int(issueNum))
if err != nil {
log.Fatal(err)
}
printIssue(issue, rn)
},
}
func printIssue(issue *gitlab.Issue, project string) {
milestone := "None"
timestats := "None"
dueDate := "None"
state := map[string]string{
"opened": "Open",
"closed": "Closed",
}[issue.State]
if issue.Milestone != nil {
milestone = issue.Milestone.Title
}
if issue.TimeStats != nil && issue.TimeStats.HumanTimeEstimate != "" &&
issue.TimeStats.HumanTotalTimeSpent != "" {
timestats = fmt.Sprintf(
"Estimated %s, Spent %s",
issue.TimeStats.HumanTimeEstimate,
issue.TimeStats.HumanTotalTimeSpent)
}
if issue.DueDate != nil {
dueDate = time.Time(*issue.DueDate).String()
}
assignees := make([]string, len(issue.Assignees))
if len(issue.Assignees) > 0 && issue.Assignees[0].Username != "" {
for i, a := range issue.Assignees {
assignees[i] = a.Username
}
}
fmt.Printf(`
#%d %s
===================================
%s
-----------------------------------
Project: %s
Status: %s
Assignees: %s
Author: %s
Milestone: %s
Due Date: %s
Time Stats: %s
Labels: %s
WebURL: %s
`,
issue.IID, issue.Title, issue.Description, project, state, strings.Join(assignees, ", "),
issue.Author.Username, milestone, dueDate, timestats,
strings.Join(issue.Labels, ", "), issue.WebURL,
)
}
func init() {
issueCmd.AddCommand(issueShowCmd)
}