@@ -12,6 +12,7 @@ import (
1212
1313 "code.gitea.io/gitea/models"
1414 "code.gitea.io/gitea/models/db"
15+ git_model "code.gitea.io/gitea/models/git"
1516 repo_model "code.gitea.io/gitea/models/repo"
1617 "code.gitea.io/gitea/models/unit"
1718 user_model "code.gitea.io/gitea/models/user"
@@ -67,50 +68,24 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *repo_model
6768 return nil
6869}
6970
70- // Releases render releases list page
71- func Releases (ctx * context.Context ) {
72- ctx .Data ["PageIsReleaseList" ] = true
73- ctx .Data ["Title" ] = ctx .Tr ("repo.release.releases" )
74- ctx .Data ["IsViewBranch" ] = false
75- ctx .Data ["IsViewTag" ] = true
76- // Disable the showCreateNewBranch form in the dropdown on this page.
77- ctx .Data ["CanCreateBranch" ] = false
78- ctx .Data ["HideBranchesInDropdown" ] = true
79-
80- listOptions := db.ListOptions {
81- Page : ctx .FormInt ("page" ),
82- PageSize : ctx .FormInt ("limit" ),
83- }
84- if listOptions .PageSize == 0 {
85- listOptions .PageSize = setting .Repository .Release .DefaultPagingNum
86- }
87- if listOptions .PageSize > setting .API .MaxResponseItems {
88- listOptions .PageSize = setting .API .MaxResponseItems
89- }
90-
91- writeAccess := ctx .Repo .CanWrite (unit .TypeReleases )
92- ctx .Data ["CanCreateRelease" ] = writeAccess && ! ctx .Repo .Repository .IsArchived
93-
94- opts := repo_model.FindReleasesOptions {
95- ListOptions : listOptions ,
96- // only show draft releases for users who can write, read-only users shouldn't see draft releases.
97- IncludeDrafts : writeAccess ,
98- RepoID : ctx .Repo .Repository .ID ,
99- }
71+ type ReleaseInfo struct {
72+ Release * repo_model.Release
73+ CommitStatus * git_model.CommitStatus
74+ CommitStatuses []* git_model.CommitStatus
75+ }
10076
77+ func getReleaseInfos (ctx * context.Context , opts * repo_model.FindReleasesOptions ) ([]* ReleaseInfo , error ) {
10178 releases , err := db .Find [repo_model.Release ](ctx , opts )
10279 if err != nil {
103- ctx .ServerError ("GetReleasesByRepoID" , err )
104- return
80+ return nil , err
10581 }
10682
10783 for _ , release := range releases {
10884 release .Repo = ctx .Repo .Repository
10985 }
11086
11187 if err = repo_model .GetReleaseAttachments (ctx , releases ... ); err != nil {
112- ctx .ServerError ("GetReleaseAttachments" , err )
113- return
88+ return nil , err
11489 }
11590
11691 // Temporary cache commits count of used branches to speed up.
@@ -121,15 +96,17 @@ func Releases(ctx *context.Context) {
12196 }
12297 var ok bool
12398
99+ canReadActions := ctx .Repo .CanRead (unit .TypeActions )
100+
101+ releaseInfos := make ([]* ReleaseInfo , 0 , len (releases ))
124102 for _ , r := range releases {
125103 if r .Publisher , ok = cacheUsers [r .PublisherID ]; ! ok {
126104 r .Publisher , err = user_model .GetUserByID (ctx , r .PublisherID )
127105 if err != nil {
128106 if user_model .IsErrUserNotExist (err ) {
129107 r .Publisher = user_model .NewGhostUser ()
130108 } else {
131- ctx .ServerError ("GetUserByID" , err )
132- return
109+ return nil , err
133110 }
134111 }
135112 cacheUsers [r .PublisherID ] = r .Publisher
@@ -144,24 +121,74 @@ func Releases(ctx *context.Context) {
144121 Ctx : ctx ,
145122 }, r .Note )
146123 if err != nil {
147- ctx .ServerError ("RenderString" , err )
148- return
124+ return nil , err
149125 }
150126
151- if r .IsDraft {
152- continue
127+ if ! r .IsDraft {
128+ if err := calReleaseNumCommitsBehind (ctx .Repo , r , countCache ); err != nil {
129+ return nil , err
130+ }
153131 }
154132
155- if err := calReleaseNumCommitsBehind (ctx .Repo , r , countCache ); err != nil {
156- ctx .ServerError ("calReleaseNumCommitsBehind" , err )
157- return
133+ info := & ReleaseInfo {
134+ Release : r ,
158135 }
136+
137+ if canReadActions {
138+ statuses , _ , err := git_model .GetLatestCommitStatus (ctx , r .Repo .ID , r .Sha1 , db.ListOptions {ListAll : true })
139+ if err != nil {
140+ return nil , err
141+ }
142+
143+ info .CommitStatus = git_model .CalcCommitStatus (statuses )
144+ info .CommitStatuses = statuses
145+ }
146+
147+ releaseInfos = append (releaseInfos , info )
148+ }
149+
150+ return releaseInfos , nil
151+ }
152+
153+ // Releases render releases list page
154+ func Releases (ctx * context.Context ) {
155+ ctx .Data ["PageIsReleaseList" ] = true
156+ ctx .Data ["Title" ] = ctx .Tr ("repo.release.releases" )
157+ ctx .Data ["IsViewBranch" ] = false
158+ ctx .Data ["IsViewTag" ] = true
159+ // Disable the showCreateNewBranch form in the dropdown on this page.
160+ ctx .Data ["CanCreateBranch" ] = false
161+ ctx .Data ["HideBranchesInDropdown" ] = true
162+
163+ listOptions := db.ListOptions {
164+ Page : ctx .FormInt ("page" ),
165+ PageSize : ctx .FormInt ("limit" ),
166+ }
167+ if listOptions .PageSize == 0 {
168+ listOptions .PageSize = setting .Repository .Release .DefaultPagingNum
169+ }
170+ if listOptions .PageSize > setting .API .MaxResponseItems {
171+ listOptions .PageSize = setting .API .MaxResponseItems
172+ }
173+
174+ writeAccess := ctx .Repo .CanWrite (unit .TypeReleases )
175+ ctx .Data ["CanCreateRelease" ] = writeAccess && ! ctx .Repo .Repository .IsArchived
176+
177+ releases , err := getReleaseInfos (ctx , & repo_model.FindReleasesOptions {
178+ ListOptions : listOptions ,
179+ // only show draft releases for users who can write, read-only users shouldn't see draft releases.
180+ IncludeDrafts : writeAccess ,
181+ RepoID : ctx .Repo .Repository .ID ,
182+ })
183+ if err != nil {
184+ ctx .ServerError ("getReleaseInfos" , err )
185+ return
159186 }
160187
161188 ctx .Data ["Releases" ] = releases
162189
163190 numReleases := ctx .Data ["NumReleases" ].(int64 )
164- pager := context .NewPagination (int (numReleases ), opts .PageSize , opts .Page , 5 )
191+ pager := context .NewPagination (int (numReleases ), listOptions .PageSize , listOptions .Page , 5 )
165192 pager .SetDefaultParams (ctx )
166193 ctx .Data ["Page" ] = pager
167194
@@ -249,59 +276,32 @@ func SingleRelease(ctx *context.Context) {
249276 writeAccess := ctx .Repo .CanWrite (unit .TypeReleases )
250277 ctx .Data ["CanCreateRelease" ] = writeAccess && ! ctx .Repo .Repository .IsArchived
251278
252- release , err := repo_model .GetRelease (ctx , ctx .Repo .Repository .ID , ctx .Params ("*" ))
279+ releases , err := getReleaseInfos (ctx , & repo_model.FindReleasesOptions {
280+ ListOptions : db.ListOptions {Page : 1 , PageSize : 1 },
281+ RepoID : ctx .Repo .Repository .ID ,
282+ TagNames : []string {ctx .Params ("*" )},
283+ // only show draft releases for users who can write, read-only users shouldn't see draft releases.
284+ IncludeDrafts : writeAccess ,
285+ })
253286 if err != nil {
254- if repo_model . IsErrReleaseNotExist ( err ) {
255- ctx . NotFound ( "GetRelease" , err )
256- return
257- }
258- ctx .ServerError ( "GetReleasesByRepoID " , err )
287+ ctx . ServerError ( "getReleaseInfos" , err )
288+ return
289+ }
290+ if len ( releases ) != 1 {
291+ ctx .NotFound ( "SingleRelease " , err )
259292 return
260293 }
294+
295+ release := releases [0 ].Release
296+
261297 ctx .Data ["PageIsSingleTag" ] = release .IsTag
262298 if release .IsTag {
263299 ctx .Data ["Title" ] = release .TagName
264300 } else {
265301 ctx .Data ["Title" ] = release .Title
266302 }
267303
268- release .Repo = ctx .Repo .Repository
269-
270- err = repo_model .GetReleaseAttachments (ctx , release )
271- if err != nil {
272- ctx .ServerError ("GetReleaseAttachments" , err )
273- return
274- }
275-
276- release .Publisher , err = user_model .GetUserByID (ctx , release .PublisherID )
277- if err != nil {
278- if user_model .IsErrUserNotExist (err ) {
279- release .Publisher = user_model .NewGhostUser ()
280- } else {
281- ctx .ServerError ("GetUserByID" , err )
282- return
283- }
284- }
285- if ! release .IsDraft {
286- if err := calReleaseNumCommitsBehind (ctx .Repo , release , make (map [string ]int64 )); err != nil {
287- ctx .ServerError ("calReleaseNumCommitsBehind" , err )
288- return
289- }
290- }
291- release .Note , err = markdown .RenderString (& markup.RenderContext {
292- Links : markup.Links {
293- Base : ctx .Repo .RepoLink ,
294- },
295- Metas : ctx .Repo .Repository .ComposeMetas (ctx ),
296- GitRepo : ctx .Repo .GitRepo ,
297- Ctx : ctx ,
298- }, release .Note )
299- if err != nil {
300- ctx .ServerError ("RenderString" , err )
301- return
302- }
303-
304- ctx .Data ["Releases" ] = []* repo_model.Release {release }
304+ ctx .Data ["Releases" ] = releases
305305 ctx .HTML (http .StatusOK , tplReleasesList )
306306}
307307
0 commit comments