Skip to content

Commit

Permalink
add comment command
Browse files Browse the repository at this point in the history
  • Loading branch information
coryb committed Aug 19, 2017
1 parent ec0ac3c commit f0b08c5
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 0 deletions.
4 changes: 4 additions & 0 deletions cmd/jira/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ func main() {
Command: "edit",
Entry: cli.CmdEditRegistry(),
},
jiracli.CommandRegistry{
Command: "comment",
Entry: cli.CmdCommentRegistry(),
},
jiracli.CommandRegistry{
Command: "worklog list",
Entry: cli.CmdWorklogListRegistry(),
Expand Down
25 changes: 25 additions & 0 deletions issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,3 +399,28 @@ func (j *Jira) IssueRemoveWatcher(issue, user string) error {
}
return responseError(resp)
}

type CommentProvider interface {
ProvideComment() *jiradata.Comment
}

// https://docs.atlassian.com/jira/REST/cloud/#api/2/issue/{issueIdOrKey}/comment-addComment
func (j *Jira) IssueAddComment(issue string, cp CommentProvider) (*jiradata.Comment, error) {
req := cp.ProvideComment()
encoded, err := json.Marshal(req)
if err != nil {
return nil, err
}
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/comment", j.Endpoint, issue)
resp, err := j.UA.Post(uri, "application/json", bytes.NewBuffer(encoded))
if err != nil {
return nil, err
}
defer resp.Body.Close()

if resp.StatusCode == 201 {
results := jiradata.Comment{}
return &results, readJSON(resp.Body, &results)
}
return nil, responseError(resp)
}
70 changes: 70 additions & 0 deletions jiracli/comment.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package jiracli

import (
"fmt"

"gopkg.in/Netflix-Skunkworks/go-jira.v1/jiradata"
kingpin "gopkg.in/alecthomas/kingpin.v2"
)

type CommentOptions struct {
GlobalOptions
Overrides map[string]string
Issue string
}

func (jc *JiraCli) CmdCommentRegistry() *CommandRegistryEntry {
opts := CommentOptions{
GlobalOptions: GlobalOptions{
Template: "comment",
},
Overrides: map[string]string{},
}

return &CommandRegistryEntry{
"Add comment to issue",
func() error {
return jc.CmdComment(&opts)
},
func(cmd *kingpin.CmdClause) error {
return jc.CmdCommentUsage(cmd, &opts)
},
}
}

func (jc *JiraCli) CmdCommentUsage(cmd *kingpin.CmdClause, opts *CommentOptions) error {
if err := jc.GlobalUsage(cmd, &opts.GlobalOptions); err != nil {
return err
}
jc.EditorUsage(cmd, &opts.GlobalOptions)
jc.TemplateUsage(cmd, &opts.GlobalOptions)
cmd.Flag("comment", "Comment message for issue").Short('m').PreAction(func(ctx *kingpin.ParseContext) error {
opts.Overrides["comment"] = flagValue(ctx, "comment")
return nil
}).String()
cmd.Arg("ISSUE", "issue id to update").StringVar(&opts.Issue)
return nil
}

// CmdComment will update issue with comment
func (jc *JiraCli) CmdComment(opts *CommentOptions) error {
comment := jiradata.Comment{}
input := struct {
Overrides map[string]string
}{
opts.Overrides,
}
err := jc.editLoop(&opts.GlobalOptions, &input, &comment, func() error {
_, err := jc.IssueAddComment(opts.Issue, &comment)
return err
})
if err != nil {
return err
}

fmt.Printf("OK %s %s/browse/%s\n", opts.Issue, jc.Endpoint, opts.Issue)

// FIXME implement browse

return nil
}
4 changes: 4 additions & 0 deletions jiradata/providers.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ func (l *LinkIssueRequest) ProvideLinkIssueRequest() *LinkIssueRequest {
func (r *RankRequest) ProvideRankRequest() *RankRequest {
return r
}

func (c *Comment) ProvideComment() *Comment {
return c
}

0 comments on commit f0b08c5

Please sign in to comment.