mirror of
https://github.com/Threnklyn/jira.git
synced 2026-05-19 04:33:28 +02:00
Tweak the CmdWatch contract and add watcher remove support
This adjusts the CmdWatch interface as per discussion in https://github.com/Netflix-Skunkworks/go-jira/pull/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)
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
|
||||
+24
-8
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
+5
-2
@@ -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>
|
||||
@@ -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,
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user