Skip to content

Commit

Permalink
Tweak the CmdWatch contract and add watcher remove support
Browse files Browse the repository at this point in the history
This adjusts the CmdWatch interface as per discussion in
#26

It also exposes public versions of the c.getOptString and c.getOptBool
utility functions, again as discussed.

The interface to CmdWatch now includes the user to be watched (rather than
depending on the opt[] map. This makes CmdWatch more useful externally.

A '--remove' option has been created, to allow for removal of a given watcher.
This was deliberately not included in the defaults map, as it is specifically only
used for 'watch' command right now. It should be moved up to a default if it becomes
a more common option, I guess (as 'remove is false' isn't a bad default)
  • Loading branch information
Mike Pountney committed Jan 24, 2016
1 parent 797edef commit 383847a
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 10 deletions.
8 changes: 8 additions & 0 deletions cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -474,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 @@ -482,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
32 changes: 24 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,11 @@ 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
}
Expand Down
7 changes: 5 additions & 2 deletions main/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +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 @@ -196,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 Down Expand Up @@ -353,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

0 comments on commit 383847a

Please sign in to comment.