Skip to content

Commit 6ca91f5

Browse files
User facing messages for AGit errors (#33012)
Adds user facing messages to errors when submitting agit pull request Tries to highlight the returned error more and fixes agit suggestion to create PR on first submission. Closes: #32965 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent c79adf0 commit 6ca91f5

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

cmd/serv.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ func fail(ctx context.Context, userMessage, logMsgFmt string, args ...any) error
104104
// There appears to be a chance to cause a zombie process and failure to read the Exit status
105105
// if nothing is outputted on stdout.
106106
_, _ = fmt.Fprintln(os.Stdout, "")
107-
_, _ = fmt.Fprintln(os.Stderr, "Gitea:", userMessage)
107+
// add extra empty lines to separate our message from other git errors to get more attention
108+
_, _ = fmt.Fprintln(os.Stderr, "error:")
109+
_, _ = fmt.Fprintln(os.Stderr, "error:", userMessage)
110+
_, _ = fmt.Fprintln(os.Stderr, "error:")
108111

109112
if logMsgFmt != "" {
110113
logMsg := fmt.Sprintf(logMsgFmt, args...)

routers/private/hook_proc_receive.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
package private
55

66
import (
7+
"errors"
78
"net/http"
89

9-
repo_model "code.gitea.io/gitea/models/repo"
10+
issues_model "code.gitea.io/gitea/models/issues"
11+
user_model "code.gitea.io/gitea/models/user"
1012
"code.gitea.io/gitea/modules/git"
1113
"code.gitea.io/gitea/modules/log"
1214
"code.gitea.io/gitea/modules/private"
@@ -25,10 +27,16 @@ func HookProcReceive(ctx *gitea_context.PrivateContext) {
2527

2628
results, err := agit.ProcReceive(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, opts)
2729
if err != nil {
28-
if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) {
29-
ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error())
30+
if errors.Is(err, issues_model.ErrMustCollaborator) {
31+
ctx.JSON(http.StatusUnauthorized, private.Response{
32+
Err: err.Error(), UserMsg: "You must be a collaborator to create pull request.",
33+
})
34+
} else if errors.Is(err, user_model.ErrBlockedUser) {
35+
ctx.JSON(http.StatusUnauthorized, private.Response{
36+
Err: err.Error(), UserMsg: "Cannot create pull request because you are blocked by the repository owner.",
37+
})
3038
} else {
31-
log.Error(err.Error())
39+
log.Error("agit.ProcReceive failed: %v", err)
3240
ctx.JSON(http.StatusInternalServerError, private.Response{
3341
Err: err.Error(),
3442
})

services/agit/agit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.
153153
OriginalRef: opts.RefFullNames[i],
154154
OldOID: objectFormat.EmptyObjectID().String(),
155155
NewOID: opts.NewCommitIDs[i],
156-
IsCreatePR: true,
156+
IsCreatePR: false, // AGit always creates a pull request so there is no point in prompting user to create one
157157
URL: fmt.Sprintf("%s/pulls/%d", repo.HTMLURL(), pr.Index),
158158
ShouldShowMessage: setting.Git.PullRequestPushMessage && repo.AllowsPulls(ctx),
159159
HeadBranch: headBranch,

0 commit comments

Comments
 (0)