From 7712d78793702408da53146aca78e35094d8b55e Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Fri, 27 Dec 2024 20:59:48 +0100 Subject: [PATCH 1/6] Add error prefix in git remote Return user facing errors in agit for block and collaborator --- cmd/serv.go | 4 +++- routers/private/hook_proc_receive.go | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cmd/serv.go b/cmd/serv.go index d2271b68d29e5..39b351fbcc462 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -104,7 +104,9 @@ 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) + _, _ = 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 efb3f5831e427..8e29240a80ea7 100644 --- a/routers/private/hook_proc_receive.go +++ b/routers/private/hook_proc_receive.go @@ -4,9 +4,12 @@ package private import ( + "errors" "net/http" + issues_model "code.gitea.io/gitea/models/issues" repo_model "code.gitea.io/gitea/models/repo" + 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" @@ -27,6 +30,14 @@ func HookProcReceive(ctx *gitea_context.PrivateContext) { if err != nil { if repo_model.IsErrUserDoesNotHaveAccessToRepo(err) { ctx.Error(http.StatusBadRequest, "UserDoesNotHaveAccessToRepo", err.Error()) + } else if errors.Is(err, issues_model.ErrMustCollaborator) { + ctx.JSON(http.StatusUnauthorized, private.Response{ + Err: err.Error(), UserMsg: string(ctx.Tr("repo.pulls.new.must_collaborator")), + }) + } else if errors.Is(err, user_model.ErrBlockedUser) { + ctx.JSON(http.StatusUnauthorized, private.Response{ + Err: err.Error(), UserMsg: string(ctx.Tr("repo.pulls.new.blocked_user")), + }) } else { log.Error(err.Error()) ctx.JSON(http.StatusInternalServerError, private.Response{ From 2d57d461ee4046a1a576b6451fbdd151a9521b64 Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Fri, 24 Jan 2025 00:10:19 +0100 Subject: [PATCH 2/6] fix: agit prompt to create a pull request --- cmd/hook.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/hook.go b/cmd/hook.go index 578380ab40db6..0eb5bb25da0bf 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -705,7 +705,8 @@ Gitea or set your environment appropriately.`, "") if err == nil { for _, res := range resp.Results { - hookPrintResult(res.ShouldShowMessage, res.IsCreatePR, res.HeadBranch, res.URL) + // AGit always creates a pull request so there is no point in prompting user to create one + hookPrintResult(res.ShouldShowMessage, false, res.HeadBranch, res.URL) } } From 54cb733f016ff69788fdaa611cd0efeae6be0604 Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Fri, 24 Jan 2025 17:09:00 +0100 Subject: [PATCH 3/6] disable create message in services instead of hook --- cmd/hook.go | 3 +-- services/agit/agit.go | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmd/hook.go b/cmd/hook.go index 0eb5bb25da0bf..578380ab40db6 100644 --- a/cmd/hook.go +++ b/cmd/hook.go @@ -705,8 +705,7 @@ Gitea or set your environment appropriately.`, "") if err == nil { for _, res := range resp.Results { - // AGit always creates a pull request so there is no point in prompting user to create one - hookPrintResult(res.ShouldShowMessage, false, res.HeadBranch, res.URL) + hookPrintResult(res.ShouldShowMessage, res.IsCreatePR, res.HeadBranch, res.URL) } } diff --git a/services/agit/agit.go b/services/agit/agit.go index 83b12dfcdb8fd..897e825012c3b 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, From 2b21cb3c9131c461c161d1824568530ef6efc5d7 Mon Sep 17 00:00:00 2001 From: TheFox0x7 Date: Sat, 25 Jan 2025 11:48:30 +0100 Subject: [PATCH 4/6] inline translation keys remove dead conditional check --- routers/private/hook_proc_receive.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/routers/private/hook_proc_receive.go b/routers/private/hook_proc_receive.go index 8e29240a80ea7..0498b892356e8 100644 --- a/routers/private/hook_proc_receive.go +++ b/routers/private/hook_proc_receive.go @@ -8,7 +8,6 @@ import ( "net/http" issues_model "code.gitea.io/gitea/models/issues" - repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" @@ -28,15 +27,13 @@ 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()) - } else if errors.Is(err, issues_model.ErrMustCollaborator) { + if errors.Is(err, issues_model.ErrMustCollaborator) { ctx.JSON(http.StatusUnauthorized, private.Response{ - Err: err.Error(), UserMsg: string(ctx.Tr("repo.pulls.new.must_collaborator")), + 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: string(ctx.Tr("repo.pulls.new.blocked_user")), + Err: err.Error(), UserMsg: "Cannot create pull request because you are blocked by the repository owner.", }) } else { log.Error(err.Error()) From 5a5a96c8864069581b317e7e43dce8c799d79eef Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 25 Jan 2025 22:44:48 +0800 Subject: [PATCH 5/6] fix legacy code log message --- routers/private/hook_proc_receive.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/private/hook_proc_receive.go b/routers/private/hook_proc_receive.go index 0498b892356e8..4076a57dbaa57 100644 --- a/routers/private/hook_proc_receive.go +++ b/routers/private/hook_proc_receive.go @@ -36,7 +36,7 @@ func HookProcReceive(ctx *gitea_context.PrivateContext) { 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(), }) From fcdff48838da9640954fc1a7ad48b0fc7cfcca19 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 25 Jan 2025 23:02:02 +0800 Subject: [PATCH 6/6] add comment for empty lines --- cmd/serv.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/serv.go b/cmd/serv.go index 39b351fbcc462..476fd9a2eae4f 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -104,6 +104,7 @@ 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, "") + // 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:")