From 8f726904659393b4d48f6659d3d9fa54ecb1bda0 Mon Sep 17 00:00:00 2001 From: BLasan Date: Fri, 1 Oct 2021 02:07:17 +0530 Subject: [PATCH] Fix: Label updating issue --- commands/issue.go | 9 +++++++++ github/client.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/commands/issue.go b/commands/issue.go index 89edd2eab..bddd0cb17 100644 --- a/commands/issue.go +++ b/commands/issue.go @@ -653,6 +653,15 @@ func updateIssue(cmd *Command, args *Args) { setAssigneesFromArgs(params, args) setMilestoneFromArgs(params, args, gh, project) + labels, err := gh.FetchIssueLabels(project, issueNumber) + utils.Check(err) + + for _, label := range labels { + res := []string{} + res = append(res, label.Name) + params["labels"] = res + } + if args.Flag.HasReceived("--state") { params["state"] = args.Flag.Value("--state") } diff --git a/github/client.go b/github/client.go index ce9224140..1f042f98e 100644 --- a/github/client.go +++ b/github/client.go @@ -866,6 +866,36 @@ func (client *Client) FetchLabels(project *Project) (labels []IssueLabel, err er return } +func (client *Client) FetchIssueLabels(project *Project, issueNumber int) (labels []IssueLabel, err error) { + api, err := client.simpleAPI() + if err != nil { + return + } + + path := fmt.Sprintf("repos/%s/%s/issues/%d/labels?per_page=100", project.Owner, project.Name, issueNumber) + + labels = []IssueLabel{} + var res *simpleResponse + + for path != "" { + res, err = api.Get(path) + if err = checkStatus(200, "fetching labels", res, err); err != nil { + return + } + path = res.Link("next") + + labelsPage := []IssueLabel{} + if err = res.Unmarshal(&labelsPage); err != nil { + return + } + labels = append(labels, labelsPage...) + } + + sort.Sort(sortedLabels(labels)) + + return +} + func (client *Client) FetchMilestones(project *Project) (milestones []Milestone, err error) { api, err := client.simpleAPI() if err != nil {