diff --git a/cmd/serv.go b/cmd/serv.go index d2271b68d2..476fd9a2ea 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -104,7 +104,10 @@ func fail(ctx context.Context, userMessage, logMsgFmt string, args ...any) error // There appears to be a chance to cause a zombie process and failure to read the Exit status // if nothing is outputted on stdout. _, _ = fmt.Fprintln(os.Stdout, "") - _, _ = fmt.Fprintln(os.Stderr, "Gitea:", userMessage) + // add extra empty lines to separate our message from other git errors to get more attention + _, _ = fmt.Fprintln(os.Stderr, "error:") + _, _ = fmt.Fprintln(os.Stderr, "error:", userMessage) + _, _ = fmt.Fprintln(os.Stderr, "error:") if logMsgFmt != "" { logMsg := fmt.Sprintf(logMsgFmt, args...) diff --git a/routers/private/hook_proc_receive.go b/routers/private/hook_proc_receive.go index efb3f5831e..4076a57dba 100644 --- a/routers/private/hook_proc_receive.go +++ b/routers/private/hook_proc_receive.go @@ -4,9 +4,11 @@ package private import ( + "errors" "net/http" - repo_model "code.gitea.io/gitea/models/repo" + issues_model "code.gitea.io/gitea/models/issues" + user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/private" @@ -25,10 +27,16 @@ func HookProcReceive(ctx *gitea_context.PrivateContext) { results, err := agit.ProcReceive(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, opts) if err != nil { - if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) { - ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error()) + if errors.Is(err, issues_model.ErrMustCollaborator) { + ctx.JSON(http.StatusUnauthorized, private.Response{ + Err: err.Error(), UserMsg: "You must be a collaborator to create pull request.", + }) + } else if errors.Is(err, user_model.ErrBlockedUser) { + ctx.JSON(http.StatusUnauthorized, private.Response{ + Err: err.Error(), UserMsg: "Cannot create pull request because you are blocked by the repository owner.", + }) } else { - log.Error(err.Error()) + log.Error("agit.ProcReceive failed: %v", err) ctx.JSON(http.StatusInternalServerError, private.Response{ Err: err.Error(), }) diff --git a/services/agit/agit.go b/services/agit/agit.go index 83b12dfcdb..897e825012 100644 --- a/services/agit/agit.go +++ b/services/agit/agit.go @@ -153,7 +153,7 @@ func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git. OriginalRef: opts.RefFullNames[i], OldOID: objectFormat.EmptyObjectID().String(), NewOID: opts.NewCommitIDs[i], - IsCreatePR: true, + IsCreatePR: false, // AGit always creates a pull request so there is no point in prompting user to create one URL: fmt.Sprintf("%s/pulls/%d", repo.HTMLURL(), pr.Index), ShouldShowMessage: setting.Git.PullRequestPushMessage && repo.AllowsPulls(ctx), HeadBranch: headBranch,