@@ -12,6 +12,7 @@ import (
12
12
13
13
"code.gitea.io/gitea/models"
14
14
"code.gitea.io/gitea/models/db"
15
+ git_model "code.gitea.io/gitea/models/git"
15
16
repo_model "code.gitea.io/gitea/models/repo"
16
17
"code.gitea.io/gitea/models/unit"
17
18
user_model "code.gitea.io/gitea/models/user"
@@ -67,50 +68,24 @@ func calReleaseNumCommitsBehind(repoCtx *context.Repository, release *repo_model
67
68
return nil
68
69
}
69
70
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
+ }
100
76
77
+ func getReleaseInfos (ctx * context.Context , opts * repo_model.FindReleasesOptions ) ([]* ReleaseInfo , error ) {
101
78
releases , err := db .Find [repo_model.Release ](ctx , opts )
102
79
if err != nil {
103
- ctx .ServerError ("GetReleasesByRepoID" , err )
104
- return
80
+ return nil , err
105
81
}
106
82
107
83
for _ , release := range releases {
108
84
release .Repo = ctx .Repo .Repository
109
85
}
110
86
111
87
if err = repo_model .GetReleaseAttachments (ctx , releases ... ); err != nil {
112
- ctx .ServerError ("GetReleaseAttachments" , err )
113
- return
88
+ return nil , err
114
89
}
115
90
116
91
// Temporary cache commits count of used branches to speed up.
@@ -121,15 +96,17 @@ func Releases(ctx *context.Context) {
121
96
}
122
97
var ok bool
123
98
99
+ canReadActions := ctx .Repo .CanRead (unit .TypeActions )
100
+
101
+ releaseInfos := make ([]* ReleaseInfo , 0 , len (releases ))
124
102
for _ , r := range releases {
125
103
if r .Publisher , ok = cacheUsers [r .PublisherID ]; ! ok {
126
104
r .Publisher , err = user_model .GetUserByID (ctx , r .PublisherID )
127
105
if err != nil {
128
106
if user_model .IsErrUserNotExist (err ) {
129
107
r .Publisher = user_model .NewGhostUser ()
130
108
} else {
131
- ctx .ServerError ("GetUserByID" , err )
132
- return
109
+ return nil , err
133
110
}
134
111
}
135
112
cacheUsers [r .PublisherID ] = r .Publisher
@@ -144,24 +121,74 @@ func Releases(ctx *context.Context) {
144
121
Ctx : ctx ,
145
122
}, r .Note )
146
123
if err != nil {
147
- ctx .ServerError ("RenderString" , err )
148
- return
124
+ return nil , err
149
125
}
150
126
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
+ }
153
131
}
154
132
155
- if err := calReleaseNumCommitsBehind (ctx .Repo , r , countCache ); err != nil {
156
- ctx .ServerError ("calReleaseNumCommitsBehind" , err )
157
- return
133
+ info := & ReleaseInfo {
134
+ Release : r ,
158
135
}
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
159
186
}
160
187
161
188
ctx .Data ["Releases" ] = releases
162
189
163
190
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 )
165
192
pager .SetDefaultParams (ctx )
166
193
ctx .Data ["Page" ] = pager
167
194
@@ -249,59 +276,32 @@ func SingleRelease(ctx *context.Context) {
249
276
writeAccess := ctx .Repo .CanWrite (unit .TypeReleases )
250
277
ctx .Data ["CanCreateRelease" ] = writeAccess && ! ctx .Repo .Repository .IsArchived
251
278
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
+ })
253
286
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 )
259
292
return
260
293
}
294
+
295
+ release := releases [0 ].Release
296
+
261
297
ctx .Data ["PageIsSingleTag" ] = release .IsTag
262
298
if release .IsTag {
263
299
ctx .Data ["Title" ] = release .TagName
264
300
} else {
265
301
ctx .Data ["Title" ] = release .Title
266
302
}
267
303
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
305
305
ctx .HTML (http .StatusOK , tplReleasesList )
306
306
}
307
307
0 commit comments