1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2024-12-22 12:54:53 -05:00

Attempt to fix hook problem (#7854)

This commit is contained in:
zeripath 2019-08-14 10:25:05 +01:00 committed by Lauris BH
parent 7eed11e5e9
commit def84840db
3 changed files with 18 additions and 6 deletions

View file

@ -96,6 +96,7 @@ func runHookPreReceive(c *cli.Context) error {
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 {

View file

@ -29,12 +29,13 @@ type HookOptions struct {
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),
@ -43,6 +44,7 @@ func HookPreReceive(ownerName, repoName string, opts HookOptions) (int, string)
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,
) )

View file

@ -31,6 +31,7 @@ func HookPreReceive(ctx *macaron.Context) {
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)
@ -63,11 +64,19 @@ func HookPreReceive(ctx *macaron.Context) {
// detect force push // detect force push
if git.EmptySHA != oldCommitID { if git.EmptySHA != oldCommitID {
env := append(os.Environ(), env := os.Environ()
private.GitAlternativeObjectDirectories+"="+gitAlternativeObjectDirectories, if gitAlternativeObjectDirectories != "" {
private.GitObjectDirectory+"="+gitObjectDirectory, env = append(env,
private.GitQuarantinePath+"="+gitObjectDirectory, 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 {