Skip to content

Commit cb6ff2c

Browse files
KN4CK3Rsilverwind
authored andcommitted
Fix GetCommitStatuses (go-gitea#28787)
Fixes go-gitea#28764.
1 parent 8c59caa commit cb6ff2c

File tree

3 files changed

+37
-37
lines changed

3 files changed

+37
-37
lines changed

models/git/commit_status.go

+19-35
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"code.gitea.io/gitea/modules/translation"
2626

2727
"xorm.io/builder"
28-
"xorm.io/xorm"
2928
)
3029

3130
// CommitStatus holds a single Status of a single Commit
@@ -221,57 +220,42 @@ func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus {
221220
// CommitStatusOptions holds the options for query commit statuses
222221
type CommitStatusOptions struct {
223222
db.ListOptions
223+
RepoID int64
224+
SHA string
224225
State string
225226
SortType string
226227
}
227228

228-
// GetCommitStatuses returns all statuses for a given commit.
229-
func GetCommitStatuses(ctx context.Context, repo *repo_model.Repository, sha string, opts *CommitStatusOptions) ([]*CommitStatus, int64, error) {
230-
if opts.Page <= 0 {
231-
opts.Page = 1
232-
}
233-
if opts.PageSize <= 0 {
234-
opts.Page = setting.ItemsPerPage
235-
}
236-
237-
countSession := listCommitStatusesStatement(ctx, repo, sha, opts)
238-
countSession = db.SetSessionPagination(countSession, opts)
239-
maxResults, err := countSession.Count(new(CommitStatus))
240-
if err != nil {
241-
log.Error("Count PRs: %v", err)
242-
return nil, maxResults, err
229+
func (opts *CommitStatusOptions) ToConds() builder.Cond {
230+
var cond builder.Cond = builder.Eq{
231+
"repo_id": opts.RepoID,
232+
"sha": opts.SHA,
243233
}
244234

245-
statuses := make([]*CommitStatus, 0, opts.PageSize)
246-
findSession := listCommitStatusesStatement(ctx, repo, sha, opts)
247-
findSession = db.SetSessionPagination(findSession, opts)
248-
sortCommitStatusesSession(findSession, opts.SortType)
249-
return statuses, maxResults, findSession.Find(&statuses)
250-
}
251-
252-
func listCommitStatusesStatement(ctx context.Context, repo *repo_model.Repository, sha string, opts *CommitStatusOptions) *xorm.Session {
253-
sess := db.GetEngine(ctx).Where("repo_id = ?", repo.ID).And("sha = ?", sha)
254235
switch opts.State {
255236
case "pending", "success", "error", "failure", "warning":
256-
sess.And("state = ?", opts.State)
237+
cond = cond.And(builder.Eq{
238+
"state": opts.State,
239+
})
257240
}
258-
return sess
241+
242+
return cond
259243
}
260244

261-
func sortCommitStatusesSession(sess *xorm.Session, sortType string) {
262-
switch sortType {
245+
func (opts *CommitStatusOptions) ToOrders() string {
246+
switch opts.SortType {
263247
case "oldest":
264-
sess.Asc("created_unix")
248+
return "created_unix ASC"
265249
case "recentupdate":
266-
sess.Desc("updated_unix")
250+
return "updated_unix DESC"
267251
case "leastupdate":
268-
sess.Asc("updated_unix")
252+
return "updated_unix ASC"
269253
case "leastindex":
270-
sess.Desc("index")
254+
return "`index` DESC"
271255
case "highestindex":
272-
sess.Asc("index")
256+
return "`index` ASC"
273257
default:
274-
sess.Desc("created_unix")
258+
return "created_unix DESC"
275259
}
276260
}
277261

models/git/commit_status_test.go

+14-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ func TestGetCommitStatuses(t *testing.T) {
2222

2323
sha1 := "1234123412341234123412341234123412341234"
2424

25-
statuses, maxResults, err := git_model.GetCommitStatuses(db.DefaultContext, repo1, sha1, &git_model.CommitStatusOptions{ListOptions: db.ListOptions{Page: 1, PageSize: 50}})
25+
statuses, maxResults, err := db.FindAndCount[git_model.CommitStatus](db.DefaultContext, &git_model.CommitStatusOptions{
26+
ListOptions: db.ListOptions{Page: 1, PageSize: 50},
27+
RepoID: repo1.ID,
28+
SHA: sha1,
29+
})
2630
assert.NoError(t, err)
2731
assert.Equal(t, int(maxResults), 5)
2832
assert.Len(t, statuses, 5)
@@ -46,4 +50,13 @@ func TestGetCommitStatuses(t *testing.T) {
4650
assert.Equal(t, "deploy/awesomeness", statuses[4].Context)
4751
assert.Equal(t, structs.CommitStatusError, statuses[4].State)
4852
assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[4].APIURL(db.DefaultContext))
53+
54+
statuses, maxResults, err = db.FindAndCount[git_model.CommitStatus](db.DefaultContext, &git_model.CommitStatusOptions{
55+
ListOptions: db.ListOptions{Page: 2, PageSize: 50},
56+
RepoID: repo1.ID,
57+
SHA: sha1,
58+
})
59+
assert.NoError(t, err)
60+
assert.Equal(t, int(maxResults), 5)
61+
assert.Empty(t, statuses)
4962
}

routers/api/v1/repo/status.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"net/http"
99

10+
"code.gitea.io/gitea/models/db"
1011
git_model "code.gitea.io/gitea/models/git"
1112
"code.gitea.io/gitea/modules/context"
1213
api "code.gitea.io/gitea/modules/structs"
@@ -194,8 +195,10 @@ func getCommitStatuses(ctx *context.APIContext, sha string) {
194195

195196
listOptions := utils.GetListOptions(ctx)
196197

197-
statuses, maxResults, err := git_model.GetCommitStatuses(ctx, repo, sha, &git_model.CommitStatusOptions{
198+
statuses, maxResults, err := db.FindAndCount[git_model.CommitStatus](ctx, &git_model.CommitStatusOptions{
198199
ListOptions: listOptions,
200+
RepoID: repo.ID,
201+
SHA: sha,
199202
SortType: ctx.FormTrim("sort"),
200203
State: ctx.FormTrim("state"),
201204
})

0 commit comments

Comments
 (0)