From 4db395fca07c31998d5b8e060cbf139be30aca9a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 30 Nov 2024 17:34:06 -0800 Subject: [PATCH 1/6] Move licenses renders to shared file to avoid unnecesary loading --- routers/web/repo/branch.go | 6 +++++- routers/web/repo/commit.go | 16 +++++++++++++--- routers/web/repo/release.go | 13 +++++++++++++ routers/web/repo/shared/sub_menu.go | 25 +++++++++++++++++++++++++ routers/web/repo/view.go | 6 +++++- services/context/repo.go | 7 ------- 6 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 routers/web/repo/shared/sub_menu.go diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index 4a62237838a4a..e3465367fadbc 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/utils" + "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/forms" release_service "code.gitea.io/gitea/services/release" @@ -46,6 +47,10 @@ func Branches(ctx *context.Context) { ctx.Data["PageIsViewCode"] = true ctx.Data["PageIsBranches"] = true + if !shared.RenderRepoSubMenu(ctx) { + return + } + page := ctx.FormInt("page") if page <= 1 { page = 1 @@ -89,7 +94,6 @@ func Branches(ctx *context.Context) { pager := context.NewPagination(int(branchesCount), pageSize, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName ctx.HTML(http.StatusOK, tplBranch) } diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 0be9689c3f5e3..8e11d25ec41ac 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -28,6 +28,7 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/gitdiff" repo_service "code.gitea.io/gitea/services/repository" @@ -61,6 +62,10 @@ func Commits(ctx *context.Context) { } ctx.Data["PageIsViewCode"] = true + if !shared.RenderRepoSubMenu(ctx) { + return + } + commitsCount, err := ctx.Repo.GetCommitsCount() if err != nil { ctx.ServerError("GetCommitsCount", err) @@ -102,7 +107,6 @@ func Commits(ctx *context.Context) { pager := context.NewPagination(int(commitsCount), pageSize, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName ctx.HTML(http.StatusOK, tplCommits) } @@ -197,6 +201,10 @@ func SearchCommits(ctx *context.Context) { ctx.Data["PageIsCommits"] = true ctx.Data["PageIsViewCode"] = true + if !shared.RenderRepoSubMenu(ctx) { + return + } + query := ctx.FormTrim("q") if len(query) == 0 { ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchNameSubURL()) @@ -220,12 +228,15 @@ func SearchCommits(ctx *context.Context) { ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name ctx.Data["RefName"] = ctx.Repo.RefName - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName ctx.HTML(http.StatusOK, tplCommits) } // FileHistory show a file's reversions func FileHistory(ctx *context.Context) { + if !shared.RenderRepoSubMenu(ctx) { + return + } + fileName := ctx.Repo.TreePath if len(fileName) == 0 { Commits(ctx) @@ -266,7 +277,6 @@ func FileHistory(ctx *context.Context) { pager := context.NewPagination(int(commitsCount), setting.Git.CommitsRangeSize, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName ctx.HTML(http.StatusOK, tplCommits) } diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index 96c512dd3df95..83d50ccac4b9b 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -26,6 +26,7 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/web/feed" + "code.gitea.io/gitea/routers/web/repo/shared" shared_user "code.gitea.io/gitea/routers/web/shared/user" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context/upload" @@ -156,6 +157,12 @@ func Releases(ctx *context.Context) { ctx.Data["CanCreateBranch"] = false ctx.Data["HideBranchesInDropdown"] = true + if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { + if !shared.RenderRepoSubMenu(ctx) { + return + } + } + listOptions := db.ListOptions{ Page: ctx.FormInt("page"), PageSize: ctx.FormInt("limit"), @@ -207,6 +214,12 @@ func TagsList(ctx *context.Context) { ctx.Data["HideBranchesInDropdown"] = true ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived + if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { + if !shared.RenderRepoSubMenu(ctx) { + return + } + } + namePattern := ctx.FormTrim("q") listOptions := db.ListOptions{ diff --git a/routers/web/repo/shared/sub_menu.go b/routers/web/repo/shared/sub_menu.go new file mode 100644 index 0000000000000..26fb4a0f02872 --- /dev/null +++ b/routers/web/repo/shared/sub_menu.go @@ -0,0 +1,25 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package shared + +import ( + repo_model "code.gitea.io/gitea/models/repo" + "code.gitea.io/gitea/services/context" + repo_service "code.gitea.io/gitea/services/repository" +) + +func RenderRepoSubMenu(ctx *context.Context) bool { + return renderLicenses(ctx) +} + +func renderLicenses(ctx *context.Context) bool { + repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) + if err != nil { + ctx.ServerError("GetRepoLicenses", err) + return false + } + ctx.Data["DetectedRepoLicenses"] = repoLicenses.StringList() + ctx.Data["LicenseFileName"] = repo_service.LicenseFileName + return true +} diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index e6c25d75e9315..6708dee220b5e 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -50,6 +50,7 @@ import ( "code.gitea.io/gitea/modules/typesniffer" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/web/feed" + "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" issue_service "code.gitea.io/gitea/services/issue" repo_service "code.gitea.io/gitea/services/repository" @@ -980,6 +981,10 @@ func renderHomeCode(ctx *context.Context) { return } + if !shared.RenderRepoSubMenu(ctx) { + return + } + // Get current entry user currently looking at. entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath) if err != nil { @@ -1062,7 +1067,6 @@ func renderHomeCode(ctx *context.Context) { ctx.Data["TreeLink"] = treeLink ctx.Data["TreeNames"] = treeNames ctx.Data["BranchLink"] = branchLink - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName ctx.HTML(http.StatusOK, tplRepoHome) } diff --git a/services/context/repo.go b/services/context/repo.go index 1eafb7ca48bb4..2df5e03fd2ee7 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -396,13 +396,6 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) { ctx.Repo.Repository = repo ctx.Data["RepoName"] = ctx.Repo.Repository.Name ctx.Data["IsEmptyRepo"] = ctx.Repo.Repository.IsEmpty - - repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) - if err != nil { - ctx.ServerError("GetRepoLicenses", err) - return - } - ctx.Data["DetectedRepoLicenses"] = repoLicenses.StringList() } // RepoAssignment returns a middleware to handle repository assignment From d61ac5dd52f77ba8aa755c1bc4ae79aca044c20c Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 30 Nov 2024 19:47:31 -0800 Subject: [PATCH 2/6] Rename functions and add some comments --- routers/web/repo/branch.go | 2 +- routers/web/repo/commit.go | 6 +++--- routers/web/repo/release.go | 6 ++++-- routers/web/repo/shared/sub_menu.go | 8 +++++--- routers/web/repo/view.go | 2 +- 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index e3465367fadbc..9cabba617fce6 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -47,7 +47,7 @@ func Branches(ctx *context.Context) { ctx.Data["PageIsViewCode"] = true ctx.Data["PageIsBranches"] = true - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 8e11d25ec41ac..d6fefa8a293b4 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -62,7 +62,7 @@ func Commits(ctx *context.Context) { } ctx.Data["PageIsViewCode"] = true - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } @@ -201,7 +201,7 @@ func SearchCommits(ctx *context.Context) { ctx.Data["PageIsCommits"] = true ctx.Data["PageIsViewCode"] = true - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } @@ -233,7 +233,7 @@ func SearchCommits(ctx *context.Context) { // FileHistory show a file's reversions func FileHistory(ctx *context.Context) { - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index 83d50ccac4b9b..9af141ee1092a 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -157,8 +157,9 @@ func Releases(ctx *context.Context) { ctx.Data["CanCreateBranch"] = false ctx.Data["HideBranchesInDropdown"] = true + // repo/release_tag_header.tmpl will render sub menu depending on the different permission if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } } @@ -214,8 +215,9 @@ func TagsList(ctx *context.Context) { ctx.Data["HideBranchesInDropdown"] = true ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived + // repo/release_tag_header.tmpl will render sub menu depending on the different permission if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } } diff --git a/routers/web/repo/shared/sub_menu.go b/routers/web/repo/shared/sub_menu.go index 26fb4a0f02872..085c612645ea8 100644 --- a/routers/web/repo/shared/sub_menu.go +++ b/routers/web/repo/shared/sub_menu.go @@ -9,11 +9,13 @@ import ( repo_service "code.gitea.io/gitea/services/repository" ) -func RenderRepoSubMenu(ctx *context.Context) bool { - return renderLicenses(ctx) +// PrepareForRepoSubMenu will prepare all sub menus' data for some repositories pages +// TODO: moving prepae commits count, branches count, tags count and repository size to this function +func PrepareForRepoSubMenu(ctx *context.Context) bool { + return prepareForLicenses(ctx) } -func renderLicenses(ctx *context.Context) bool { +func prepareForLicenses(ctx *context.Context) bool { repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) if err != nil { ctx.ServerError("GetRepoLicenses", err) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 6708dee220b5e..ae7e079b99035 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -981,7 +981,7 @@ func renderHomeCode(ctx *context.Context) { return } - if !shared.RenderRepoSubMenu(ctx) { + if !shared.PrepareForRepoSubMenu(ctx) { return } From 3623a5c841443429c48f7d0bdf796668704d4c74 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 30 Nov 2024 19:50:19 -0800 Subject: [PATCH 3/6] fix comments --- routers/web/repo/shared/sub_menu.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/web/repo/shared/sub_menu.go b/routers/web/repo/shared/sub_menu.go index 085c612645ea8..886bae80b8f7c 100644 --- a/routers/web/repo/shared/sub_menu.go +++ b/routers/web/repo/shared/sub_menu.go @@ -10,7 +10,7 @@ import ( ) // PrepareForRepoSubMenu will prepare all sub menus' data for some repositories pages -// TODO: moving prepae commits count, branches count, tags count and repository size to this function +// TODO: moving preparation for commits count, branches count, tags count and repository size to this function func PrepareForRepoSubMenu(ctx *context.Context) bool { return prepareForLicenses(ctx) } From 51f4ad8cb3cedb8134dcb9e958f1f377f8b7fcb3 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 30 Nov 2024 21:51:08 -0800 Subject: [PATCH 4/6] Only display license on repository home page --- routers/web/repo/branch.go | 5 ----- routers/web/repo/commit.go | 13 ------------- routers/web/repo/release.go | 15 --------------- .../web/repo/shared/{sub_menu.go => license.go} | 8 +------- routers/web/repo/view.go | 3 ++- 5 files changed, 3 insertions(+), 41 deletions(-) rename routers/web/repo/shared/{sub_menu.go => license.go} (61%) diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index 9cabba617fce6..dc170742b93e4 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -24,7 +24,6 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/utils" - "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/forms" release_service "code.gitea.io/gitea/services/release" @@ -47,10 +46,6 @@ func Branches(ctx *context.Context) { ctx.Data["PageIsViewCode"] = true ctx.Data["PageIsBranches"] = true - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - page := ctx.FormInt("page") if page <= 1 { page = 1 diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index d6fefa8a293b4..0b246eed8107d 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -28,7 +28,6 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/gitdiff" repo_service "code.gitea.io/gitea/services/repository" @@ -62,10 +61,6 @@ func Commits(ctx *context.Context) { } ctx.Data["PageIsViewCode"] = true - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - commitsCount, err := ctx.Repo.GetCommitsCount() if err != nil { ctx.ServerError("GetCommitsCount", err) @@ -201,10 +196,6 @@ func SearchCommits(ctx *context.Context) { ctx.Data["PageIsCommits"] = true ctx.Data["PageIsViewCode"] = true - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - query := ctx.FormTrim("q") if len(query) == 0 { ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchNameSubURL()) @@ -233,10 +224,6 @@ func SearchCommits(ctx *context.Context) { // FileHistory show a file's reversions func FileHistory(ctx *context.Context) { - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - fileName := ctx.Repo.TreePath if len(fileName) == 0 { Commits(ctx) diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index 9af141ee1092a..96c512dd3df95 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -26,7 +26,6 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/web/feed" - "code.gitea.io/gitea/routers/web/repo/shared" shared_user "code.gitea.io/gitea/routers/web/shared/user" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context/upload" @@ -157,13 +156,6 @@ func Releases(ctx *context.Context) { ctx.Data["CanCreateBranch"] = false ctx.Data["HideBranchesInDropdown"] = true - // repo/release_tag_header.tmpl will render sub menu depending on the different permission - if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - } - listOptions := db.ListOptions{ Page: ctx.FormInt("page"), PageSize: ctx.FormInt("limit"), @@ -215,13 +207,6 @@ func TagsList(ctx *context.Context) { ctx.Data["HideBranchesInDropdown"] = true ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived - // repo/release_tag_header.tmpl will render sub menu depending on the different permission - if !ctx.Repo.CanRead(unit.TypeReleases) && ctx.Repo.CanRead(unit.TypeCode) { - if !shared.PrepareForRepoSubMenu(ctx) { - return - } - } - namePattern := ctx.FormTrim("q") listOptions := db.ListOptions{ diff --git a/routers/web/repo/shared/sub_menu.go b/routers/web/repo/shared/license.go similarity index 61% rename from routers/web/repo/shared/sub_menu.go rename to routers/web/repo/shared/license.go index 886bae80b8f7c..c2f7544855af8 100644 --- a/routers/web/repo/shared/sub_menu.go +++ b/routers/web/repo/shared/license.go @@ -9,13 +9,7 @@ import ( repo_service "code.gitea.io/gitea/services/repository" ) -// PrepareForRepoSubMenu will prepare all sub menus' data for some repositories pages -// TODO: moving preparation for commits count, branches count, tags count and repository size to this function -func PrepareForRepoSubMenu(ctx *context.Context) bool { - return prepareForLicenses(ctx) -} - -func prepareForLicenses(ctx *context.Context) bool { +func PrepareForLicenses(ctx *context.Context) bool { repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) if err != nil { ctx.ServerError("GetRepoLicenses", err) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index ae7e079b99035..5b95f7eb7c4f4 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -981,7 +981,8 @@ func renderHomeCode(ctx *context.Context) { return } - if !shared.PrepareForRepoSubMenu(ctx) { + // only show licenses on repository's home page + if !shared.PrepareForLicenses(ctx) { return } From 48731d439f18a28cf5184f27acdf4f02faccd3aa Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 1 Dec 2024 12:34:04 -0800 Subject: [PATCH 5/6] Move all logic to prepare sub menu data --- routers/web/repo/branch.go | 5 +++ routers/web/repo/commit.go | 17 ++++--- routers/web/repo/release.go | 9 ++++ routers/web/repo/shared/license.go | 21 --------- routers/web/repo/shared/submenu.go | 72 ++++++++++++++++++++++++++++++ routers/web/repo/view.go | 4 +- services/context/repo.go | 18 -------- 7 files changed, 100 insertions(+), 46 deletions(-) delete mode 100644 routers/web/repo/shared/license.go create mode 100644 routers/web/repo/shared/submenu.go diff --git a/routers/web/repo/branch.go b/routers/web/repo/branch.go index dc170742b93e4..ee1389cf3de5b 100644 --- a/routers/web/repo/branch.go +++ b/routers/web/repo/branch.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/utils" + "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/forms" release_service "code.gitea.io/gitea/services/release" @@ -46,6 +47,10 @@ func Branches(ctx *context.Context) { ctx.Data["PageIsViewCode"] = true ctx.Data["PageIsBranches"] = true + if !shared.PrepareRepoSubMenu(ctx) { + return + } + page := ctx.FormInt("page") if page <= 1 { page = 1 diff --git a/routers/web/repo/commit.go b/routers/web/repo/commit.go index 0b246eed8107d..c4847e7297d49 100644 --- a/routers/web/repo/commit.go +++ b/routers/web/repo/commit.go @@ -28,6 +28,7 @@ import ( "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers/web/repo/shared" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/gitdiff" repo_service "code.gitea.io/gitea/services/repository" @@ -61,9 +62,7 @@ func Commits(ctx *context.Context) { } ctx.Data["PageIsViewCode"] = true - commitsCount, err := ctx.Repo.GetCommitsCount() - if err != nil { - ctx.ServerError("GetCommitsCount", err) + if !shared.PrepareRepoSubMenu(ctx) { return } @@ -97,9 +96,9 @@ func Commits(ctx *context.Context) { } ctx.Data["Username"] = ctx.Repo.Owner.Name ctx.Data["Reponame"] = ctx.Repo.Repository.Name - ctx.Data["CommitCount"] = commitsCount + ctx.Data["CommitCount"] = ctx.Repo.CommitsCount - pager := context.NewPagination(int(commitsCount), pageSize, page, 5) + pager := context.NewPagination(int(ctx.Repo.CommitsCount), pageSize, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager ctx.HTML(http.StatusOK, tplCommits) @@ -196,6 +195,10 @@ func SearchCommits(ctx *context.Context) { ctx.Data["PageIsCommits"] = true ctx.Data["PageIsViewCode"] = true + if !shared.PrepareRepoSubMenu(ctx) { + return + } + query := ctx.FormTrim("q") if len(query) == 0 { ctx.Redirect(ctx.Repo.RepoLink + "/commits/" + ctx.Repo.BranchNameSubURL()) @@ -230,6 +233,10 @@ func FileHistory(ctx *context.Context) { return } + if !shared.PrepareRepoSubMenu(ctx) { + return + } + commitsCount, err := ctx.Repo.GitRepo.FileCommitsCount(ctx.Repo.RefName, fileName) if err != nil { ctx.ServerError("FileCommitsCount", err) diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index 96c512dd3df95..18efe7b3d0366 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -26,6 +26,7 @@ import ( "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/web/feed" + "code.gitea.io/gitea/routers/web/repo/shared" shared_user "code.gitea.io/gitea/routers/web/shared/user" "code.gitea.io/gitea/services/context" "code.gitea.io/gitea/services/context/upload" @@ -156,6 +157,10 @@ func Releases(ctx *context.Context) { ctx.Data["CanCreateBranch"] = false ctx.Data["HideBranchesInDropdown"] = true + if !shared.PrepareSubmenuTag(ctx) { + return + } + listOptions := db.ListOptions{ Page: ctx.FormInt("page"), PageSize: ctx.FormInt("limit"), @@ -207,6 +212,10 @@ func TagsList(ctx *context.Context) { ctx.Data["HideBranchesInDropdown"] = true ctx.Data["CanCreateRelease"] = ctx.Repo.CanWrite(unit.TypeReleases) && !ctx.Repo.Repository.IsArchived + if !shared.PrepareSubmenuTag(ctx) { + return + } + namePattern := ctx.FormTrim("q") listOptions := db.ListOptions{ diff --git a/routers/web/repo/shared/license.go b/routers/web/repo/shared/license.go deleted file mode 100644 index c2f7544855af8..0000000000000 --- a/routers/web/repo/shared/license.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2024 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package shared - -import ( - repo_model "code.gitea.io/gitea/models/repo" - "code.gitea.io/gitea/services/context" - repo_service "code.gitea.io/gitea/services/repository" -) - -func PrepareForLicenses(ctx *context.Context) bool { - repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) - if err != nil { - ctx.ServerError("GetRepoLicenses", err) - return false - } - ctx.Data["DetectedRepoLicenses"] = repoLicenses.StringList() - ctx.Data["LicenseFileName"] = repo_service.LicenseFileName - return true -} diff --git a/routers/web/repo/shared/submenu.go b/routers/web/repo/shared/submenu.go new file mode 100644 index 0000000000000..3b7a68503fb98 --- /dev/null +++ b/routers/web/repo/shared/submenu.go @@ -0,0 +1,72 @@ +// Copyright 2024 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package shared + +import ( + "code.gitea.io/gitea/models/db" + repo_model "code.gitea.io/gitea/models/repo" + "code.gitea.io/gitea/modules/cache" + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/optional" + "code.gitea.io/gitea/services/context" + repo_service "code.gitea.io/gitea/services/repository" +) + +// PrepareRepoSubMenu prepares data for repository template repo/sub_menu.tmpl +func PrepareRepoSubMenu(ctx *context.Context) bool { + if !PrepareSubmenuTag(ctx) { + return false + } + + if !prepareSubmenuCommit(ctx) { + return false + } + + // only show license on repository's home page + if ctx.Data["PageIsRepoHome"] == true { + if !prepareSubmenuLicense(ctx) { + return false + } + } + + return true +} + +func prepareSubmenuLicense(ctx *context.Context) bool { + repoLicenses, err := repo_model.GetRepoLicenses(ctx, ctx.Repo.Repository) + if err != nil { + ctx.ServerError("GetRepoLicenses", err) + return false + } + ctx.Data["DetectedRepoLicenses"] = repoLicenses.StringList() + ctx.Data["LicenseFileName"] = repo_service.LicenseFileName + return true +} + +func PrepareSubmenuTag(ctx *context.Context) bool { + var err error + ctx.Data["NumTags"], err = db.Count[repo_model.Release](ctx, repo_model.FindReleasesOptions{ + IncludeDrafts: true, + IncludeTags: true, + HasSha1: optional.Some(true), // only draft releases which are created with existing tags + RepoID: ctx.Repo.Repository.ID, + }) + if err != nil { + ctx.ServerError("GetReleaseCountByRepoID", err) + return false + } + return true +} + +func prepareSubmenuCommit(ctx *context.Context) bool { + var err error + ctx.Repo.CommitsCount, err = ctx.Repo.GetCommitsCount() + if err != nil { + ctx.ServerError("GetCommitsCount", err) + return false + } + ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount + ctx.Repo.GitRepo.LastCommitCache = git.NewLastCommitCache(ctx.Repo.CommitsCount, ctx.Repo.Repository.FullName(), ctx.Repo.GitRepo, cache.GetCache()) + return true +} diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index 5b95f7eb7c4f4..cd7141c0c9641 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -924,6 +924,7 @@ func prepareOpenWithEditorApps(ctx *context.Context) { func renderHomeCode(ctx *context.Context) { ctx.Data["PageIsViewCode"] = true + ctx.Data["PageIsRepoHome"] = true ctx.Data["RepositoryUploadEnabled"] = setting.Repository.Upload.Enabled prepareOpenWithEditorApps(ctx) @@ -981,8 +982,7 @@ func renderHomeCode(ctx *context.Context) { return } - // only show licenses on repository's home page - if !shared.PrepareForLicenses(ctx) { + if !shared.PrepareRepoSubMenu(ctx) { return } diff --git a/services/context/repo.go b/services/context/repo.go index 2df5e03fd2ee7..a0fb5d2188d40 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -513,16 +513,6 @@ func RepoAssignment(ctx *Context) context.CancelFunc { ctx.Data["RepoExternalIssuesLink"] = unit.ExternalTrackerConfig().ExternalTrackerURL } - ctx.Data["NumTags"], err = db.Count[repo_model.Release](ctx, repo_model.FindReleasesOptions{ - IncludeDrafts: true, - IncludeTags: true, - HasSha1: optional.Some(true), // only draft releases which are created with existing tags - RepoID: ctx.Repo.Repository.ID, - }) - if err != nil { - ctx.ServerError("GetReleaseCountByRepoID", err) - return nil - } ctx.Data["NumReleases"], err = db.Count[repo_model.Release](ctx, repo_model.FindReleasesOptions{ // only show draft releases for users who can write, read-only users shouldn't see draft releases. IncludeDrafts: ctx.Repo.CanWrite(unit_model.TypeReleases), @@ -1031,14 +1021,6 @@ func RepoRefByType(detectRefType RepoRefType, opts ...RepoRefByTypeOptions) func ctx.Data["IsViewCommit"] = ctx.Repo.IsViewCommit ctx.Data["CanCreateBranch"] = ctx.Repo.CanCreateBranch() - ctx.Repo.CommitsCount, err = ctx.Repo.GetCommitsCount() - if err != nil { - ctx.ServerError("GetCommitsCount", err) - return cancel - } - ctx.Data["CommitsCount"] = ctx.Repo.CommitsCount - ctx.Repo.GitRepo.LastCommitCache = git.NewLastCommitCache(ctx.Repo.CommitsCount, ctx.Repo.Repository.FullName(), ctx.Repo.GitRepo, cache.GetCache()) - return cancel } } From ffc5b6c7a468d19a8ca687eeb4de2cb96fa8b497 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 1 Dec 2024 12:51:04 -0800 Subject: [PATCH 6/6] Move branch number to sub menu shared file --- routers/web/repo/shared/submenu.go | 31 ++++++++++++++++++++++++++++++ services/context/repo.go | 23 ---------------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/routers/web/repo/shared/submenu.go b/routers/web/repo/shared/submenu.go index 3b7a68503fb98..20b485ea9de76 100644 --- a/routers/web/repo/shared/submenu.go +++ b/routers/web/repo/shared/submenu.go @@ -5,16 +5,22 @@ package shared import ( "code.gitea.io/gitea/models/db" + git_model "code.gitea.io/gitea/models/git" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/optional" + repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/services/context" repo_service "code.gitea.io/gitea/services/repository" ) // PrepareRepoSubMenu prepares data for repository template repo/sub_menu.tmpl func PrepareRepoSubMenu(ctx *context.Context) bool { + if !prepareSubmenuBranch(ctx) { + return false + } + if !PrepareSubmenuTag(ctx) { return false } @@ -44,6 +50,31 @@ func prepareSubmenuLicense(ctx *context.Context) bool { return true } +func prepareSubmenuBranch(ctx *context.Context) bool { + branchOpts := git_model.FindBranchOptions{ + RepoID: ctx.Repo.Repository.ID, + IsDeletedBranch: optional.Some(false), + ListOptions: db.ListOptionsAll, + } + branchesTotal, err := db.Count[git_model.Branch](ctx, branchOpts) + if err != nil { + ctx.ServerError("CountBranches", err) + return false + } + + // non-empty repo should have at least 1 branch, so this repository's branches haven't been synced yet + if branchesTotal == 0 { // fallback to do a sync immediately + branchesTotal, err = repo_module.SyncRepoBranches(ctx, ctx.Repo.Repository.ID, 0) + if err != nil { + ctx.ServerError("SyncRepoBranches", err) + return false + } + } + + ctx.Data["BranchesCount"] = branchesTotal + return true +} + func PrepareSubmenuTag(ctx *context.Context) bool { var err error ctx.Data["NumTags"], err = db.Count[repo_model.Release](ctx, repo_model.FindReleasesOptions{ diff --git a/services/context/repo.go b/services/context/repo.go index a0fb5d2188d40..8a69ffd86ca02 100644 --- a/services/context/repo.go +++ b/services/context/repo.go @@ -28,7 +28,6 @@ import ( "code.gitea.io/gitea/modules/httplib" code_indexer "code.gitea.io/gitea/modules/indexer/code" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/optional" repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" @@ -637,28 +636,6 @@ func RepoAssignment(ctx *Context) context.CancelFunc { return cancel } - branchOpts := git_model.FindBranchOptions{ - RepoID: ctx.Repo.Repository.ID, - IsDeletedBranch: optional.Some(false), - ListOptions: db.ListOptionsAll, - } - branchesTotal, err := db.Count[git_model.Branch](ctx, branchOpts) - if err != nil { - ctx.ServerError("CountBranches", err) - return cancel - } - - // non-empty repo should have at least 1 branch, so this repository's branches haven't been synced yet - if branchesTotal == 0 { // fallback to do a sync immediately - branchesTotal, err = repo_module.SyncRepoBranches(ctx, ctx.Repo.Repository.ID, 0) - if err != nil { - ctx.ServerError("SyncRepoBranches", err) - return cancel - } - } - - ctx.Data["BranchesCount"] = branchesTotal - // If no branch is set in the request URL, try to guess a default one. if len(ctx.Repo.BranchName) == 0 { if len(ctx.Repo.Repository.DefaultBranch) > 0 && gitRepo.IsBranchExist(ctx.Repo.Repository.DefaultBranch) {