diff --git a/cmd/hook.go b/cmd/hook.go index f8b96970f..dd5a4f236 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