aboutsummaryrefslogtreecommitdiffstats
path: root/routers/web/repo/release.go
diff options
context:
space:
mode:
authorZettat123 <zettat123@gmail.com>2023-09-28 21:21:47 +0800
committerGitHub <noreply@github.com>2023-09-28 13:21:47 +0000
commit3fcad582c9b9bfe66f4a346652f82b1aaf18430d (patch)
tree05e37e3eeeab2823640bbcc86d2602700432dbca /routers/web/repo/release.go
parent1c039b4e1e57f31caea9c873e4f9c79300ddb344 (diff)
downloadgitea-3fcad582c9b9bfe66f4a346652f82b1aaf18430d.tar.gz
gitea-3fcad582c9b9bfe66f4a346652f82b1aaf18430d.zip
Improvements of releases list and tags list (#25859)
Follow #23465 and #25624 This PR introduces the following improvements: - We do not need to call `GetTags` to get tags because tags have been loaded by `RepoAssignment` https://github.com/go-gitea/gitea/blob/ef90fdbd1d7e1f62ed5bf18757e00e97817eb602/modules/context/repo.go#L663-L668 - Similarly, the number of tags and releases also have been loaded by `RepoAssignment`, so the related code has been removed from the handlers. The query condition of `GetReleaseCountByRepoID` in `RepoAssignment` has been changed to include draft releases. https://github.com/go-gitea/gitea/blob/ef90fdbd1d7e1f62ed5bf18757e00e97817eb602/modules/context/repo.go#L538-L551 - `releasesOrTags` function has been removed. The code for rendering releases list and tags list moved to `Releases` and `TagList` respectively.
Diffstat (limited to 'routers/web/repo/release.go')
-rw-r--r--routers/web/repo/release.go97
1 files changed, 50 insertions, 47 deletions
diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go
index 91ade32ccc..61f1973125 100644
--- a/routers/web/repo/release.go
+++ b/routers/web/repo/release.go
@@ -71,18 +71,6 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *repo_model
func Releases(ctx *context.Context) {
ctx.Data["PageIsReleaseList"] = true
ctx.Data["Title"] = ctx.Tr("repo.release.releases")
- releasesOrTags(ctx, false)
-}
-
-// TagsList render tags list page
-func TagsList(ctx *context.Context) {
- ctx.Data["PageIsTagList"] = true
- ctx.Data["Title"] = ctx.Tr("repo.release.tags")
- releasesOrTags(ctx, true)
-}
-
-func releasesOrTags(ctx *context.Context, isTagList bool) {
- ctx.Data["DefaultBranch"] = ctx.Repo.Repository.DefaultBranch
ctx.Data["IsViewBranch"] = false
ctx.Data["IsViewTag"] = true
// Disable the showCreateNewBranch form in the dropdown on this page.
@@ -100,35 +88,13 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
listOptions.PageSize = setting.API.MaxResponseItems
}
- // TODO(20073) tags are used for compare feature which needs all tags
- // filtering is done on the client-side atm
- tagListStart, tagListEnd := 0, 0
- if isTagList {
- tagListStart, tagListEnd = listOptions.GetStartEnd()
- }
-
- tags, err := ctx.Repo.GitRepo.GetTags(tagListStart, tagListEnd)
- if err != nil {
- ctx.ServerError("GetTags", err)
- return
- }
- ctx.Data["Tags"] = tags
-
writeAccess := ctx.Repo.CanWrite(unit.TypeReleases)
ctx.Data["CanCreateRelease"] = writeAccess && !ctx.Repo.Repository.IsArchived
opts := repo_model.FindReleasesOptions{
ListOptions: listOptions,
- }
- if isTagList {
- // for the tags list page, show all releases with real tags (having real commit-id),
- // the drafts should also be included because a real tag might be used as a draft.
- opts.IncludeDrafts = true
- opts.IncludeTags = true
- opts.HasSha1 = util.OptionalBoolTrue
- } else {
// only show draft releases for users who can write, read-only users shouldn't see draft releases.
- opts.IncludeDrafts = writeAccess
+ IncludeDrafts: writeAccess,
}
releases, err := repo_model.GetReleasesByRepoID(ctx, ctx.Repo.Repository.ID, opts)
@@ -137,12 +103,6 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
return
}
- count, err := repo_model.GetReleaseCountByRepoID(ctx, ctx.Repo.Repository.ID, opts)
- if err != nil {
- ctx.ServerError("GetReleaseCountByRepoID", err)
- return
- }
-
for _, release := range releases {
release.Repo = ctx.Repo.Repository
}
@@ -197,16 +157,59 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
ctx.Data["Releases"] = releases
- pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5)
+ numReleases := ctx.Data["NumReleases"].(int64)
+ pager := context.NewPagination(int(numReleases), opts.PageSize, opts.Page, 5)
pager.SetDefaultParams(ctx)
ctx.Data["Page"] = pager
- if isTagList {
- ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
- ctx.HTML(http.StatusOK, tplTagsList)
- } else {
- ctx.HTML(http.StatusOK, tplReleasesList)
+ ctx.HTML(http.StatusOK, tplReleasesList)
+}
+
+// TagsList render tags list page
+func TagsList(ctx *context.Context) {
+ ctx.Data["PageIsTagList"] = true
+ ctx.Data["Title"] = ctx.Tr("repo.release.tags")
+ ctx.Data["IsViewBranch"] = false
+ ctx.Data["IsViewTag"] = true
+ // Disable the showCreateNewBranch form in the dropdown on this page.
+ ctx.Data["CanCreateBranch"] = false
+ ctx.Data["HideBranchesInDropdown"] = true
+
+ listOptions := db.ListOptions{
+ Page: ctx.FormInt("page"),
+ PageSize: ctx.FormInt("limit"),
+ }
+ if listOptions.PageSize == 0 {
+ listOptions.PageSize = setting.Repository.Release.DefaultPagingNum
+ }
+ if listOptions.PageSize > setting.API.MaxResponseItems {
+ listOptions.PageSize = setting.API.MaxResponseItems
+ }
+
+ opts := repo_model.FindReleasesOptions{
+ ListOptions: listOptions,
+ // for the tags list page, show all releases with real tags (having real commit-id),
+ // the drafts should also be included because a real tag might be used as a draft.
+ IncludeDrafts: true,
+ IncludeTags: true,
+ HasSha1: util.OptionalBoolTrue,
+ }
+
+ releases, err := repo_model.GetReleasesByRepoID(ctx, ctx.Repo.Repository.ID, opts)
+ if err != nil {
+ ctx.ServerError("GetReleasesByRepoID", err)
+ return
}
+
+ ctx.Data["Releases"] = releases
+
+ numTags := ctx.Data["NumTags"].(int64)
+ pager := context.NewPagination(int(numTags), opts.PageSize, opts.Page, 5)
+ pager.SetDefaultParams(ctx)
+ ctx.Data["Page"] = pager
+
+ ctx.Data["PageIsViewCode"] = !ctx.Repo.Repository.UnitEnabled(ctx, unit.TypeReleases)
+ ctx.HTML(http.StatusOK, tplTagsList)
}
// ReleasesFeedRSS get feeds for releases in RSS format