diff --git a/webhook.go b/webhook.go index 6a258c41..26872ed0 100644 --- a/webhook.go +++ b/webhook.go @@ -581,16 +581,16 @@ func handleHook(h *hook.Hook, rid string, headers, query, payload *map[string]in var errors []error // check the command exists - cmdPath, err := exec.LookPath(h.ExecuteCommand) - if err != nil { - // give a last chance, maybe is a relative path - relativeToCwd := filepath.Join(h.CommandWorkingDirectory, h.ExecuteCommand) - // check the command exists - cmdPath, err = exec.LookPath(relativeToCwd) + var lookpath string + if filepath.IsAbs(h.ExecuteCommand) || h.CommandWorkingDirectory == "" { + lookpath = h.ExecuteCommand + } else { + lookpath = filepath.Join(h.CommandWorkingDirectory, h.ExecuteCommand) } + cmdPath, err := exec.LookPath(lookpath) if err != nil { - log.Printf("[%s] error locating command: '%s'", rid, h.ExecuteCommand) + log.Printf("[%s] error in %s", rid, err) // check if parameters specified in execute-command by mistake if strings.IndexByte(h.ExecuteCommand, ' ') != -1 { diff --git a/webhook_test.go b/webhook_test.go index 4671c245..353d22d0 100644 --- a/webhook_test.go +++ b/webhook_test.go @@ -720,7 +720,7 @@ env: HOOK_head_commit.timestamp=2013-03-12T08:14:29-07:00 // Check logs {"static params should pass", "static-params-ok", nil, "POST", nil, "application/json", `{}`, http.StatusOK, "arg: passed\n", `(?s)command output: arg: passed`}, - {"command with space logs warning", "warn-on-space", nil, "POST", nil, "application/json", `{}`, http.StatusInternalServerError, "Error occurred while executing the hook's command. Please check your logs for more details.", `(?s)error locating command.*use 'pass[-]arguments[-]to[-]command' to specify args`}, + {"command with space logs warning", "warn-on-space", nil, "POST", nil, "application/json", `{}`, http.StatusInternalServerError, "Error occurred while executing the hook's command. Please check your logs for more details.", `(?s)error in exec:.*use 'pass[-]arguments[-]to[-]command' to specify args`}, {"unsupported content type error", "github", nil, "POST", map[string]string{"Content-Type": "nonexistent/format"}, "application/json", `{}`, http.StatusBadRequest, `Hook rules were not satisfied.`, `(?s)error parsing body payload due to unsupported content type header:`}, }