diff --git a/patches/0001-BLENDER-Blender-ID-goth-provider.patch b/patches/0001-BLENDER-Blender-ID-goth-provider.patch index bd0cd775556c8..06436bb24742b 100644 --- a/patches/0001-BLENDER-Blender-ID-goth-provider.patch +++ b/patches/0001-BLENDER-Blender-ID-goth-provider.patch @@ -1,7 +1,7 @@ -From 10205667dc82b937bd956945be551edb4509e3fb Mon Sep 17 00:00:00 2001 +From ab305db7214f442a80ce6df7ed714ae3cae00e0b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 13:28:51 +0200 -Subject: [PATCH 01/19] BLENDER: Blender ID goth provider +Subject: [PATCH 01/22] BLENDER: Blender ID goth provider Provider authored by Matti Ranta and Arnd Marijnissen. --- @@ -25,11 +25,11 @@ Provider authored by Matti Ranta and Arnd Marijnissen. create mode 100644 services/auth/source/oauth2/blenderid/session_test.go diff --git a/go.mod b/go.mod -index e4c0a5a989..120fe31c15 100644 +index a2b35f48e0..8e4601f498 100644 --- a/go.mod +++ b/go.mod -@@ -237,6 +237,7 @@ require ( - github.com/mitchellh/mapstructure v1.5.0 // indirect +@@ -233,6 +233,7 @@ require ( + github.com/minio/minlz v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mozillazg/go-unidecode v0.2.0 // indirect @@ -37,10 +37,10 @@ index e4c0a5a989..120fe31c15 100644 github.com/mschoch/smat v0.2.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum -index d5ea5f6663..ebb4d17d32 100644 +index 5b228a00f4..41ddeffe56 100644 --- a/go.sum +++ b/go.sum -@@ -599,6 +599,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w +@@ -549,6 +549,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= @@ -593,5 +593,5 @@ index 65cf538ad7..f6f49ada04 100644 + })) } -- -2.51.0 +2.47.3 diff --git a/patches/0002-BLENDER-Show-warning-for-target-branch-switching.patch b/patches/0002-BLENDER-Show-warning-for-target-branch-switching.patch index 5b31bc82a90f1..6d89ddc9ca8df 100644 --- a/patches/0002-BLENDER-Show-warning-for-target-branch-switching.patch +++ b/patches/0002-BLENDER-Show-warning-for-target-branch-switching.patch @@ -1,7 +1,7 @@ -From a9d7f0bcc2c5b0f366c0fb9b7f179ddbb4d52e6b Mon Sep 17 00:00:00 2001 +From c63e94599a05b3d79b4f730295b0914b7c8ef4ae Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 13:31:35 +0200 -Subject: [PATCH 02/19] BLENDER: Show warning for target branch switching +Subject: [PATCH 02/22] BLENDER: Show warning for target branch switching --- templates/repo/issue/view_title.tmpl | 1 + @@ -20,5 +20,5 @@ index 103fa5de53..f67531d055 100644 {{end}} {{else}} -- -2.51.0 +2.47.3 diff --git a/patches/0003-BLENDER-Workaround-LFS-files-not-being-available-in-.patch b/patches/0003-BLENDER-Workaround-LFS-files-not-being-available-in-.patch index 58f6df6fcc5e1..91646c5f5f8a5 100644 --- a/patches/0003-BLENDER-Workaround-LFS-files-not-being-available-in-.patch +++ b/patches/0003-BLENDER-Workaround-LFS-files-not-being-available-in-.patch @@ -1,7 +1,7 @@ -From c167bf3727880b2ea354407127cdad0db68bd903 Mon Sep 17 00:00:00 2001 +From 4b2c9eb6995284aae06962d33beb6a0fe65414ff Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 13:32:53 +0200 -Subject: [PATCH 03/19] BLENDER: Workaround LFS files not being available in +Subject: [PATCH 03/22] BLENDER: Workaround LFS files not being available in pull requests Patch taken from issue number 17715, associating the LFS pointer when the @@ -12,10 +12,10 @@ file is downloaded. 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/models/git/lfs.go b/models/git/lfs.go -index 8bba060ff9..2f2f13254e 100644 +index 1f3d086ac2..3a33c46ae9 100644 --- a/models/git/lfs.go +++ b/models/git/lfs.go -@@ -223,7 +223,7 @@ func CountLFSMetaObjects(ctx context.Context, repoID int64) (int64, error) { +@@ -192,7 +192,7 @@ func CountLFSMetaObjects(ctx context.Context, repoID int64) (int64, error) { // LFSObjectAccessible checks if a provided Oid is accessible to the user func LFSObjectAccessible(ctx context.Context, user *user_model.User, oid string) (bool, error) { @@ -25,10 +25,10 @@ index 8bba060ff9..2f2f13254e 100644 return count > 0, err } diff --git a/services/lfs/server.go b/services/lfs/server.go -index 4a1e0aaf7d..58c05fa760 100644 +index 26eb4878c6..e0b3dd136e 100644 --- a/services/lfs/server.go +++ b/services/lfs/server.go -@@ -285,6 +285,26 @@ func BatchHandler(ctx *context.Context) { +@@ -284,6 +284,26 @@ func BatchHandler(ctx *context.Context) { responseObject = buildObjectResponse(rc, p, false, !exists, err) } else { var err *lfs_module.ObjectError @@ -56,5 +56,5 @@ index 4a1e0aaf7d..58c05fa760 100644 err = &lfs_module.ObjectError{ Code: http.StatusNotFound, -- -2.51.0 +2.47.3 diff --git a/patches/0004-BLENDER-Don-t-allow-assigning-large-teams-as-reviewe.patch b/patches/0004-BLENDER-Don-t-allow-assigning-large-teams-as-reviewe.patch index 33f439a3dd0de..fb609804d32f1 100644 --- a/patches/0004-BLENDER-Don-t-allow-assigning-large-teams-as-reviewe.patch +++ b/patches/0004-BLENDER-Don-t-allow-assigning-large-teams-as-reviewe.patch @@ -1,13 +1,13 @@ -From bc9cfc7e3eebf9217902a6931aa6e0e409384706 Mon Sep 17 00:00:00 2001 +From 1a64ab3dc14b7625ce6b7dbe1d829f0bd450414a Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 13:33:32 +0200 -Subject: [PATCH 04/19] BLENDER: Don't allow assigning large teams as reviewers +Subject: [PATCH 04/22] BLENDER: Don't allow assigning large teams as reviewers To avoid accidentally spamming hundreds of people. --- - models/organization/team.go | 16 ++++++++++++++++ - routers/web/repo/issue.go | 4 ++-- - services/pull/reviewer.go | 2 +- + models/organization/team.go | 16 ++++++++++++++++ + routers/web/shared/mention/mention.go | 4 ++-- + services/pull/reviewer.go | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/models/organization/team.go b/models/organization/team.go @@ -34,31 +34,27 @@ index 7f3a9b3829..f0717faf2e 100644 + + return smallTeams, nil +} -diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go -index 54b7e5df2a..ec2d9c0131 100644 ---- a/routers/web/repo/issue.go -+++ b/routers/web/repo/issue.go -@@ -673,13 +673,13 @@ func handleMentionableAssigneesAndTeams(ctx *context.Context, assignees []*user_ - } - +diff --git a/routers/web/shared/mention/mention.go b/routers/web/shared/mention/mention.go +index 5f163cb146..e02da20de6 100644 +--- a/routers/web/shared/mention/mention.go ++++ b/routers/web/shared/mention/mention.go +@@ -65,9 +65,9 @@ func (c *Collector) AddMentionableTeams(ctx context.Context, doer, owner *user_m + var teams []*organization.Team + var err error if isAdmin { - teams, err = org.LoadTeams(ctx) + teams, err = organization.FilterLargeTeams(org.LoadTeams(ctx)) - if err != nil { - ctx.ServerError("LoadTeams", err) - return - } } else { -- teams, err = org.GetUserTeams(ctx, ctx.Doer.ID) -+ teams, err = organization.FilterLargeTeams(org.GetUserTeams(ctx, ctx.Doer.ID)) - if err != nil { - ctx.ServerError("GetUserTeams", err) - return +- teams, err = org.GetUserTeams(ctx, doer.ID) ++ teams, err = organization.FilterLargeTeams(org.GetUserTeams(ctx, doer.ID)) + } + if err != nil { + return err diff --git a/services/pull/reviewer.go b/services/pull/reviewer.go -index 52f2f3401c..8794a787fc 100644 +index 139aeeb950..d7f8d3dc9b 100644 --- a/services/pull/reviewer.go +++ b/services/pull/reviewer.go -@@ -85,5 +85,5 @@ func GetReviewerTeams(ctx context.Context, repo *repo_model.Repository) ([]*orga +@@ -78,5 +78,5 @@ func GetReviewerTeams(ctx context.Context, repo *repo_model.Repository) ([]*orga return nil, nil } @@ -66,5 +62,5 @@ index 52f2f3401c..8794a787fc 100644 + return organization.FilterLargeTeams(organization.GetTeamsWithAccessToAnyRepoUnit(ctx, repo.OwnerID, repo.ID, perm.AccessModeRead, unit.TypePullRequests)) } -- -2.51.0 +2.47.3 diff --git a/patches/0005-BLENDER-Support-both-exclusive-and-non-exclusive-sco.patch b/patches/0005-BLENDER-Support-both-exclusive-and-non-exclusive-sco.patch index faf5402ca7eaa..9320b0d7b8a8d 100644 --- a/patches/0005-BLENDER-Support-both-exclusive-and-non-exclusive-sco.patch +++ b/patches/0005-BLENDER-Support-both-exclusive-and-non-exclusive-sco.patch @@ -1,7 +1,7 @@ -From 10b499c2c2ec0f51d45f8d8ee42f9b9ffc455fc3 Mon Sep 17 00:00:00 2001 +From 21188912848b3c302cd401fe5790b75fb55dcb98 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 13:58:05 +0200 -Subject: [PATCH 05/19] BLENDER: Support both exclusive and non-exclusive scope +Subject: [PATCH 05/22] BLENDER: Support both exclusive and non-exclusive scope for labels --- @@ -46,10 +46,10 @@ index 25d6f1303e..951cfdc1a6 100644 func NewLabel(ctx context.Context, l *Label) error { color, err := label.NormalizeColor(l.Color) diff --git a/modules/templates/util_render.go b/modules/templates/util_render.go -index 1056c42643..5b4cabf6d8 100644 +index 081a13fb9e..5757e3e805 100644 --- a/modules/templates/util_render.go +++ b/modules/templates/util_render.go -@@ -142,7 +142,7 @@ func (ut *RenderUtils) renderLabelWithTag(label *issues_model.Label, tagName, ta +@@ -145,7 +145,7 @@ func (ut *RenderUtils) renderLabelWithTag(label *issues_model.Label, tagName, ta locale := ut.ctx.Value(translation.ContextKey).(translation.Locale) var extraCSSClasses string textColor := util.ContrastColor(label.Color) @@ -113,10 +113,10 @@ index 04c3605a6a..f0bffcd155 100644 {{ctx.RenderUtils.RenderLabel .}}

{{template "repo/issue/labels/label_archived" .}}

diff --git a/templates/repo/issue/sidebar/label_list.tmpl b/templates/repo/issue/sidebar/label_list.tmpl -index 15c8760d1a..75a66290b1 100644 +index d30196326b..6339331e0f 100644 --- a/templates/repo/issue/sidebar/label_list.tmpl +++ b/templates/repo/issue/sidebar/label_list.tmpl -@@ -19,23 +19,25 @@ +@@ -20,23 +20,25 @@ -- -2.51.0 +2.47.3 diff --git a/patches/0006-BLENDER-Projects-button-to-show-hide-issue-details-a.patch b/patches/0006-BLENDER-Projects-button-to-show-hide-issue-details-a.patch index 5bfe1de70e873..ed9c46c7446bf 100644 --- a/patches/0006-BLENDER-Projects-button-to-show-hide-issue-details-a.patch +++ b/patches/0006-BLENDER-Projects-button-to-show-hide-issue-details-a.patch @@ -1,7 +1,7 @@ -From f27d18bf6759b707f9430dbae507bd220b0c5cb7 Mon Sep 17 00:00:00 2001 +From f4a59ee77343c1b3e2bb69b3ca8e47c1dfabbf7e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Oct 2025 20:18:11 +0200 -Subject: [PATCH 06/19] BLENDER: Projects: button to show/hide issue details +Subject: [PATCH 06/22] BLENDER: Projects: button to show/hide issue details and closed issue Both are off by default. This is implemented fully on the frontend, so @@ -15,18 +15,18 @@ all issues and their details are still always loaded. 5 files changed, 71 insertions(+), 14 deletions(-) diff --git a/modules/templates/helper.go b/modules/templates/helper.go -index e454bce4bd..ff3f7cfda1 100644 +index f81be1255a..a11226a75e 100644 --- a/modules/templates/helper.go +++ b/modules/templates/helper.go -@@ -40,6 +40,7 @@ func NewFuncMap() template.FuncMap { +@@ -38,6 +38,7 @@ func newFuncMapWebPage() template.FuncMap { "HTMLFormat": htmlFormat, "QueryEscape": queryEscape, "QueryBuild": QueryBuild, + "JSEscape": jsEscapeSafe, "SanitizeHTML": SanitizeHTML, - "URLJoin": util.URLJoin, - "DotEscape": dotEscape, -@@ -180,6 +181,10 @@ func htmlFormat(s any, args ...any) template.HTML { + + "PathEscape": url.PathEscape, +@@ -165,6 +166,10 @@ func htmlFormat(s any, args ...any) template.HTML { panic(fmt.Sprintf("unexpected type %T", s)) } @@ -38,11 +38,11 @@ index e454bce4bd..ff3f7cfda1 100644 return template.URL(url.QueryEscape(s)) } diff --git a/templates/projects/view.tmpl b/templates/projects/view.tmpl -index 21bc287643..7972bc298d 100644 +index ac08e56781..5a03bdcfd5 100644 --- a/templates/projects/view.tmpl +++ b/templates/projects/view.tmpl -@@ -17,6 +17,16 @@ - "TextFilterMatchAny" (ctx.Locale.Tr "repo.issues.filter_assignee_any_assignee") +@@ -23,6 +23,16 @@ + "ClosedMilestones" .ClosedMilestones }} + @@ -106,7 +106,7 @@ index 21bc287643..7972bc298d 100644
-- -+ +- ++ {{if not $.Page.Repository}}{{.Repo.FullName}}{{end}}#{{.Index}} {{$timeStr := DateUtils.TimeSince .GetLastEventTimestamp}} {{if .OriginalAuthor}} @@ -149,8 +149,8 @@ index 6dae49c455..f3398cd0fd 100644 -
+
- {{svg "octicon-git-merge" 16 "tw-mr-1 tw-align-middle"}} - {{.Title}} #{{.Index}} + {{svg "octicon-git-merge" 16 "tw-mr-1 tw-align-middle"}} + {{.Title}} #{{.Index}} @@ -54,15 +62,15 @@ {{end}} {{$tasks := .GetTasks}} @@ -215,5 +215,5 @@ index 327919b1fe..1067b5c8f7 100644 + margin-left: 0.5em; } -- -2.51.0 +2.47.3 diff --git a/patches/0007-BLENDER-Remember-login-for-OAuth-Blender-ID.patch b/patches/0007-BLENDER-Remember-login-for-OAuth-Blender-ID.patch index be2d2e0a10e98..3e0ba1ede97bb 100644 --- a/patches/0007-BLENDER-Remember-login-for-OAuth-Blender-ID.patch +++ b/patches/0007-BLENDER-Remember-login-for-OAuth-Blender-ID.patch @@ -1,7 +1,7 @@ -From cc522968972bc3c5df57f2516678976c89fb14a0 Mon Sep 17 00:00:00 2001 +From 1d9fed7574b38782b975690821963474f00a2c20 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 14:04:02 +0200 -Subject: [PATCH 07/19] BLENDER: Remember login for OAuth / Blender ID +Subject: [PATCH 07/22] BLENDER: Remember login for OAuth / Blender ID Otherwise for some browsers, users have to login again for every session. --- @@ -9,20 +9,19 @@ Otherwise for some browsers, users have to login again for every session. 1 file changed, 13 insertions(+) diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go -index f1c155e78f..03457cb260 100644 +index 824de60313..7dbdb0f37f 100644 --- a/routers/web/auth/oauth.go +++ b/routers/web/auth/oauth.go -@@ -21,7 +21,9 @@ import ( +@@ -24,6 +24,8 @@ import ( "code.gitea.io/gitea/modules/optional" "code.gitea.io/gitea/modules/session" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/timeutil" - "code.gitea.io/gitea/modules/web/middleware" + auth_service "code.gitea.io/gitea/services/auth" source_service "code.gitea.io/gitea/services/auth/source" "code.gitea.io/gitea/services/auth/source/oauth2" "code.gitea.io/gitea/services/context" -@@ -391,6 +393,17 @@ func handleOAuth2SignIn(ctx *context.Context, authSource *auth.Source, u *user_m +@@ -413,6 +415,17 @@ func handleOAuth2SignIn(ctx *context.Context, authSource *auth.Source, u *user_m return } @@ -37,9 +36,9 @@ index f1c155e78f..03457cb260 100644 + } + ctx.SetSiteCookie(setting.CookieRememberName, nt.ID+":"+token, setting.LogInRememberDays*timeutil.Day) + - // force to generate a new CSRF token - ctx.Csrf.PrepareForSessionUser(ctx) - + if err := resetLocale(ctx, u); err != nil { + ctx.ServerError("resetLocale", err) + return -- -2.51.0 +2.47.3 diff --git a/patches/0008-BLENDER-Always-login-with-Blender-ID-unless-noredire.patch b/patches/0008-BLENDER-Always-login-with-Blender-ID-unless-noredire.patch index d25d91d933f28..72b3e39d3e5b8 100644 --- a/patches/0008-BLENDER-Always-login-with-Blender-ID-unless-noredire.patch +++ b/patches/0008-BLENDER-Always-login-with-Blender-ID-unless-noredire.patch @@ -1,7 +1,7 @@ -From cd37387f02b0245f0afc1a0c472372c84f01cb8b Mon Sep 17 00:00:00 2001 +From 36abc474b61c8b720f7553d0414032284bd1bf32 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 14:04:49 +0200 -Subject: [PATCH 08/19] BLENDER: Always login with Blender ID, unless +Subject: [PATCH 08/22] BLENDER: Always login with Blender ID, unless noredirect is specified --- @@ -9,11 +9,11 @@ Subject: [PATCH 08/19] BLENDER: Always login with Blender ID, unless 1 file changed, 24 insertions(+) diff --git a/routers/web/auth/auth.go b/routers/web/auth/auth.go -index 2ccd1c71b5..2fadfc4b12 100644 +index eeda3704a3..866b782c9f 100644 --- a/routers/web/auth/auth.go +++ b/routers/web/auth/auth.go -@@ -164,6 +164,26 @@ func CheckAutoLogin(ctx *context.Context) bool { - return false +@@ -243,6 +243,26 @@ type preparedSignInData struct { + enableSSPI bool } +// BLENDER: always use OAuth unless ?noredirect=true is set @@ -36,11 +36,11 @@ index 2ccd1c71b5..2fadfc4b12 100644 + return false +} + - func prepareSignInPageData(ctx *context.Context) { - ctx.Data["Title"] = ctx.Tr("sign_in") - ctx.Data["OAuth2Providers"], _ = oauth2.GetOAuth2Providers(ctx, optional.Some(true)) -@@ -185,6 +205,10 @@ func SignIn(ctx *context.Context) { - if CheckAutoLogin(ctx) { + func prepareSignInPageData(ctx *context.Context) (ret preparedSignInData) { + var err error + ret.enableSSPI = auth.IsSSPIEnabled(ctx) +@@ -269,6 +289,10 @@ func SignIn(ctx *context.Context) { + if performAutoLogin(ctx) { return } + // BLENDER: Check if authentication is forced to OAuth @@ -48,8 +48,8 @@ index 2ccd1c71b5..2fadfc4b12 100644 + return + } if ctx.IsSigned { - RedirectAfterLogin(ctx) + redirectAfterAuth(ctx) return -- -2.51.0 +2.47.3 diff --git a/patches/0009-BLENDER-Allow-non-local-users-to-be-renamed.patch b/patches/0009-BLENDER-Allow-non-local-users-to-be-renamed.patch index 9b40c0323ec82..daae0b5e47123 100644 --- a/patches/0009-BLENDER-Allow-non-local-users-to-be-renamed.patch +++ b/patches/0009-BLENDER-Allow-non-local-users-to-be-renamed.patch @@ -1,37 +1,35 @@ -From 490ef60df54bb022b6d7ebf546f5a1a44aca6917 Mon Sep 17 00:00:00 2001 +From 4426396a65a447dbd757967d5e23ceb048dad75b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 14:05:47 +0200 -Subject: [PATCH 09/19] BLENDER: Allow non-local users to be renamed +Subject: [PATCH 09/22] BLENDER: Allow non-local users to be renamed For Blender ID hook to do this. --- - services/user/user.go | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) + services/user/user.go | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/services/user/user.go b/services/user/user.go -index d8abf199c3..d0a7ec64b3 100644 +index 9b8bcf83c0..a877ef0354 100644 --- a/services/user/user.go +++ b/services/user/user.go -@@ -37,12 +37,13 @@ func RenameUser(ctx context.Context, u *user_model.User, newUserName string) err +@@ -36,11 +36,12 @@ func RenameUser(ctx context.Context, u *user_model.User, newUserName string, doe + return nil } - // Non-local users are not allowed to change their username. -- if !u.IsOrganization() && !u.IsLocal() { -- return user_model.ErrUserIsNotLocal{ -- UID: u.ID, -- Name: u.Name, -- } +- // Non-local users are not allowed to change their own username, but admins are +- isExternalUser := !u.IsOrganization() && !u.IsLocal() +- if isExternalUser && !doer.IsAdmin { +- return user_model.ErrUserIsNotLocal{UID: u.ID, Name: u.Name} - } -+ // BLENDER: allow renaming local users. -+ //if !u.IsOrganization() && !u.IsLocal() { -+ // return user_model.ErrUserIsNotLocal{ -+ // UID: u.ID, -+ // Name: u.Name, -+ // } ++ // Non-local users are not allowed to change their own username, but admins are. ++ // BLENDER: allow renaming non-local users. ++ //isExternalUser := !u.IsOrganization() && !u.IsLocal() ++ //if isExternalUser && !doer.IsAdmin { ++ // return user_model.ErrUserIsNotLocal{UID: u.ID, Name: u.Name} + //} if err := user_model.IsUsableUsername(newUserName); err != nil { return err -- -2.51.0 +2.47.3 diff --git a/patches/0010-BLENDER-Workaround-internal-server-error-comparing-b.patch b/patches/0010-BLENDER-Workaround-internal-server-error-comparing-b.patch index 0a6eeed536d0d..c7798e71a4d49 100644 --- a/patches/0010-BLENDER-Workaround-internal-server-error-comparing-b.patch +++ b/patches/0010-BLENDER-Workaround-internal-server-error-comparing-b.patch @@ -1,42 +1,31 @@ -From 202618bf290c3eb539b0e12e28f289c05dfbd16c Mon Sep 17 00:00:00 2001 +From bf924a9085b24967a129800d50b65e9abec1cd75 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 14:07:25 +0200 -Subject: [PATCH 10/19] BLENDER: Workaround internal server error comparing +Subject: [PATCH 10/22] BLENDER: Workaround internal server error comparing branches on some repos https://projects.blender.org/infrastructure/blender-projects-platform/issues/61 And add trace log for investigation. --- - modules/git/repo_compare.go | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) + modules/gitrepo/fetch.go | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) -diff --git a/modules/git/repo_compare.go b/modules/git/repo_compare.go -index 69a7314d5c..2efeb325e8 100644 ---- a/modules/git/repo_compare.go -+++ b/modules/git/repo_compare.go -@@ -18,6 +18,7 @@ import ( - "strings" - - "code.gitea.io/gitea/modules/git/gitcmd" -+ logger "code.gitea.io/gitea/modules/log" - ) - - // GetMergeBase checks and returns merge base of two branches and the reference used as base. -@@ -29,9 +30,12 @@ func (repo *Repository) GetMergeBase(tmpRemote, base, head string) (string, stri - if tmpRemote != "origin" { - tmpBaseName := RemotePrefix + tmpRemote + "/tmp_" + base - // Fetch commit into a temporary branch in order to be able to handle commits and tags -- _, _, err := gitcmd.NewCommand("fetch", "--no-tags").AddDynamicArguments(tmpRemote).AddDashesAndList(base+":"+tmpBaseName).RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path}) -+ // --no-write-commit-graph works around issue with commit-graph-chain.lock files that should not be there. -+ _, _, err := gitcmd.NewCommand("fetch", "--no-write-commit-graph", "--no-tags").AddDynamicArguments(tmpRemote).AddDashesAndList(base+":"+tmpBaseName).RunStdString(repo.Ctx, &gitcmd.RunOpts{Dir: repo.Path}) - if err == nil { - base = tmpBaseName -+ } else { -+ logger.Trace("GetMergeBase failed to git fetch. Error: %v", err) - } - } - +diff --git a/modules/gitrepo/fetch.go b/modules/gitrepo/fetch.go +index 0474d6111e..4b9da54239 100644 +--- a/modules/gitrepo/fetch.go ++++ b/modules/gitrepo/fetch.go +@@ -21,7 +21,9 @@ import ( + // merge base between commits. + func FetchRemoteCommit(ctx context.Context, repo, remoteRepo Repository, commitID string) error { + return globallock.LockAndDo(ctx, getRepoWriteLockKey(repo.RelativePath()), func(ctx context.Context) error { +- return RunCmd(ctx, repo, gitcmd.NewCommand("fetch", "--no-tags"). ++ // BLENDER: --no-write-commit-graph works around internal server errors comparing ++ // branches on some repos, caused by commit-graph-chain.lock files that should not be there. ++ return RunCmd(ctx, repo, gitcmd.NewCommand("fetch", "--no-write-commit-graph", "--no-tags"). + AddDynamicArguments(repoPath(remoteRepo)). + AddDynamicArguments(commitID)) + }) -- -2.51.0 +2.47.3 diff --git a/patches/0011-BLENDER-Add-docs-explaining-merge-strategy.patch b/patches/0011-BLENDER-Add-docs-explaining-merge-strategy.patch index 2c6358e92078a..f264ae9039882 100644 --- a/patches/0011-BLENDER-Add-docs-explaining-merge-strategy.patch +++ b/patches/0011-BLENDER-Add-docs-explaining-merge-strategy.patch @@ -1,7 +1,7 @@ -From f9997b853d493883258d05c929a54de42ec04c52 Mon Sep 17 00:00:00 2001 +From decd1ffe0378817543a39c46098170fc19613409 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 10 May 2024 14:58:32 +0200 -Subject: [PATCH 11/19] BLENDER: Add docs explaining merge strategy +Subject: [PATCH 11/22] BLENDER: Add docs explaining merge strategy --- BLENDER_README.md | 12 ++++++++++++ @@ -27,5 +27,5 @@ index 0000000000..f5bd495d5e +First do changes in `blender-merged-develop`, and deploy on uatest. Then apply +the changes in `blender-merged` and deploy in production. -- -2.51.0 +2.47.3 diff --git a/patches/0012-BLENDER-Add-Python-for-external-renderering.patch b/patches/0012-BLENDER-Add-Python-for-external-renderering.patch index 4b4a2bf755eab..00fdc8c40db38 100644 --- a/patches/0012-BLENDER-Add-Python-for-external-renderering.patch +++ b/patches/0012-BLENDER-Add-Python-for-external-renderering.patch @@ -1,7 +1,7 @@ -From 4c4111718996dec679437b3d5cdab997e7191c7f Mon Sep 17 00:00:00 2001 +From 022b8f8869c398949eef9d708fab72d278fba3f5 Mon Sep 17 00:00:00 2001 From: Bart van der Braak Date: Wed, 4 Dec 2024 15:29:10 +0100 -Subject: [PATCH 12/19] BLENDER: Add Python for external renderering +Subject: [PATCH 12/22] BLENDER: Add Python for external renderering To be used for RestructuredText rendering using Sphinx to HTML. @@ -11,12 +11,12 @@ See: https://projects.blender.org/infrastructure/gitea-custom/src/branch/main/sp 1 file changed, 5 insertions(+) diff --git a/Dockerfile.rootless b/Dockerfile.rootless -index e83c1af33b..ebca19ca5b 100644 +index 83c69cbd51..116b7adef8 100644 --- a/Dockerfile.rootless +++ b/Dockerfile.rootless -@@ -55,6 +55,11 @@ RUN apk --no-cache add \ - openssh-keygen \ - && rm -rf /var/cache/apk/* +@@ -53,6 +53,11 @@ RUN apk --no-cache add \ + gnupg \ + openssh-keygen +# External renderers +RUN apk --no-cache add \ @@ -27,5 +27,5 @@ index e83c1af33b..ebca19ca5b 100644 -S -g 1000 \ git && \ -- -2.51.0 +2.47.3 diff --git a/patches/0013-BLENDER-Fix-RemoveUserBadges-incorrect-sql.patch b/patches/0013-BLENDER-Fix-RemoveUserBadges-incorrect-sql.patch deleted file mode 100644 index fa06fd08976ed..0000000000000 --- a/patches/0013-BLENDER-Fix-RemoveUserBadges-incorrect-sql.patch +++ /dev/null @@ -1,46 +0,0 @@ -From cb81590f47de39fcf889ad3a89e9816dc9bfdffa Mon Sep 17 00:00:00 2001 -From: Oleg Komarov -Date: Wed, 2 Apr 2025 17:11:01 +0200 -Subject: [PATCH 13/19] BLENDER: Fix RemoveUserBadges incorrect sql - ---- - models/user/badge.go | 22 ++++++++++++++++------ - 1 file changed, 16 insertions(+), 6 deletions(-) - -diff --git a/models/user/badge.go b/models/user/badge.go -index e475ceb748..e33819d820 100644 ---- a/models/user/badge.go -+++ b/models/user/badge.go -@@ -105,13 +105,23 @@ func RemoveUserBadge(ctx context.Context, u *User, badge *Badge) error { - // RemoveUserBadges removes badges from a user. - func RemoveUserBadges(ctx context.Context, u *User, badges []*Badge) error { - return db.WithTx(ctx, func(ctx context.Context) error { -+ badgeSlugs := make([]string, 0, len(badges)) - for _, badge := range badges { -- if _, err := db.GetEngine(ctx). -- Join("INNER", "badge", "badge.id = `user_badge`.badge_id"). -- Where("`user_badge`.user_id=? AND `badge`.slug=?", u.ID, badge.Slug). -- Delete(&UserBadge{}); err != nil { -- return err -- } -+ badgeSlugs = append(badgeSlugs, badge.Slug) -+ } -+ var userBadges []UserBadge -+ if err := db.GetEngine(ctx).Table("user_badge"). -+ Join("INNER", "badge", "badge.id = `user_badge`.badge_id"). -+ Where("`user_badge`.user_id = ?", u.ID).In("`badge`.slug", badgeSlugs). -+ Find(&userBadges); err != nil { -+ return err -+ } -+ userBadgeIDs := make([]int64, 0, len(userBadges)) -+ for _, ub := range userBadges { -+ userBadgeIDs = append(userBadgeIDs, ub.ID) -+ } -+ if _, err := db.GetEngine(ctx).Table("user_badge").In("id", userBadgeIDs).Delete(); err != nil { -+ return err - } - return nil - }) --- -2.51.0 - diff --git a/patches/0014-BLENDER-Sync-user-badges-on-sign-in.patch b/patches/0013-BLENDER-Sync-user-badges-on-sign-in.patch similarity index 89% rename from patches/0014-BLENDER-Sync-user-badges-on-sign-in.patch rename to patches/0013-BLENDER-Sync-user-badges-on-sign-in.patch index 53c41b04754dc..4bc9ac40272c8 100644 --- a/patches/0014-BLENDER-Sync-user-badges-on-sign-in.patch +++ b/patches/0013-BLENDER-Sync-user-badges-on-sign-in.patch @@ -1,22 +1,22 @@ -From 122e9fb06447db28a05530261209346635d1e798 Mon Sep 17 00:00:00 2001 +From fe28143968f59a259069e4ac005530349aa7b9c5 Mon Sep 17 00:00:00 2001 From: Oleg Komarov Date: Wed, 2 Apr 2025 17:30:05 +0200 -Subject: [PATCH 14/19] BLENDER: Sync user badges on sign-in +Subject: [PATCH 13/22] BLENDER: Sync user badges on sign-in Don't escalate any errors, only log them, to avoid breaking sign-in. --- routers/web/auth/oauth.go | 26 ++++++++++++ - services/user/badge.go | 55 +++++++++++++++++++++++++ - services/user/badge_test.go | 80 +++++++++++++++++++++++++++++++++++++ - 3 files changed, 161 insertions(+) + services/user/badge.go | 55 ++++++++++++++++++++++++++ + services/user/badge_test.go | 79 +++++++++++++++++++++++++++++++++++++ + 3 files changed, 160 insertions(+) create mode 100644 services/user/badge.go create mode 100644 services/user/badge_test.go diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go -index 03457cb260..954550cb78 100644 +index 7dbdb0f37f..418b45d996 100644 --- a/routers/web/auth/oauth.go +++ b/routers/web/auth/oauth.go -@@ -321,8 +321,34 @@ func oauth2UpdateAvatarIfNeed(ctx *context.Context, url string, u *user_model.Us +@@ -343,8 +343,34 @@ func oauth2UpdateAvatarIfNeed(ctx *context.Context, avatarURL string, u *user_mo } } @@ -114,10 +114,10 @@ index 0000000000..be6124a7fe +} diff --git a/services/user/badge_test.go b/services/user/badge_test.go new file mode 100644 -index 0000000000..41880a9fa9 +index 0000000000..91267d71aa --- /dev/null +++ b/services/user/badge_test.go -@@ -0,0 +1,80 @@ +@@ -0,0 +1,79 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + @@ -131,7 +131,6 @@ index 0000000000..41880a9fa9 + "sync" + "testing" + -+ "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/unittest" + user_model "code.gitea.io/gitea/models/user" + @@ -151,7 +150,7 @@ index 0000000000..41880a9fa9 + badges := []*user_model.Badge{} + for i := range 5 { + badge := &user_model.Badge{Slug: fmt.Sprintf("update-badges-test-%d", i)} -+ user_model.CreateBadge(db.DefaultContext, badge) ++ user_model.CreateBadge(t.Context(), badge) + badges = append(badges, badge) + } + var wg sync.WaitGroup @@ -159,7 +158,7 @@ index 0000000000..41880a9fa9 + f := func(wg *sync.WaitGroup, badges []*user_model.Badge) { + <-start + defer wg.Done() -+ UpdateBadgesBestEffort(db.DefaultContext, user, badges) ++ UpdateBadgesBestEffort(t.Context(), user, badges) + } + updateSets := [][]*user_model.Badge{ + badges[0:1], @@ -175,7 +174,7 @@ index 0000000000..41880a9fa9 + close(start) + wg.Wait() + -+ result, _, _ := user_model.GetUserBadges(db.DefaultContext, user) ++ result, _, _ := user_model.GetUserBadges(t.Context(), user) + resultSlugs := make([]string, 0, len(result)) + for _, b := range result { + resultSlugs = append(resultSlugs, b.Slug) @@ -199,5 +198,5 @@ index 0000000000..41880a9fa9 + } +} -- -2.51.0 +2.47.3 diff --git a/patches/0015-BLENDER-Add-Spam-Reporting.patch b/patches/0014-BLENDER-Add-Spam-Reporting.patch similarity index 90% rename from patches/0015-BLENDER-Add-Spam-Reporting.patch rename to patches/0014-BLENDER-Add-Spam-Reporting.patch index 01058f04861be..72c969534c681 100644 --- a/patches/0015-BLENDER-Add-Spam-Reporting.patch +++ b/patches/0014-BLENDER-Add-Spam-Reporting.patch @@ -1,7 +1,7 @@ -From 702a1af5155f47bafd6c90a97f82eecf98b3edab Mon Sep 17 00:00:00 2001 +From 2ac66a43550a1ae0e3a5fe23a57944f0037c102c Mon Sep 17 00:00:00 2001 From: Oleg Komarov Date: Fri, 11 Apr 2025 16:57:54 +0200 -Subject: [PATCH] BLENDER: Add Spam Reporting +Subject: [PATCH 14/22] BLENDER: Add Spam Reporting Spam reporting is available for trusted users (org members and admins) via a button on a spammer's profile page; @@ -9,7 +9,7 @@ a new section Site Administration > Identity & Access > Spam Reports; a new "pending spam reports" indicator in the header for admins. --- models/user/spamreport.go | 136 +++++++++++ - options/locale/locale_en-US.ini | 22 ++ + options/locale/locale_en-US.json | 18 ++ routers/common/pagetmpl.go | 19 ++ routers/web/admin/spamreports.go | 135 +++++++++++ routers/web/shared/user/header.go | 20 ++ @@ -23,7 +23,7 @@ a new "pending spam reports" indicator in the header for admins. templates/shared/user/profile_big_avatar.tmpl | 17 ++ .../shared/user/purgespammer_user_dialog.tmpl | 14 ++ .../shared/user/spamreport_user_dialog.tmpl | 14 ++ - 15 files changed, 854 insertions(+), 1 deletion(-) + 15 files changed, 850 insertions(+), 1 deletion(-) create mode 100644 models/user/spamreport.go create mode 100644 routers/web/admin/spamreports.go create mode 100644 routers/web/user/setting/spamreport.go @@ -175,60 +175,56 @@ index 0000000000..a4390c9d4a + } + return nil, err +} -diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini -index 08114f0d5f..07423920ce 100644 ---- a/options/locale/locale_en-US.ini -+++ b/options/locale/locale_en-US.ini -@@ -721,6 +721,18 @@ block.note.edit = Edit note - block.list = Blocked users - block.list.none = You have not blocked any users. - -+purgespammer.modal_title = Purge spam account -+purgespammer.modal_info = All content created by the user will be deleted! This cannot be undone. -+purgespammer.modal_action = Purge spam account -+purgespammer.profile_button = Purge spam account -+ -+spamreport.existing_status = The user has already been reported as a spammer, the report is %s. -+ -+spamreport.modal_title = Report spam -+spamreport.modal_info = Report a user as a spammer to site admins. -+spamreport.modal_action = Report spam -+spamreport.profile_button = Report spam -+ - [settings] - profile = Profile - account = Account -@@ -2998,6 +3010,7 @@ first_page = First - last_page = Last - total = Total: %d - settings = Admin Settings -+spamreports = Spam Reports - - dashboard.new_version_hint = Gitea %s is now available, you are running %s. Check the blog for more details. - dashboard.statistic = Summary -@@ -3085,6 +3098,7 @@ dashboard.sync_branch.started = Branches Sync started - dashboard.sync_tag.started = Tags Sync started - dashboard.rebuild_issue_indexer = Rebuild issue indexer - dashboard.sync_repo_licenses = Sync repo licenses -+dashboard.process_spam_reports = Process spam reports - - users.user_manage_panel = User Account Management - users.new_account = Create User Account -@@ -3161,6 +3175,14 @@ emails.delete_desc = Are you sure you want to delete this email address? - emails.deletion_success = The email address has been deleted. - emails.delete_primary_email_error = You cannot delete the primary email address. - -+spamreports.spamreport_manage_panel = Spam Report Management -+spamreports.user = Reported for spam -+spamreports.user_created = User created -+spamreports.reporter = Reporter -+spamreports.created = Report Created -+spamreports.updated = Report Updated -+spamreports.status = Report Status -+ - orgs.org_manage_panel = Organization Management - orgs.name = Name - orgs.teams = Teams +diff --git a/options/locale/locale_en-US.json b/options/locale/locale_en-US.json +index 7c20cdc9f2..d2a84d6332 100644 +--- a/options/locale/locale_en-US.json ++++ b/options/locale/locale_en-US.json +@@ -646,6 +646,15 @@ + "user.block.note.edit": "Edit note", + "user.block.list": "Blocked users", + "user.block.list.none": "You have not blocked any users.", ++ "user.purgespammer.modal_title": "Purge spam account", ++ "user.purgespammer.modal_info": "All content created by the user will be deleted! This cannot be undone.", ++ "user.purgespammer.modal_action": "Purge spam account", ++ "user.purgespammer.profile_button": "Purge spam account", ++ "user.spamreport.existing_status": "The user has already been reported as a spammer, the report is %s.", ++ "user.spamreport.modal_title": "Report spam", ++ "user.spamreport.modal_info": "Report a user as a spammer to site admins.", ++ "user.spamreport.modal_action": "Report spam", ++ "user.spamreport.profile_button": "Report spam", + "settings.general": "General", + "settings.profile": "Profile", + "settings.account": "Account", +@@ -2909,6 +2918,7 @@ + "admin.last_page": "Last", + "admin.total": "Total: %d", + "admin.settings": "Admin Settings", ++ "admin.spamreports": "Spam Reports", + "admin.dashboard.new_version_hint": "Gitea %s is now available, you are running %s. Check the blog for more details.", + "admin.dashboard.statistic": "Summary", + "admin.dashboard.maintenance_operations": "Maintenance Operations", +@@ -2995,6 +3005,7 @@ + "admin.dashboard.sync_tag.started": "Tags Sync started", + "admin.dashboard.rebuild_issue_indexer": "Rebuild issue indexer", + "admin.dashboard.sync_repo_licenses": "Sync repo licenses", ++ "admin.dashboard.process_spam_reports": "Process spam reports", + "admin.users.user_manage_panel": "User Account Management", + "admin.users.new_account": "Create User Account", + "admin.users.name": "Username", +@@ -3068,6 +3079,13 @@ + "admin.emails.delete_desc": "Are you sure you want to delete this email address?", + "admin.emails.deletion_success": "The email address has been deleted.", + "admin.emails.delete_primary_email_error": "You cannot delete the primary email address.", ++ "admin.spamreports.spamreport_manage_panel": "Spam Report Management", ++ "admin.spamreports.user": "Reported for spam", ++ "admin.spamreports.user_created": "User created", ++ "admin.spamreports.reporter": "Reporter", ++ "admin.spamreports.created": "Report Created", ++ "admin.spamreports.updated": "Report Updated", ++ "admin.spamreports.status": "Report Status", + "admin.orgs.org_manage_panel": "Organization Management", + "admin.orgs.name": "Name", + "admin.orgs.teams": "Teams", diff --git a/routers/common/pagetmpl.go b/routers/common/pagetmpl.go index c48596d48b..ef18ac74e7 100644 --- a/routers/common/pagetmpl.go @@ -280,7 +276,7 @@ index c48596d48b..ef18ac74e7 100644 } diff --git a/routers/web/admin/spamreports.go b/routers/web/admin/spamreports.go new file mode 100644 -index 0000000000..8177dbc5f6 +index 0000000000..2b6fac373b --- /dev/null +++ b/routers/web/admin/spamreports.go @@ -0,0 +1,135 @@ @@ -350,10 +346,10 @@ index 0000000000..8177dbc5f6 + } + ctx.Data["StatusCounts"] = statusCounts + -+ var pagerCount int ++ var pagerCount int64 + for _, sc := range statusCounts { + if sc.Status == filterStatus { -+ pagerCount = int(sc.Count) ++ pagerCount = sc.Count + break + } + } @@ -420,7 +416,7 @@ index 0000000000..8177dbc5f6 + ctx.Redirect(setting.AppSubURL + "/" + username) +} diff --git a/routers/web/shared/user/header.go b/routers/web/shared/user/header.go -index 2bd0abc4c0..ae6f337066 100644 +index 2ba45fc5a7..7281c45388 100644 --- a/routers/web/shared/user/header.go +++ b/routers/web/shared/user/header.go @@ -22,6 +22,7 @@ import ( @@ -507,20 +503,20 @@ index 0000000000..254b54c56f + ctx.Redirect(setting.AppSubURL + "/" + username) +} diff --git a/routers/web/web.go b/routers/web/web.go -index f3f3679caf..478ac9e387 100644 +index 085558c9b2..e0a8e6a9e4 100644 --- a/routers/web/web.go +++ b/routers/web/web.go -@@ -682,6 +682,9 @@ func registerWebRoutes(m *web.Router) { +@@ -721,6 +721,9 @@ func registerWebRoutes(m *web.Router, webAuth *AuthMiddleware) { m.Get("", user_setting.BlockedUsers) m.Post("", web.Bind(forms.BlockUserForm{}), user_setting.BlockedUsersPost) }) + + // BLENDER: spam reporting + m.Post("/spamreport", user_setting.SpamReportUserPost) - }, reqSignIn, ctxDataSet("PageIsUserSettings", true, "EnablePackages", setting.Packages.Enabled, "EnableNotifyMail", setting.Service.EnableNotifyMail)) + }, reqSignIn, user_setting.SettingsCtxData) m.Group("/user", func() { -@@ -755,6 +758,13 @@ func registerWebRoutes(m *web.Router) { +@@ -804,6 +807,13 @@ func registerWebRoutes(m *web.Router, webAuth *AuthMiddleware) { m.Post("/delete", admin.DeleteEmail) }) @@ -771,7 +767,7 @@ index 0000000000..4aabac4054 +} diff --git a/services/user/spamreport_test.go b/services/user/spamreport_test.go new file mode 100644 -index 0000000000..2f4ebcdc86 +index 0000000000..c24b12e817 --- /dev/null +++ b/services/user/spamreport_test.go @@ -0,0 +1,93 @@ @@ -815,7 +811,7 @@ index 0000000000..2f4ebcdc86 +func TestCreateSpamReport(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + // Prevent interaction between tests, for whatever reason db is not reset. -+ db.GetEngine(db.DefaultContext).Exec("delete from user_spamreport") ++ db.GetEngine(t.Context()).Exec("delete from user_spamreport") + + userWithOrgs := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) + userWithoutOrgs := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 8}) @@ -843,7 +839,7 @@ index 0000000000..2f4ebcdc86 +func TestProcessSpamReports(t *testing.T) { + assert.NoError(t, unittest.PrepareTestDatabase()) + // Prevent interaction between tests, for whatever reason db is not reset. -+ db.GetEngine(db.DefaultContext).Exec("delete from user_spamreport") ++ db.GetEngine(t.Context()).Exec("delete from user_spamreport") + + userWithOrgs := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) // reporter + userWithoutOrgs := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 9}) // spammer, and a different one @@ -869,19 +865,19 @@ index 0000000000..2f4ebcdc86 + assert.NoError(t, err) +} diff --git a/templates/admin/navbar.tmpl b/templates/admin/navbar.tmpl -index 72584ec799..6cee23f79c 100644 +index ce3048ed9f..bede52e75c 100644 --- a/templates/admin/navbar.tmpl +++ b/templates/admin/navbar.tmpl @@ -13,7 +13,7 @@
--
-+
+-
++
{{ctx.Locale.Tr "admin.identity_access"}}
--
-+
+-
++
{{ctx.Locale.Tr "admin.identity_access"}} +{{template "user/settings/layout_footer" .}} diff --git a/templates/user/settings/navbar.tmpl b/templates/user/settings/navbar.tmpl -index 34e089a68a..eba9f16888 100644 +index e2bc72ca5f..6742317dbd 100644 --- a/templates/user/settings/navbar.tmpl +++ b/templates/user/settings/navbar.tmpl -@@ -65,5 +65,8 @@ +@@ -68,5 +68,8 @@ {{ctx.Locale.Tr "settings.repos"}} @@ -923,5 +923,5 @@ index 34e089a68a..eba9f16888 100644
-- -2.51.0 +2.47.3 diff --git a/patches/0022-BLENDER-Add-line-words-and-cursor-indicators.patch b/patches/0020-BLENDER-Add-line-words-and-cursor-indicators.patch similarity index 90% rename from patches/0022-BLENDER-Add-line-words-and-cursor-indicators.patch rename to patches/0020-BLENDER-Add-line-words-and-cursor-indicators.patch index 836aafdc70f34..31fd1a773a90b 100644 --- a/patches/0022-BLENDER-Add-line-words-and-cursor-indicators.patch +++ b/patches/0020-BLENDER-Add-line-words-and-cursor-indicators.patch @@ -1,14 +1,14 @@ -From e1c42d3e2658c0d3980dac8e0f33dc36dfdeab77 Mon Sep 17 00:00:00 2001 +From 82eb680e62325582546ec0073a64d7bf1632ff03 Mon Sep 17 00:00:00 2001 From: Bart van der Braak Date: Fri, 13 Feb 2026 17:13:05 +0100 -Subject: [PATCH] BLENDER: Add line, words and cursor indicators +Subject: [PATCH 20/22] BLENDER: Add line, words and cursor indicators --- .../js/components/PullRequestMergeForm.vue | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/web_src/js/components/PullRequestMergeForm.vue b/web_src/js/components/PullRequestMergeForm.vue -index b2c28414c0..127212393c 100644 +index 7ae8fbfdaf..e6eabe348d 100644 --- a/web_src/js/components/PullRequestMergeForm.vue +++ b/web_src/js/components/PullRequestMergeForm.vue @@ -76,6 +76,17 @@ function switchMergeStyle(name: string, autoMerge = false) { @@ -29,7 +29,7 @@ index b2c28414c0..127212393c 100644