change for api changes to go-logging

This commit is contained in:
Cory Bennett
2016-02-11 15:11:06 -08:00
parent 7ef8c4fe63
commit 7bfc6e810c
4 changed files with 125 additions and 125 deletions
+21 -21
View File
@@ -6,8 +6,8 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"github.com/kballard/go-shellquote" "github.com/kballard/go-shellquote"
"github.com/op/go-logging"
"gopkg.in/coryb/yaml.v2" "gopkg.in/coryb/yaml.v2"
"gopkg.in/op/go-logging.v1"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/http/cookiejar" "net/http/cookiejar"
@@ -100,15 +100,15 @@ func (c *Cli) loadCookies() []*http.Cookie {
return nil return nil
} }
if err != nil { if err != nil {
log.Error("Failed to open %s: %s", c.cookieFile, err) log.Errorf("Failed to open %s: %s", c.cookieFile, err)
os.Exit(1) os.Exit(1)
} }
cookies := make([]*http.Cookie, 0) cookies := make([]*http.Cookie, 0)
err = json.Unmarshal(bytes, &cookies) err = json.Unmarshal(bytes, &cookies)
if err != nil { if err != nil {
log.Error("Failed to parse json from file %s: %s", c.cookieFile, err) log.Errorf("Failed to parse json from file %s: %s", c.cookieFile, err)
} }
log.Debug("Loading Cookies: %s", cookies) log.Debugf("Loading Cookies: %s", cookies)
return cookies return cookies
} }
@@ -123,7 +123,7 @@ func (c *Cli) put(uri string, content string) (*http.Response, error) {
func (c *Cli) delete(uri string) (*http.Response, error) { func (c *Cli) delete(uri string) (*http.Response, error) {
method := "DELETE" method := "DELETE"
req, _ := http.NewRequest(method, uri, nil) req, _ := http.NewRequest(method, uri, nil)
log.Info("%s %s", req.Method, req.URL.String()) log.Infof("%s %s", req.Method, req.URL.String())
if resp, err := c.makeRequest(req); err != nil { if resp, err := c.makeRequest(req); err != nil {
return nil, err return nil, err
} else { } else {
@@ -142,11 +142,11 @@ func (c *Cli) makeRequestWithContent(method string, uri string, content string)
buffer := bytes.NewBufferString(content) buffer := bytes.NewBufferString(content)
req, _ := http.NewRequest(method, uri, buffer) req, _ := http.NewRequest(method, uri, buffer)
log.Info("%s %s", req.Method, req.URL.String()) log.Infof("%s %s", req.Method, req.URL.String())
if log.IsEnabledFor(logging.DEBUG) { if log.IsEnabledFor(logging.DEBUG) {
logBuffer := bytes.NewBuffer(make([]byte, 0, len(content))) logBuffer := bytes.NewBuffer(make([]byte, 0, len(content)))
req.Write(logBuffer) req.Write(logBuffer)
log.Debug("%s", logBuffer) log.Debugf("%s", logBuffer)
// need to recreate the buffer since the offset is now at the end // need to recreate the buffer since the offset is now at the end
// need to be able to rewind the buffer offset, dont know how yet // need to be able to rewind the buffer offset, dont know how yet
req, _ = http.NewRequest(method, uri, bytes.NewBufferString(content)) req, _ = http.NewRequest(method, uri, bytes.NewBufferString(content))
@@ -168,11 +168,11 @@ func (c *Cli) makeRequestWithContent(method string, uri string, content string)
func (c *Cli) get(uri string) (*http.Response, error) { func (c *Cli) get(uri string) (*http.Response, error) {
req, _ := http.NewRequest("GET", uri, nil) req, _ := http.NewRequest("GET", uri, nil)
log.Info("%s %s", req.Method, req.URL.String()) log.Infof("%s %s", req.Method, req.URL.String())
if log.IsEnabledFor(logging.DEBUG) { if log.IsEnabledFor(logging.DEBUG) {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
req.Write(logBuffer) req.Write(logBuffer)
log.Debug("%s", logBuffer) log.Debugf("%s", logBuffer)
} }
if resp, err := c.makeRequest(req); err != nil { if resp, err := c.makeRequest(req); err != nil {
@@ -191,11 +191,11 @@ func (c *Cli) get(uri string) (*http.Response, error) {
func (c *Cli) makeRequest(req *http.Request) (resp *http.Response, err error) { func (c *Cli) makeRequest(req *http.Request) (resp *http.Response, err error) {
req.Header.Set("Content-Type", "application/json") req.Header.Set("Content-Type", "application/json")
if resp, err = c.ua.Do(req); err != nil { if resp, err = c.ua.Do(req); err != nil {
log.Error("Failed to %s %s: %s", req.Method, req.URL.String(), err) log.Errorf("Failed to %s %s: %s", req.Method, req.URL.String(), err)
return nil, err return nil, err
} else { } else {
if resp.StatusCode < 200 || resp.StatusCode >= 300 && resp.StatusCode != 401 { if resp.StatusCode < 200 || resp.StatusCode >= 300 && resp.StatusCode != 401 {
log.Error("response status: %s", resp.Status) log.Errorf("response status: %s", resp.Status)
} }
runtime.SetFinalizer(resp, func(r *http.Response) { runtime.SetFinalizer(resp, func(r *http.Response) {
@@ -257,14 +257,14 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
fh, err := ioutil.TempFile(tmpdir, tmpFilePrefix) fh, err := ioutil.TempFile(tmpdir, tmpFilePrefix)
if err != nil { if err != nil {
log.Error("Failed to make temp file in %s: %s", tmpdir, err) log.Errorf("Failed to make temp file in %s: %s", tmpdir, err)
return err return err
} }
defer fh.Close() defer fh.Close()
tmpFileName := fmt.Sprintf("%s.yml", fh.Name()) tmpFileName := fmt.Sprintf("%s.yml", fh.Name())
if err := os.Rename(fh.Name(), tmpFileName); err != nil { if err := os.Rename(fh.Name(), tmpFileName); err != nil {
log.Error("Failed to rename %s to %s: %s", fh.Name(), fmt.Sprintf("%s.yml", fh.Name()), err) log.Errorf("Failed to rename %s to %s: %s", fh.Name(), fmt.Sprintf("%s.yml", fh.Name()), err)
return err return err
} }
defer func() { defer func() {
@@ -301,11 +301,11 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
if editing { if editing {
shell, _ := shellquote.Split(editor) shell, _ := shellquote.Split(editor)
shell = append(shell, tmpFileName) shell = append(shell, tmpFileName)
log.Debug("Running: %#v", shell) log.Debugf("Running: %#v", shell)
cmd := exec.Command(shell[0], shell[1:]...) cmd := exec.Command(shell[0], shell[1:]...)
cmd.Stdout, cmd.Stderr, cmd.Stdin = os.Stdout, os.Stderr, os.Stdin cmd.Stdout, cmd.Stderr, cmd.Stdin = os.Stdout, os.Stderr, os.Stdin
if err := cmd.Run(); err != nil { if err := cmd.Run(); err != nil {
log.Error("Failed to edit template with %s: %s", editor, err) log.Errorf("Failed to edit template with %s: %s", editor, err)
if promptYN("edit again?", true) { if promptYN("edit again?", true) {
continue continue
} }
@@ -321,14 +321,14 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
edited := make(map[string]interface{}) edited := make(map[string]interface{})
if fh, err := ioutil.ReadFile(tmpFileName); err != nil { if fh, err := ioutil.ReadFile(tmpFileName); err != nil {
log.Error("Failed to read tmpfile %s: %s", tmpFileName, err) log.Errorf("Failed to read tmpfile %s: %s", tmpFileName, err)
if editing && promptYN("edit again?", true) { if editing && promptYN("edit again?", true) {
continue continue
} }
return err return err
} else { } else {
if err := yaml.Unmarshal(fh, &edited); err != nil { if err := yaml.Unmarshal(fh, &edited); err != nil {
log.Error("Failed to parse YAML: %s", err) log.Errorf("Failed to parse YAML: %s", err)
if editing && promptYN("edit again?", true) { if editing && promptYN("edit again?", true) {
continue continue
} }
@@ -346,7 +346,7 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
// you can add the "abort: true" flag to the document // you can add the "abort: true" flag to the document
// and we will abort now // and we will abort now
if val, ok := edited["abort"].(bool); ok && val { if val, ok := edited["abort"].(bool); ok && val {
log.Info("abort flag found in template, quiting") log.Infof("abort flag found in template, quiting")
return fmt.Errorf("abort flag found in template, quiting") return fmt.Errorf("abort flag found in template, quiting")
} }
@@ -356,7 +356,7 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
for k := range f { for k := range f {
if _, ok := mf.(map[string]interface{})[k]; !ok { if _, ok := mf.(map[string]interface{})[k]; !ok {
err := fmt.Errorf("Field %s is not editable", k) err := fmt.Errorf("Field %s is not editable", k)
log.Error("%s", err) log.Errorf("%s", err)
if editing && promptYN("edit again?", true) { if editing && promptYN("edit again?", true) {
continue continue
} }
@@ -372,7 +372,7 @@ func (c *Cli) editTemplate(template string, tmpFilePrefix string, templateData m
} }
if err := templateProcessor(json); err != nil { if err := templateProcessor(json); err != nil {
log.Error("%s", err) log.Errorf("%s", err)
if editing && promptYN("edit again?", true) { if editing && promptYN("edit again?", true) {
continue continue
} }
@@ -418,7 +418,7 @@ func (c *Cli) FindIssues() (interface{}, error) {
qbuff := bytes.NewBufferString("resolution = unresolved") qbuff := bytes.NewBufferString("resolution = unresolved")
if project, ok := c.opts["project"]; !ok { if project, ok := c.opts["project"]; !ok {
err := fmt.Errorf("Missing required arguments, either 'query' or 'project' are required") err := fmt.Errorf("Missing required arguments, either 'query' or 'project' are required")
log.Error("%s", err) log.Errorf("%s", err)
return nil, err return nil, err
} else { } else {
qbuff.WriteString(fmt.Sprintf(" AND project = '%s'", project)) qbuff.WriteString(fmt.Sprintf(" AND project = '%s'", project))
+73 -73
View File
@@ -24,22 +24,22 @@ func (c *Cli) CmdLogin() error {
passwd := string(pwbytes) passwd := string(pwbytes)
req.SetBasicAuth(user, passwd) req.SetBasicAuth(user, passwd)
log.Info("%s %s", req.Method, req.URL.String()) log.Infof("%s %s", req.Method, req.URL.String())
if resp, err := c.makeRequest(req); err != nil { if resp, err := c.makeRequest(req); err != nil {
return err return err
} else { } else {
out, _ := httputil.DumpResponse(resp, true) out, _ := httputil.DumpResponse(resp, true)
log.Debug("%s", out) log.Debugf("%s", out)
if resp.StatusCode == 403 { if resp.StatusCode == 403 {
// probably got this, need to redirect the user to login manually // probably got this, need to redirect the user to login manually
// X-Authentication-Denied-Reason: CAPTCHA_CHALLENGE; login-url=https://jira/login.jsp // X-Authentication-Denied-Reason: CAPTCHA_CHALLENGE; login-url=https://jira/login.jsp
if reason := resp.Header.Get("X-Authentication-Denied-Reason"); reason != "" { if reason := resp.Header.Get("X-Authentication-Denied-Reason"); reason != "" {
err := fmt.Errorf("Authenticaion Failed: %s", reason) err := fmt.Errorf("Authenticaion Failed: %s", reason)
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} }
err := fmt.Errorf("Authentication Failed: Unknown Reason") err := fmt.Errorf("Authentication Failed: Unknown Reason")
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} else if resp.StatusCode == 200 { } else if resp.StatusCode == 200 {
@@ -60,7 +60,7 @@ func (c *Cli) CmdLogin() error {
} }
func (c *Cli) CmdFields() error { func (c *Cli) CmdFields() error {
log.Debug("fields called") log.Debugf("fields called")
uri := fmt.Sprintf("%s/rest/api/2/field", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/field", c.endpoint)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -71,7 +71,7 @@ func (c *Cli) CmdFields() error {
} }
func (c *Cli) CmdList() error { func (c *Cli) CmdList() error {
log.Debug("list called") log.Debugf("list called")
if data, err := c.FindIssues(); err != nil { if data, err := c.FindIssues(); err != nil {
return err return err
} else { } else {
@@ -80,7 +80,7 @@ func (c *Cli) CmdList() error {
} }
func (c *Cli) CmdView(issue string) error { func (c *Cli) CmdView(issue string) error {
log.Debug("view called") log.Debugf("view called")
c.Browse(issue) c.Browse(issue)
data, err := c.ViewIssue(issue) data, err := c.ViewIssue(issue)
if err != nil { if err != nil {
@@ -90,7 +90,7 @@ func (c *Cli) CmdView(issue string) error {
} }
func (c *Cli) CmdEdit(issue string) error { func (c *Cli) CmdEdit(issue string) error {
log.Debug("edit called") log.Debugf("edit called")
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/editmeta", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/editmeta", c.endpoint, issue)
editmeta, err := responseToJson(c.get(uri)) editmeta, err := responseToJson(c.get(uri))
@@ -115,8 +115,8 @@ func (c *Cli) CmdEdit(issue string) error {
issueData, issueData,
func(json string) error { func(json string) error {
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("PUT: %s", json) log.Debugf("PUT: %s", json)
log.Debug("Dryrun mode, skipping PUT") log.Debugf("Dryrun mode, skipping PUT")
return nil return nil
} }
resp, err := c.put(uri, json) resp, err := c.put(uri, json)
@@ -134,7 +134,7 @@ func (c *Cli) CmdEdit(issue string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From PUT") err := fmt.Errorf("Unexpected Response From PUT")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
}, },
@@ -142,7 +142,7 @@ func (c *Cli) CmdEdit(issue string) error {
} }
func (c *Cli) CmdEditMeta(issue string) error { func (c *Cli) CmdEditMeta(issue string) error {
log.Debug("editMeta called") log.Debugf("editMeta called")
c.Browse(issue) c.Browse(issue)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/editmeta", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/editmeta", c.endpoint, issue)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
@@ -154,7 +154,7 @@ func (c *Cli) CmdEditMeta(issue string) error {
} }
func (c *Cli) CmdTransitionMeta(issue string) error { func (c *Cli) CmdTransitionMeta(issue string) error {
log.Debug("tranisionMeta called") log.Debugf("tranisionMeta called")
c.Browse(issue) c.Browse(issue)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions?expand=transitions.fields", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions?expand=transitions.fields", c.endpoint, issue)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
@@ -167,7 +167,7 @@ func (c *Cli) CmdTransitionMeta(issue string) error {
func (c *Cli) CmdIssueTypes() error { func (c *Cli) CmdIssueTypes() error {
project := c.opts["project"].(string) project := c.opts["project"].(string)
log.Debug("issueTypes called") log.Debugf("issueTypes called")
uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s", c.endpoint, project) uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s", c.endpoint, project)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -181,7 +181,7 @@ func (c *Cli) CmdCreateMeta() error {
project := c.opts["project"].(string) project := c.opts["project"].(string)
issuetype := c.getOptString("issuetype", "Bug") issuetype := c.getOptString("issuetype", "Bug")
log.Debug("createMeta called") log.Debugf("createMeta called")
uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s&issuetypeNames=%s&expand=projects.issuetypes.fields", c.endpoint, project, url.QueryEscape(issuetype)) uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s&issuetypeNames=%s&expand=projects.issuetypes.fields", c.endpoint, project, url.QueryEscape(issuetype))
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -191,7 +191,7 @@ func (c *Cli) CmdCreateMeta() error {
if val, ok := data.(map[string]interface{})["projects"]; ok { if val, ok := data.(map[string]interface{})["projects"]; ok {
if len(val.([]interface{})) == 0 { if len(val.([]interface{})) == 0 {
err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to createmeta.", project, issuetype) err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to createmeta.", project, issuetype)
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} }
if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok { if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok {
@@ -203,7 +203,7 @@ func (c *Cli) CmdCreateMeta() error {
} }
func (c *Cli) CmdComponents(project string) error { func (c *Cli) CmdComponents(project string) error {
log.Debug("Components called") log.Debugf("Components called")
uri := fmt.Sprintf("%s/rest/api/2/project/%s/components", c.endpoint, project) uri := fmt.Sprintf("%s/rest/api/2/project/%s/components", c.endpoint, project)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -213,7 +213,7 @@ func (c *Cli) CmdComponents(project string) error {
} }
func (c *Cli) CmdTransitions(issue string) error { func (c *Cli) CmdTransitions(issue string) error {
log.Debug("Transitions called") log.Debugf("Transitions called")
c.Browse(issue) c.Browse(issue)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions", c.endpoint, issue)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
@@ -226,7 +226,7 @@ func (c *Cli) CmdTransitions(issue string) error {
func (c *Cli) CmdCreate() error { func (c *Cli) CmdCreate() error {
project := c.opts["project"].(string) project := c.opts["project"].(string)
issuetype := c.getOptString("issuetype", "Bug") issuetype := c.getOptString("issuetype", "Bug")
log.Debug("create called") log.Debugf("create called")
uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s&issuetypeNames=%s&expand=projects.issuetypes.fields", c.endpoint, project, url.QueryEscape(issuetype)) uri := fmt.Sprintf("%s/rest/api/2/issue/createmeta?projectKeys=%s&issuetypeNames=%s&expand=projects.issuetypes.fields", c.endpoint, project, url.QueryEscape(issuetype))
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
@@ -241,13 +241,13 @@ func (c *Cli) CmdCreate() error {
if val, ok := data.(map[string]interface{})["projects"]; ok { if val, ok := data.(map[string]interface{})["projects"]; ok {
if len(val.([]interface{})) == 0 { if len(val.([]interface{})) == 0 {
err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to create issue.", project, issuetype) err = fmt.Errorf("Project '%s' or issuetype '%s' unknown. Unable to create issue.", project, issuetype)
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} }
if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok { if val, ok = val.([]interface{})[0].(map[string]interface{})["issuetypes"]; ok {
if len(val.([]interface{})) == 0 { if len(val.([]interface{})) == 0 {
err = fmt.Errorf("Project '%s' does not support issuetype '%s'. Unable to create issue.", project, issuetype) err = fmt.Errorf("Project '%s' does not support issuetype '%s'. Unable to create issue.", project, issuetype)
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} }
issueData["meta"] = val.([]interface{})[0] issueData["meta"] = val.([]interface{})[0]
@@ -260,11 +260,11 @@ func (c *Cli) CmdCreate() error {
fmt.Sprintf("create-%s-", sanitizedType), fmt.Sprintf("create-%s-", sanitizedType),
issueData, issueData,
func(json string) error { func(json string) error {
log.Debug("JSON: %s", json) log.Debugf("JSON: %s", json)
uri := fmt.Sprintf("%s/rest/api/2/issue", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/issue", c.endpoint)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -293,7 +293,7 @@ func (c *Cli) CmdCreate() error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
}, },
@@ -302,7 +302,7 @@ func (c *Cli) CmdCreate() error {
} }
func (c *Cli) CmdIssueLinkTypes() error { func (c *Cli) CmdIssueLinkTypes() error {
log.Debug("Transitions called") log.Debugf("Transitions called")
uri := fmt.Sprintf("%s/rest/api/2/issueLinkType", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/issueLinkType", c.endpoint)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -312,7 +312,7 @@ func (c *Cli) CmdIssueLinkTypes() error {
} }
func (c *Cli) CmdBlocks(blocker string, issue string) error { func (c *Cli) CmdBlocks(blocker string, issue string) error {
log.Debug("blocks called") log.Debugf("blocks called")
json, err := jsonEncode(map[string]interface{}{ json, err := jsonEncode(map[string]interface{}{
"type": map[string]string{ "type": map[string]string{
@@ -331,8 +331,8 @@ func (c *Cli) CmdBlocks(blocker string, issue string) error {
uri := fmt.Sprintf("%s/rest/api/2/issueLink", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/issueLink", c.endpoint)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -348,14 +348,14 @@ func (c *Cli) CmdBlocks(blocker string, issue string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
} }
func (c *Cli) CmdDups(duplicate string, issue string) error { func (c *Cli) CmdDups(duplicate string, issue string) error {
log.Debug("dups called") log.Debugf("dups called")
json, err := jsonEncode(map[string]interface{}{ json, err := jsonEncode(map[string]interface{}{
"type": map[string]string{ "type": map[string]string{
@@ -374,8 +374,8 @@ func (c *Cli) CmdDups(duplicate string, issue string) error {
uri := fmt.Sprintf("%s/rest/api/2/issueLink", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/issueLink", c.endpoint)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -391,14 +391,14 @@ func (c *Cli) CmdDups(duplicate string, issue string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
} }
func (c *Cli) CmdWatch(issue string, watcher string, remove bool) error { func (c *Cli) CmdWatch(issue string, watcher string, remove bool) error {
log.Debug("watch called: watcher: %q, remove: %n", watcher, remove) log.Debugf("watch called: watcher: %q, remove: %n", watcher, remove)
var uri string var uri string
json, err := jsonEncode(watcher) json, err := jsonEncode(watcher)
@@ -408,11 +408,11 @@ func (c *Cli) CmdWatch(issue string, watcher string, remove bool) error {
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
if !remove { if !remove {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
} else { } else {
log.Debug("DELETE: %s", watcher) log.Debugf("DELETE: %s", watcher)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
} }
return nil return nil
} }
@@ -441,23 +441,23 @@ func (c *Cli) CmdWatch(issue string, watcher string, remove bool) error {
} else { } else {
err = fmt.Errorf("Unexpected Response From DELETE") err = fmt.Errorf("Unexpected Response From DELETE")
} }
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
} }
func (c *Cli) CmdVote(issue string, up bool) error { func (c *Cli) CmdVote(issue string, up bool) error {
log.Debug("vote called, with up: %n", up) log.Debugf("vote called, with up: %n", up)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/votes", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/votes", c.endpoint, issue)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
if up { if up {
log.Debug("POST: %s", "") log.Debugf("POST: %s", "")
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
} else { } else {
log.Debug("DELETE: %s", "") log.Debugf("DELETE: %s", "")
log.Debug("Dryrun mode, skipping DELETE") log.Debugf("Dryrun mode, skipping DELETE")
} }
return nil return nil
} }
@@ -484,14 +484,14 @@ func (c *Cli) CmdVote(issue string, up bool) error {
} else { } else {
err = fmt.Errorf("Unexpected Response From DELETE") err = fmt.Errorf("Unexpected Response From DELETE")
} }
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
} }
func (c *Cli) CmdTransition(issue string, trans string) error { func (c *Cli) CmdTransition(issue string, trans string) error {
log.Debug("transition called") log.Debugf("transition called")
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions?expand=transitions.fields", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/transitions?expand=transitions.fields", c.endpoint, issue)
data, err := responseToJson(c.get(uri)) data, err := responseToJson(c.get(uri))
if err != nil { if err != nil {
@@ -514,17 +514,17 @@ func (c *Cli) CmdTransition(issue string, trans string) error {
} }
if transId == "" { if transId == "" {
err := fmt.Errorf("Invalid Transition '%s', Available: %s", trans, strings.Join(found, ", ")) err := fmt.Errorf("Invalid Transition '%s', Available: %s", trans, strings.Join(found, ", "))
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} }
handlePost := func(json string) error { handlePost := func(json string) error {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
// os.Exit(0) // os.Exit(0)
uri = fmt.Sprintf("%s/rest/api/2/issue/%s/transitions", c.endpoint, issue) uri = fmt.Sprintf("%s/rest/api/2/issue/%s/transitions", c.endpoint, issue)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -540,7 +540,7 @@ func (c *Cli) CmdTransition(issue string, trans string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
@@ -569,14 +569,14 @@ func (c *Cli) CmdTransition(issue string, trans string) error {
} }
func (c *Cli) CmdComment(issue string) error { func (c *Cli) CmdComment(issue string) error {
log.Debug("comment called") log.Debugf("comment called")
handlePost := func(json string) error { handlePost := func(json string) error {
log.Debug("JSON: %s", json) log.Debugf("JSON: %s", json)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/comment", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/comment", c.endpoint, issue)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -594,7 +594,7 @@ func (c *Cli) CmdComment(issue string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
} }
@@ -619,7 +619,7 @@ func (c *Cli) CmdComment(issue string) error {
} }
func (c *Cli) CmdComponent(action string, project string, name string, desc string, lead string) error { func (c *Cli) CmdComponent(action string, project string, name string, desc string, lead string) error {
log.Debug("component called") log.Debugf("component called")
switch action { switch action {
case "add": case "add":
@@ -639,8 +639,8 @@ func (c *Cli) CmdComponent(action string, project string, name string, desc stri
uri := fmt.Sprintf("%s/rest/api/2/component", c.endpoint) uri := fmt.Sprintf("%s/rest/api/2/component", c.endpoint)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("POST: %s", json) log.Debugf("POST: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.post(uri, json) resp, err := c.post(uri, json)
@@ -655,25 +655,25 @@ func (c *Cli) CmdComponent(action string, project string, name string, desc stri
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From POST") err := fmt.Errorf("Unexpected Response From POST")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
} }
func (c *Cli) CmdLabels(action string, issue string, labels []string) error { func (c *Cli) CmdLabels(action string, issue string, labels []string) error {
log.Debug("label called") log.Debugf("label called")
if action != "add" && action != "remove" && action != "set" { if action != "add" && action != "remove" && action != "set" {
return fmt.Errorf("action must be 'add', 'set' or 'remove': %q is invalid", action) return fmt.Errorf("action must be 'add', 'set' or 'remove': %q is invalid", action)
} }
handlePut := func(json string) error { handlePut := func(json string) error {
log.Debug("JSON: %s", json) log.Debugf("JSON: %s", json)
uri := fmt.Sprintf("%s/rest/api/2/issue/%s", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s", c.endpoint, issue)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("PUT: %s", json) log.Debugf("PUT: %s", json)
log.Debug("Dryrun mode, skipping POST") log.Debugf("Dryrun mode, skipping POST")
return nil return nil
} }
resp, err := c.put(uri, json) resp, err := c.put(uri, json)
@@ -691,7 +691,7 @@ func (c *Cli) CmdLabels(action string, issue string, labels []string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From PUT") err := fmt.Errorf("Unexpected Response From PUT")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
} }
@@ -727,7 +727,7 @@ func (c *Cli) CmdLabels(action string, issue string, labels []string) error {
} }
func (c *Cli) CmdAssign(issue string, user string) error { func (c *Cli) CmdAssign(issue string, user string) error {
log.Debug("assign called") log.Debugf("assign called")
json, err := jsonEncode(map[string]interface{}{ json, err := jsonEncode(map[string]interface{}{
"name": user, "name": user,
@@ -738,8 +738,8 @@ func (c *Cli) CmdAssign(issue string, user string) error {
uri := fmt.Sprintf("%s/rest/api/2/issue/%s/assignee", c.endpoint, issue) uri := fmt.Sprintf("%s/rest/api/2/issue/%s/assignee", c.endpoint, issue)
if c.getOptBool("dryrun", false) { if c.getOptBool("dryrun", false) {
log.Debug("PUT: %s", json) log.Debugf("PUT: %s", json)
log.Debug("Dryrun mode, skipping PUT") log.Debugf("Dryrun mode, skipping PUT")
return nil return nil
} }
resp, err := c.put(uri, json) resp, err := c.put(uri, json)
@@ -755,7 +755,7 @@ func (c *Cli) CmdAssign(issue string, user string) error {
logBuffer := bytes.NewBuffer(make([]byte, 0)) logBuffer := bytes.NewBuffer(make([]byte, 0))
resp.Write(logBuffer) resp.Write(logBuffer)
err := fmt.Errorf("Unexpected Response From PUT") err := fmt.Errorf("Unexpected Response From PUT")
log.Error("%s:\n%s", err, logBuffer) log.Errorf("%s:\n%s", err, logBuffer)
return err return err
} }
return nil return nil
@@ -777,11 +777,11 @@ func (c *Cli) CmdExportTemplates() error {
continue continue
} }
if fh, err := os.OpenFile(templateFile, os.O_WRONLY|os.O_CREATE, 0644); err != nil { if fh, err := os.OpenFile(templateFile, os.O_WRONLY|os.O_CREATE, 0644); err != nil {
log.Error("Failed to open %s for writing: %s", templateFile, err) log.Errorf("Failed to open %s for writing: %s", templateFile, err)
return err return err
} else { } else {
defer fh.Close() defer fh.Close()
log.Notice("Creating %s", templateFile) log.Noticef("Creating %s", templateFile)
fh.Write([]byte(template)) fh.Write([]byte(template))
} }
} }
@@ -789,7 +789,7 @@ func (c *Cli) CmdExportTemplates() error {
} }
func (c *Cli) CmdRequest(uri, content string) (err error) { func (c *Cli) CmdRequest(uri, content string) (err error) {
log.Debug("request called") log.Debugf("request called")
if !strings.HasPrefix(uri, "http") { if !strings.HasPrefix(uri, "http") {
uri = fmt.Sprintf("%s%s", c.endpoint, uri) uri = fmt.Sprintf("%s%s", c.endpoint, uri)
+18 -18
View File
@@ -5,8 +5,8 @@ import (
"fmt" "fmt"
"github.com/Netflix-Skunkworks/go-jira" "github.com/Netflix-Skunkworks/go-jira"
"github.com/coryb/optigo" "github.com/coryb/optigo"
"github.com/op/go-logging"
"gopkg.in/coryb/yaml.v2" "gopkg.in/coryb/yaml.v2"
"gopkg.in/op/go-logging.v1"
"io/ioutil" "io/ioutil"
"os" "os"
"os/exec" "os/exec"
@@ -217,7 +217,7 @@ Command Options:
}) })
if err := op.ProcessAll(os.Args[1:]); err != nil { if err := op.ProcessAll(os.Args[1:]); err != nil {
log.Error("%s", err) log.Errorf("%s", err)
usage(false) usage(false)
} }
args := op.Args args := op.Args
@@ -258,36 +258,36 @@ Command Options:
// apply defaults // apply defaults
for k, v := range defaults { for k, v := range defaults {
if _, ok := opts[k]; !ok { if _, ok := opts[k]; !ok {
log.Debug("Setting %q to %#v from defaults", k, v) log.Debugf("Setting %q to %#v from defaults", k, v)
opts[k] = v opts[k] = v
} }
} }
log.Debug("opts: %v", opts) log.Debugf("opts: %v", opts)
log.Debug("args: %v", args) log.Debugf("args: %v", args)
if _, ok := opts["endpoint"]; !ok { if _, ok := opts["endpoint"]; !ok {
log.Error("endpoint option required. Either use --endpoint or set a endpoint option in your ~/.jira.d/config.yml file") log.Errorf("endpoint option required. Either use --endpoint or set a endpoint option in your ~/.jira.d/config.yml file")
os.Exit(1) os.Exit(1)
} }
c := jira.New(opts) c := jira.New(opts)
log.Debug("opts: %s", opts) log.Debugf("opts: %s", opts)
setEditing := func(dflt bool) { setEditing := func(dflt bool) {
log.Debug("Default Editing: %t", dflt) log.Debugf("Default Editing: %t", dflt)
if dflt { if dflt {
if val, ok := opts["noedit"].(bool); ok && val { if val, ok := opts["noedit"].(bool); ok && val {
log.Debug("Setting edit = false") log.Debugf("Setting edit = false")
opts["edit"] = false opts["edit"] = false
} else { } else {
log.Debug("Setting edit = true") log.Debugf("Setting edit = true")
opts["edit"] = true opts["edit"] = true
} }
} else { } else {
if _, ok := opts["edit"].(bool); !ok { if _, ok := opts["edit"].(bool); !ok {
log.Debug("Setting edit = %t", dflt) log.Debugf("Setting edit = %t", dflt)
opts["edit"] = dflt opts["edit"] = dflt
} }
} }
@@ -295,7 +295,7 @@ Command Options:
requireArgs := func(count int) { requireArgs := func(count int) {
if len(args) < count { if len(args) < count {
log.Error("Not enough arguments. %d required, %d provided", count, len(args)) log.Errorf("Not enough arguments. %d required, %d provided", count, len(args))
usage(false) usage(false)
} }
} }
@@ -446,12 +446,12 @@ Command Options:
} }
err = c.CmdRequest(args[0], data) err = c.CmdRequest(args[0], data)
default: default:
log.Error("Unknown command %s", command) log.Errorf("Unknown command %s", command)
os.Exit(1) os.Exit(1)
} }
if err != nil { if err != nil {
log.Error("%s", err) log.Errorf("%s", err)
os.Exit(1) os.Exit(1)
} }
os.Exit(0) os.Exit(0)
@@ -459,7 +459,7 @@ Command Options:
func parseYaml(file string, opts map[string]interface{}) { func parseYaml(file string, opts map[string]interface{}) {
if fh, err := ioutil.ReadFile(file); err == nil { if fh, err := ioutil.ReadFile(file); err == nil {
log.Debug("Found Config file: %s", file) log.Debugf("Found Config file: %s", file)
yaml.Unmarshal(fh, &opts) yaml.Unmarshal(fh, &opts)
} }
} }
@@ -499,21 +499,21 @@ func loadConfigs(opts map[string]interface{}) {
if stat.Mode()&0111 == 0 { if stat.Mode()&0111 == 0 {
parseYaml(file, tmp) parseYaml(file, tmp)
} else { } else {
log.Debug("Found Executable Config file: %s", file) log.Debugf("Found Executable Config file: %s", file)
// it is executable, so run it and try to parse the output // it is executable, so run it and try to parse the output
cmd := exec.Command(file) cmd := exec.Command(file)
stdout := bytes.NewBufferString("") stdout := bytes.NewBufferString("")
cmd.Stdout = stdout cmd.Stdout = stdout
cmd.Stderr = bytes.NewBufferString("") cmd.Stderr = bytes.NewBufferString("")
if err := cmd.Run(); err != nil { if err := cmd.Run(); err != nil {
log.Error("%s is exectuable, but it failed to execute: %s\n%s", file, err, cmd.Stderr) log.Errorf("%s is exectuable, but it failed to execute: %s\n%s", file, err, cmd.Stderr)
os.Exit(1) os.Exit(1)
} }
yaml.Unmarshal(stdout.Bytes(), &tmp) yaml.Unmarshal(stdout.Bytes(), &tmp)
} }
for k, v := range tmp { for k, v := range tmp {
if _, ok := opts[k]; !ok { if _, ok := opts[k]; !ok {
log.Debug("Setting %q to %#v from %s", k, v, file) log.Debugf("Setting %q to %#v from %s", k, v, file)
opts[k] = v opts[k] = v
} }
} }
+13 -13
View File
@@ -58,7 +58,7 @@ func readFile(file string) string {
var bytes []byte var bytes []byte
var err error var err error
if bytes, err = ioutil.ReadFile(file); err != nil { if bytes, err = ioutil.ReadFile(file); err != nil {
log.Error("Failed to read file %s: %s", file, err) log.Errorf("Failed to read file %s: %s", file, err)
os.Exit(1) os.Exit(1)
} }
return string(bytes) return string(bytes)
@@ -195,11 +195,11 @@ func runTemplate(templateContent string, data interface{}, out io.Writer) error
}, },
} }
if tmpl, err := template.New("template").Funcs(funcs).Parse(templateContent); err != nil { if tmpl, err := template.New("template").Funcs(funcs).Parse(templateContent); err != nil {
log.Error("Failed to parse template: %s", err) log.Errorf("Failed to parse template: %s", err)
return err return err
} else { } else {
if err := tmpl.Execute(out, data); err != nil { if err := tmpl.Execute(out, data); err != nil {
log.Error("Failed to execute template: %s", err) log.Errorf("Failed to execute template: %s", err)
return err return err
} }
} }
@@ -215,7 +215,7 @@ func responseToJson(resp *http.Response, err error) (interface{}, error) {
if resp.StatusCode == 400 { if resp.StatusCode == 400 {
if val, ok := data.(map[string]interface{})["errorMessages"]; ok { if val, ok := data.(map[string]interface{})["errorMessages"]; ok {
for _, errMsg := range val.([]interface{}) { for _, errMsg := range val.([]interface{}) {
log.Error("%s", errMsg) log.Errorf("%s", errMsg)
} }
} }
} }
@@ -228,7 +228,7 @@ func jsonDecode(io io.Reader) interface{} {
var data interface{} var data interface{}
err = json.Unmarshal(content, &data) err = json.Unmarshal(content, &data)
if err != nil { if err != nil {
log.Error("JSON Parse Error: %s from %s", err, content) log.Errorf("JSON Parse Error: %s from %s", err, content)
} }
return data return data
} }
@@ -239,7 +239,7 @@ func jsonEncode(data interface{}) (string, error) {
err := enc.Encode(data) err := enc.Encode(data)
if err != nil { if err != nil {
log.Error("Failed to encode data %s: %s", data, err) log.Errorf("Failed to encode data %s: %s", data, err)
return "", err return "", err
} }
return buffer.String(), nil return buffer.String(), nil
@@ -249,7 +249,7 @@ func jsonWrite(file string, data interface{}) {
fh, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) fh, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
defer fh.Close() defer fh.Close()
if err != nil { if err != nil {
log.Error("Failed to open %s: %s", file, err) log.Errorf("Failed to open %s: %s", file, err)
os.Exit(1) os.Exit(1)
} }
enc := json.NewEncoder(fh) enc := json.NewEncoder(fh)
@@ -260,11 +260,11 @@ func yamlWrite(file string, data interface{}) {
fh, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) fh, err := os.OpenFile(file, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
defer fh.Close() defer fh.Close()
if err != nil { if err != nil {
log.Error("Failed to open %s: %s", file, err) log.Errorf("Failed to open %s: %s", file, err)
os.Exit(1) os.Exit(1)
} }
if out, err := yaml.Marshal(data); err != nil { if out, err := yaml.Marshal(data); err != nil {
log.Error("Failed to marshal yaml %v: %s", data, err) log.Errorf("Failed to marshal yaml %v: %s", data, err)
os.Exit(1) os.Exit(1)
} else { } else {
fh.Write(out) fh.Write(out)
@@ -306,7 +306,7 @@ func yamlFixup(data interface{}) (interface{}, error) {
} }
default: default:
err := fmt.Errorf("YAML: key %s is type '%T', require 'string'", key, k) err := fmt.Errorf("YAML: key %s is type '%T', require 'string'", key, k)
log.Error("%s", err) log.Errorf("%s", err)
return nil, err return nil, err
} }
} }
@@ -343,16 +343,16 @@ func yamlFixup(data interface{}) (interface{}, error) {
func mkdir(dir string) error { func mkdir(dir string) error {
if stat, err := os.Stat(dir); err != nil && !os.IsNotExist(err) { if stat, err := os.Stat(dir); err != nil && !os.IsNotExist(err) {
log.Error("Failed to stat %s: %s", dir, err) log.Errorf("Failed to stat %s: %s", dir, err)
return err return err
} else if err == nil && !stat.IsDir() { } else if err == nil && !stat.IsDir() {
err := fmt.Errorf("%s exists and is not a directory!", dir) err := fmt.Errorf("%s exists and is not a directory!", dir)
log.Error("%s", err) log.Errorf("%s", err)
return err return err
} else { } else {
// dir does not exist, so try to create it // dir does not exist, so try to create it
if err := os.MkdirAll(dir, 0755); err != nil { if err := os.MkdirAll(dir, 0755); err != nil {
log.Error("Failed to mkdir -p %s: %s", dir, err) log.Errorf("Failed to mkdir -p %s: %s", dir, err)
return err return err
} }
} }