UserID: userID, | UserID: userID, | ||||
GitAlternativeObjectDirectories: os.Getenv(private.GitAlternativeObjectDirectories), | GitAlternativeObjectDirectories: os.Getenv(private.GitAlternativeObjectDirectories), | ||||
GitObjectDirectory: os.Getenv(private.GitObjectDirectory), | GitObjectDirectory: os.Getenv(private.GitObjectDirectory), | ||||
GitQuarantinePath: os.Getenv(private.GitQuarantinePath), | |||||
ProtectedBranchID: prID, | ProtectedBranchID: prID, | ||||
}) | }) | ||||
switch statusCode { | switch statusCode { |
UserName string | UserName string | ||||
GitObjectDirectory string | GitObjectDirectory string | ||||
GitAlternativeObjectDirectories string | GitAlternativeObjectDirectories string | ||||
GitQuarantinePath string | |||||
ProtectedBranchID int64 | ProtectedBranchID int64 | ||||
} | } | ||||
// HookPreReceive check whether the provided commits are allowed | // HookPreReceive check whether the provided commits are allowed | ||||
func HookPreReceive(ownerName, repoName string, opts HookOptions) (int, string) { | 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(ownerName), | ||||
url.PathEscape(repoName), | url.PathEscape(repoName), | ||||
url.QueryEscape(opts.OldCommitID), | url.QueryEscape(opts.OldCommitID), | ||||
opts.UserID, | opts.UserID, | ||||
url.QueryEscape(opts.GitObjectDirectory), | url.QueryEscape(opts.GitObjectDirectory), | ||||
url.QueryEscape(opts.GitAlternativeObjectDirectories), | url.QueryEscape(opts.GitAlternativeObjectDirectories), | ||||
url.QueryEscape(opts.GitQuarantinePath), | |||||
opts.ProtectedBranchID, | opts.ProtectedBranchID, | ||||
) | ) | ||||
userID := ctx.QueryInt64("userID") | userID := ctx.QueryInt64("userID") | ||||
gitObjectDirectory := ctx.QueryTrim("gitObjectDirectory") | gitObjectDirectory := ctx.QueryTrim("gitObjectDirectory") | ||||
gitAlternativeObjectDirectories := ctx.QueryTrim("gitAlternativeObjectDirectories") | gitAlternativeObjectDirectories := ctx.QueryTrim("gitAlternativeObjectDirectories") | ||||
gitQuarantinePath := ctx.QueryTrim("gitQuarantinePath") | |||||
prID := ctx.QueryInt64("prID") | prID := ctx.QueryInt64("prID") | ||||
branchName := strings.TrimPrefix(refFullName, git.BranchPrefix) | branchName := strings.TrimPrefix(refFullName, git.BranchPrefix) | ||||
// detect force push | // detect force push | ||||
if git.EmptySHA != oldCommitID { | 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) | output, err := git.NewCommand("rev-list", "--max-count=1", oldCommitID, "^"+newCommitID).RunInDirWithEnv(repo.RepoPath(), env) | ||||
if err != nil { | if err != nil { |