@@ -11,6 +11,7 @@ import (
1111
1212 "code.gitea.io/gitea/models"
1313 "code.gitea.io/gitea/models/db"
14+ "code.gitea.io/gitea/models/perm"
1415 repo_model "code.gitea.io/gitea/models/repo"
1516 "code.gitea.io/gitea/models/unit"
1617 user_model "code.gitea.io/gitea/models/user"
@@ -31,6 +32,7 @@ import (
3132const (
3233 tplReleases base.TplName = "repo/release/list"
3334 tplReleaseNew base.TplName = "repo/release/new"
35+ tplTagsList base.TplName = "repo/tag/list"
3436)
3537
3638// calReleaseNumCommitsBehind calculates given release has how many commits behind release target.
@@ -68,7 +70,11 @@ func Releases(ctx *context.Context) {
6870
6971// TagsList render tags list page
7072func TagsList (ctx * context.Context ) {
71- releasesOrTags (ctx , true )
73+ if ctx .Repo .CanAccess (perm .AccessModeRead , unit .TypeReleases ) {
74+ releasesOrTags (ctx , true )
75+ } else {
76+ tags (ctx )
77+ }
7278}
7379
7480func releasesOrTags (ctx * context.Context , isTagList bool ) {
@@ -200,6 +206,51 @@ func releasesOrTags(ctx *context.Context, isTagList bool) {
200206 ctx .HTML (http .StatusOK , tplReleases )
201207}
202208
209+ // tags render the tags list if repo's release is disabled.
210+ func tags (ctx * context.Context ) {
211+ ctx .Data ["PageIsTagList" ] = true
212+ ctx .Data ["Title" ] = ctx .Tr ("repo.release.tags" )
213+
214+ listOptions := db.ListOptions {
215+ Page : ctx .FormInt ("page" ),
216+ PageSize : ctx .FormInt ("limit" ),
217+ }
218+ if listOptions .PageSize == 0 {
219+ listOptions .PageSize = setting .Repository .Release .DefaultPagingNum
220+ }
221+ if listOptions .PageSize > setting .API .MaxResponseItems {
222+ listOptions .PageSize = setting .API .MaxResponseItems
223+ }
224+
225+ opts := repo_model.FindReleasesOptions {
226+ ListOptions : listOptions ,
227+ IncludeDrafts : true ,
228+ IncludeTags : true ,
229+ HasSha1 : util .OptionalBoolTrue ,
230+ }
231+
232+ releases , err := repo_model .GetReleasesByRepoID (ctx , ctx .Repo .Repository .ID , opts )
233+ if err != nil {
234+ ctx .ServerError ("GetReleasesByRepoID" , err )
235+ return
236+ }
237+
238+ count , err := repo_model .GetReleaseCountByRepoID (ctx , ctx .Repo .Repository .ID , opts )
239+ if err != nil {
240+ ctx .ServerError ("GetReleaseCountByRepoID" , err )
241+ return
242+ }
243+
244+ ctx .Data ["Releases" ] = releases
245+ ctx .Data ["ReleasesNum" ] = len (releases )
246+
247+ pager := context .NewPagination (int (count ), opts .PageSize , opts .Page , 5 )
248+ pager .SetDefaultParams (ctx )
249+ ctx .Data ["Page" ] = pager
250+
251+ ctx .HTML (http .StatusOK , tplTagsList )
252+ }
253+
203254// ReleasesFeedRSS get feeds for releases in RSS format
204255func ReleasesFeedRSS (ctx * context.Context ) {
205256 releasesOrTagsFeed (ctx , true , "rss" )
0 commit comments