Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Netflix-Skunkworks/go-jira
Browse files Browse the repository at this point in the history
  • Loading branch information
coryb committed Jan 29, 2016
2 parents b5417ef + f595801 commit 382bf4f
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 10 deletions.
26 changes: 26 additions & 0 deletions cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,24 @@ func (c *Cli) put(uri string, content string) (*http.Response, error) {
return c.makeRequestWithContent("PUT", uri, content)
}

func (c *Cli) delete(uri string) (*http.Response, error) {
method := "DELETE"
req, _ := http.NewRequest(method, uri, nil)
log.Info("%s %s", req.Method, req.URL.String())
if resp, err := c.makeRequest(req); err != nil {
return nil, err
} else {
if resp.StatusCode == 401 {
if err := c.CmdLogin(); err != nil {
return nil, err
}
req, _ = http.NewRequest(method, uri, nil)
return c.makeRequest(req)
}
return resp, err
}
}

func (c *Cli) makeRequestWithContent(method string, uri string, content string) (*http.Response, error) {
buffer := bytes.NewBufferString(content)
req, _ := http.NewRequest(method, uri, buffer)
Expand Down Expand Up @@ -456,6 +474,10 @@ func (c *Cli) FindIssues() (interface{}, error) {
}
}

func (c *Cli) GetOptString(optName string, dflt string) string {
return c.getOptString(optName, dflt)
}

func (c *Cli) getOptString(optName string, dflt string) string {
if val, ok := c.opts[optName].(string); ok {
return val
Expand All @@ -464,6 +486,10 @@ func (c *Cli) getOptString(optName string, dflt string) string {
}
}

func (c *Cli) GetOptBool(optName string, dflt bool) bool {
return c.getOptBool(optName, dflt)
}

func (c *Cli) getOptBool(optName string, dflt bool) bool {
if val, ok := c.opts[optName].(bool); ok {
return val
Expand Down
75 changes: 67 additions & 8 deletions commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -385,22 +385,34 @@ func (c *Cli) CmdDups(duplicate string, issue string) error {
return nil
}

func (c *Cli) CmdWatch(issue string) error {
watcher := c.getOptString("watcher", c.opts["user"].(string))
log.Debug("watch called")
func (c *Cli) CmdWatch(issue string, watcher string, remove bool) error {
log.Debug("watch called: watcher: %q, remove: %n", watcher, remove)

var uri string
json, err := jsonEncode(watcher)
if err != nil {
return err
}

uri := fmt.Sprintf("%s/rest/api/2/issue/%s/watchers", c.endpoint, issue)
if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json)
log.Debug("Dryrun mode, skipping POST")
if !remove {
log.Debug("POST: %s", json)
log.Debug("Dryrun mode, skipping POST")
} else {
log.Debug("DELETE: %s", watcher)
log.Debug("Dryrun mode, skipping POST")
}
return nil
}
resp, err := c.post(uri, json)

var resp *http.Response
if !remove {
uri = fmt.Sprintf("%s/rest/api/2/issue/%s/watchers", c.endpoint, issue)
resp, err = c.post(uri, json)
} else {
uri = fmt.Sprintf("%s/rest/api/2/issue/%s/watchers?username=%s", c.endpoint, issue, watcher)
resp, err = c.delete(uri)
}
if err != nil {
return err
}
Expand All @@ -412,7 +424,54 @@ func (c *Cli) CmdWatch(issue string) error {
} else {
logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST")
if !remove {
err = fmt.Errorf("Unexpected Response From POST")
} else {
err = fmt.Errorf("Unexpected Response From DELETE")
}
log.Error("%s:\n%s", err, logBuffer)
return err
}
return nil
}

func (c *Cli) CmdVote(issue string, up bool) error {
log.Debug("vote called, with up: %n", up)

uri := fmt.Sprintf("%s/rest/api/2/issue/%s/votes", c.endpoint, issue)
if c.getOptBool("dryrun", false) {
if up {
log.Debug("POST: %s", "")
log.Debug("Dryrun mode, skipping POST")
} else {
log.Debug("DELETE: %s", "")
log.Debug("Dryrun mode, skipping DELETE")
}
return nil
}
var resp *http.Response
var err error
if up {
resp, err = c.post(uri, "")
} else {
resp, err = c.delete(uri)
}
if err != nil {
return err
}
if resp.StatusCode == 204 {
c.Browse(issue)
if !c.opts["quiet"].(bool) {
fmt.Printf("OK %s %s/browse/%s\n", issue, c.endpoint, issue)
}
} else {
logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer)
if up {
err = fmt.Errorf("Unexpected Response From POST")
} else {
err = fmt.Errorf("Unexpected Response From DELETE")
}
log.Error("%s:\n%s", err, logBuffer)
return err
}
Expand Down
17 changes: 15 additions & 2 deletions main/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ Usage:
jira create [--noedit] [-p PROJECT] <Create Options>
jira DUPLICATE dups ISSUE
jira BLOCKER blocks ISSUE
jira watch ISSUE [-w WATCHER]
jira vote ISSUE [--down]
jira watch ISSUE [-w WATCHER] [--remove]
jira (trans|transition) TRANSITION ISSUE [--noedit] <Edit Options>
jira ack ISSUE [--edit] <Edit Options>
jira close ISSUE [--edit] <Edit Options>
Expand Down Expand Up @@ -155,6 +156,7 @@ Command Options:
"login": "login",
"req": "request",
"request": "request",
"vote": "vote",
}

defaults := map[string]interface{}{
Expand Down Expand Up @@ -194,6 +196,7 @@ Command Options:
"a|assignee=s": setopt,
"i|issuetype=s": setopt,
"w|watcher=s": setopt,
"remove": setopt,
"r|reporter=s": setopt,
"f|queryfields=s": setopt,
"s|sort=s": setopt,
Expand All @@ -206,6 +209,7 @@ Command Options:
"M|method=s": setopt,
"S|saveFile=s": setopt,
"Q|quiet": setopt,
"down": setopt,
})

if err := op.ProcessAll(os.Args[1:]); err != nil {
Expand Down Expand Up @@ -350,7 +354,9 @@ Command Options:
}
case "watch":
requireArgs(1)
err = c.CmdWatch(args[0])
watcher := c.GetOptString("watcher", opts["user"].(string))
remove := c.GetOptBool("remove", false)
err = c.CmdWatch(args[0], watcher, remove)
case "transition":
requireArgs(2)
setEditing(true)
Expand Down Expand Up @@ -404,6 +410,13 @@ Command Options:
case "view":
requireArgs(1)
err = c.CmdView(args[0])
case "vote":
requireArgs(1)
if val, ok := opts["down"]; ok {
err = c.CmdVote(args[0], !val.(bool))
} else {
err = c.CmdVote(args[0], true)
}
case "request":
requireArgs(1)
data := ""
Expand Down

0 comments on commit 382bf4f

Please sign in to comment.