Skip to content

Commit f22f584

Browse files
committed
Handle closed issues
1 parent bf94a31 commit f22f584

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

api/queries_issue.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type Issue struct {
2828
Title string
2929
URL string
3030
State string
31+
Closed bool
3132
Body string
3233
CreatedAt time.Time
3334
UpdatedAt time.Time
@@ -307,6 +308,7 @@ func IssueByNumber(client *Client, repo ghrepo.Interface, number int) (*Issue, e
307308
id
308309
title
309310
state
311+
closed
310312
body
311313
author {
312314
login
@@ -367,13 +369,17 @@ func IssueByNumber(client *Client, repo ghrepo.Interface, number int) (*Issue, e
367369
return &resp.Repository.Issue, nil
368370
}
369371

370-
func IssueClose(client *Client, repo ghrepo.Interface, issueNumber int) error {
372+
func IssueClose(client *Client, repo ghrepo.Interface, issueNumber int) (alreadyClosed bool, _ error) {
371373
issue, err := IssueByNumber(client, repo, issueNumber)
372374
var idErr *IssuesDisabledError
373375
if errors.As(err, &idErr) {
374-
return fmt.Errorf("issues disabled for %s", ghrepo.FullName(repo))
376+
return false, fmt.Errorf("issues disabled for %s", ghrepo.FullName(repo))
375377
} else if err != nil {
376-
return fmt.Errorf("failed to find issue #%d: %w", issueNumber, err)
378+
return false, fmt.Errorf("failed to find issue #%d: %w", issueNumber, err)
379+
}
380+
381+
if issue.Closed {
382+
return true, nil
377383
}
378384

379385
var mutation struct {
@@ -392,8 +398,8 @@ func IssueClose(client *Client, repo ghrepo.Interface, issueNumber int) error {
392398
err = v4.Mutate(context.Background(), &mutation, input, nil)
393399

394400
if err != nil {
395-
return err
401+
return false, err
396402
}
397403

398-
return nil
404+
return false, nil
399405
}

command/issue.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,12 +539,16 @@ func issueClose(cmd *cobra.Command, args []string) error {
539539
return fmt.Errorf("expected a number but: %w", err)
540540
}
541541

542-
err = api.IssueClose(apiClient, baseRepo, issueNumber)
542+
alreadyClosed, err := api.IssueClose(apiClient, baseRepo, issueNumber)
543543
if err != nil {
544544
return fmt.Errorf("API call failed:%w", err)
545545
}
546546

547-
fmt.Fprintf(colorableErr(cmd), "%s closed issue #%d\n", utils.Green("✔"), issueNumber)
547+
if alreadyClosed {
548+
fmt.Fprintf(colorableErr(cmd), "%s issue #%d is already closed\n", utils.Yellow("!"), issueNumber)
549+
} else {
550+
fmt.Fprintf(colorableErr(cmd), "%s closed issue #%d\n", utils.Green("✔"), issueNumber)
551+
}
548552

549553
return nil
550554
}

0 commit comments

Comments
 (0)