From dc5ae42c58fffcf97fc3d3d1395da24355501ef3 Mon Sep 17 00:00:00 2001 From: Jay Buffington Date: Wed, 18 Feb 2015 17:14:56 -0800 Subject: [PATCH 1/3] validate project --- jira/cli/commands.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/jira/cli/commands.go b/jira/cli/commands.go index fb93bae..05444af 100644 --- a/jira/cli/commands.go +++ b/jira/cli/commands.go @@ -220,6 +220,11 @@ func (c *Cli) CmdCreateMeta(project string, issuetype string) error { } if val, ok := data.(map[string]interface{})["projects"]; ok { + if len(val.([]interface{})) == 0 { + err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to createmeta.", project, issuetype) + log.Error("%s", err) + return err + } if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok { data = val.([]interface{})[0] } @@ -253,6 +258,11 @@ func (c *Cli) CmdCreate(project string, issuetype string) error { issueData["overrides"].(map[string]string)["issuetype"] = issuetype if val, ok := data.(map[string]interface{})["projects"]; ok { + if len(val.([]interface{})) == 0 { + err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to create issue.", project, issuetype) + log.Error("%s", err) + return err + } if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok { issueData["meta"] = val.([]interface{})[0] } From 4924dfaab38b7792dadc9fe1ec5baec7c144696f Mon Sep 17 00:00:00 2001 From: Jay Buffington Date: Wed, 18 Feb 2015 17:39:37 -0800 Subject: [PATCH 2/3] if response is 400, check json for errorMessages and log them --- jira/cli/util.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/jira/cli/util.go b/jira/cli/util.go index 7d8f656..495b01f 100644 --- a/jira/cli/util.go +++ b/jira/cli/util.go @@ -116,9 +116,19 @@ func runTemplate(templateContent string, data interface{}, out io.Writer) error func responseToJson(resp *http.Response, err error) (interface{}, error) { if err != nil { return nil, err - } else { - return jsonDecode(resp.Body), nil } + + data := jsonDecode(resp.Body) + if resp.StatusCode == 400 { + if val, ok := data.(map[string]interface{})["errorMessages"]; ok { + for _,errMsg := range val.([]interface{}) { + log.Error("%s", errMsg) + } + } + } + + + return data, nil } func jsonDecode(io io.Reader) interface{} { From 1b69d126c018085ec3bfc1b8558683cd12c3f860 Mon Sep 17 00:00:00 2001 From: Jay Buffington Date: Wed, 18 Feb 2015 19:26:36 -0800 Subject: [PATCH 3/3] project should always be uppercase Jira docs say as much: https://confluence.atlassian.com/display/JIRA/Changing+the+Project+Key+Format#ChangingtheProjectKeyFormat-prerequisites --- jira/cli/cli.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jira/cli/cli.go b/jira/cli/cli.go index eb119ad..0f95b22 100644 --- a/jira/cli/cli.go +++ b/jira/cli/cli.go @@ -32,6 +32,10 @@ func New(opts map[string]string) *Cli { endpoint, _ := opts["endpoint"] url, _ := url.Parse(strings.TrimRight(endpoint, "/")) + if project, ok := opts["project"]; ok { + opts["project"] = strings.ToUpper(project) + } + cli := &Cli{ endpoint: url, opts: opts,