aboutsummaryrefslogtreecommitdiff
path: root/cmd/hook.go
diff options
context:
space:
mode:
author无闻 <u@gogs.io>2017-11-18 21:45:29 -0500
committer无闻 <u@gogs.io>2017-11-18 21:45:29 -0500
commit9362b9fdfe41788bc600a5bc13f2df10ec2222e6 (patch)
treec895c139e87b7595f9cfb93b4c55cc06c4e28f2c /cmd/hook.go
parentf48921c256c229ea02c816d0f517a8797a3de40d (diff)
cmd/hook: fix custom hook cannot be executed on Windows (#4255)
This solution still requires the server installed git-bash.
Diffstat (limited to 'cmd/hook.go')
-rw-r--r--cmd/hook.go23
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