@@ -96,6 +96,7 @@ func runHookPreReceive(c *cli.Context) error { | |||
UserID: userID, | |||
GitAlternativeObjectDirectories: os.Getenv(private.GitAlternativeObjectDirectories), | |||
GitObjectDirectory: os.Getenv(private.GitObjectDirectory), | |||
GitQuarantinePath: os.Getenv(private.GitQuarantinePath), | |||
ProtectedBranchID: prID, | |||
}) | |||
switch statusCode { |
@@ -29,12 +29,13 @@ type HookOptions struct { | |||
UserName string | |||
GitObjectDirectory string | |||
GitAlternativeObjectDirectories string | |||
GitQuarantinePath string | |||
ProtectedBranchID int64 | |||
} | |||
// HookPreReceive check whether the provided commits are allowed | |||
func HookPreReceive(ownerName, repoName string, opts HookOptions) (int, string) { | |||
reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/pre-receive/%s/%s?old=%s&new=%s&ref=%s&userID=%d&gitObjectDirectory=%s&gitAlternativeObjectDirectories=%s&prID=%d", | |||
reqURL := setting.LocalURL + fmt.Sprintf("api/internal/hook/pre-receive/%s/%s?old=%s&new=%s&ref=%s&userID=%d&gitObjectDirectory=%s&gitAlternativeObjectDirectories=%s&gitQuarantinePath=%s&prID=%d", | |||
url.PathEscape(ownerName), | |||
url.PathEscape(repoName), | |||
url.QueryEscape(opts.OldCommitID), | |||
@@ -43,6 +44,7 @@ func HookPreReceive(ownerName, repoName string, opts HookOptions) (int, string) | |||
opts.UserID, | |||
url.QueryEscape(opts.GitObjectDirectory), | |||
url.QueryEscape(opts.GitAlternativeObjectDirectories), | |||
url.QueryEscape(opts.GitQuarantinePath), | |||
opts.ProtectedBranchID, | |||
) | |||
@@ -31,6 +31,7 @@ func HookPreReceive(ctx *macaron.Context) { | |||
userID := ctx.QueryInt64("userID") | |||
gitObjectDirectory := ctx.QueryTrim("gitObjectDirectory") | |||
gitAlternativeObjectDirectories := ctx.QueryTrim("gitAlternativeObjectDirectories") | |||
gitQuarantinePath := ctx.QueryTrim("gitQuarantinePath") | |||
prID := ctx.QueryInt64("prID") | |||
branchName := strings.TrimPrefix(refFullName, git.BranchPrefix) | |||
@@ -63,11 +64,19 @@ func HookPreReceive(ctx *macaron.Context) { | |||
// detect force push | |||
if git.EmptySHA != oldCommitID { | |||
env := append(os.Environ(), | |||
private.GitAlternativeObjectDirectories+"="+gitAlternativeObjectDirectories, | |||
private.GitObjectDirectory+"="+gitObjectDirectory, | |||
private.GitQuarantinePath+"="+gitObjectDirectory, | |||
) | |||
env := os.Environ() | |||
if gitAlternativeObjectDirectories != "" { | |||
env = append(env, | |||
private.GitAlternativeObjectDirectories+"="+gitAlternativeObjectDirectories) | |||
} | |||
if gitObjectDirectory != "" { | |||
env = append(env, | |||
private.GitObjectDirectory+"="+gitObjectDirectory) | |||
} | |||
if gitQuarantinePath != "" { | |||
env = append(env, | |||
private.GitQuarantinePath+"="+gitQuarantinePath) | |||
} | |||
output, err := git.NewCommand("rev-list", "--max-count=1", oldCommitID, "^"+newCommitID).RunInDirWithEnv(repo.RepoPath(), env) | |||
if err != nil { |