diff options
author | 无闻 <u@gogs.io> | 2017-11-18 21:45:29 -0500 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2017-11-18 21:45:29 -0500 |
commit | 9362b9fdfe41788bc600a5bc13f2df10ec2222e6 (patch) | |
tree | c895c139e87b7595f9cfb93b4c55cc06c4e28f2c | |
parent | f48921c256c229ea02c816d0f517a8797a3de40d (diff) |
cmd/hook: fix custom hook cannot be executed on Windows (#4255)
This solution still requires the server installed git-bash.
-rw-r--r-- | cmd/hook.go | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/cmd/hook.go b/cmd/hook.go index f8b96970..dd5a4f23 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -127,7 +127,7 @@ func runHookPreReceive(c *cli.Context) error { } // Check force push - output, err := git.NewCommand("rev-list", oldCommitID, "^"+newCommitID). + output, err := git.NewCommand("rev-list", "--max-count=1", oldCommitID, "^"+newCommitID). RunInDir(models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME))) if err != nil { fail("Internal error", "Fail to detect force push: %v", err) @@ -141,7 +141,12 @@ func runHookPreReceive(c *cli.Context) error { return nil } - hookCmd := exec.Command(customHooksPath) + var hookCmd *exec.Cmd + if setting.IsWindows { + hookCmd = exec.Command("bash.exe", "custom_hooks/pre-receive") + } else { + hookCmd = exec.Command(customHooksPath) + } hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME)) hookCmd.Stdout = os.Stdout hookCmd.Stdin = buf @@ -170,7 +175,12 @@ func runHookUpdate(c *cli.Context) error { return nil } - hookCmd := exec.Command(customHooksPath, args...) + var hookCmd *exec.Cmd + if setting.IsWindows { + hookCmd = exec.Command("bash.exe", append([]string{"custom_hooks/update"}, args...)...) + } else { + hookCmd = exec.Command(customHooksPath, args...) + } hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME)) hookCmd.Stdout = os.Stdout hookCmd.Stdin = os.Stdin @@ -250,7 +260,12 @@ func runHookPostReceive(c *cli.Context) error { return nil } - hookCmd := exec.Command(customHooksPath) + var hookCmd *exec.Cmd + if setting.IsWindows { + hookCmd = exec.Command("bash.exe", "custom_hooks/post-receive") + } else { + hookCmd = exec.Command(customHooksPath) + } hookCmd.Dir = models.RepoPath(os.Getenv(http.ENV_REPO_OWNER_NAME), os.Getenv(http.ENV_REPO_NAME)) hookCmd.Stdout = os.Stdout hookCmd.Stdin = buf |