aboutsummaryrefslogtreecommitdiffstats
path: root/models/git
diff options
context:
space:
mode:
authorKN4CK3R <admin@oldschoolhack.me>2024-01-15 15:07:32 +0100
committerGitHub <noreply@github.com>2024-01-15 14:07:32 +0000
commit3793ec4d141c718462a273c02d147645c56c341a (patch)
treef1bdb905363cf6dc050c0b6ed366bb4704f1564f /models/git
parentb0e6c255359f754fd94c81e5762ba634a4b23261 (diff)
downloadgitea-3793ec4d141c718462a273c02d147645c56c341a.tar.gz
gitea-3793ec4d141c718462a273c02d147645c56c341a.zip
Fix `GetCommitStatuses` (#28787)
Fixes #28764.
Diffstat (limited to 'models/git')
-rw-r--r--models/git/commit_status.go54
-rw-r--r--models/git/commit_status_test.go15
2 files changed, 33 insertions, 36 deletions
diff --git a/models/git/commit_status.go b/models/git/commit_status.go
index 488e45de26..c126d17f20 100644
--- a/models/git/commit_status.go
+++ b/models/git/commit_status.go
@@ -25,7 +25,6 @@ import (
"code.gitea.io/gitea/modules/translation"
"xorm.io/builder"
- "xorm.io/xorm"
)
// CommitStatus holds a single Status of a single Commit
@@ -221,57 +220,42 @@ func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus {
// CommitStatusOptions holds the options for query commit statuses
type CommitStatusOptions struct {
db.ListOptions
+ RepoID int64
+ SHA string
State string
SortType string
}
-// GetCommitStatuses returns all statuses for a given commit.
-func GetCommitStatuses(ctx context.Context, repo *repo_model.Repository, sha string, opts *CommitStatusOptions) ([]*CommitStatus, int64, error) {
- if opts.Page <= 0 {
- opts.Page = 1
- }
- if opts.PageSize <= 0 {
- opts.Page = setting.ItemsPerPage
- }
-
- countSession := listCommitStatusesStatement(ctx, repo, sha, opts)
- countSession = db.SetSessionPagination(countSession, opts)
- maxResults, err := countSession.Count(new(CommitStatus))
- if err != nil {
- log.Error("Count PRs: %v", err)
- return nil, maxResults, err
+func (opts *CommitStatusOptions) ToConds() builder.Cond {
+ var cond builder.Cond = builder.Eq{
+ "repo_id": opts.RepoID,
+ "sha": opts.SHA,
}
- statuses := make([]*CommitStatus, 0, opts.PageSize)
- findSession := listCommitStatusesStatement(ctx, repo, sha, opts)
- findSession = db.SetSessionPagination(findSession, opts)
- sortCommitStatusesSession(findSession, opts.SortType)
- return statuses, maxResults, findSession.Find(&statuses)
-}
-
-func listCommitStatusesStatement(ctx context.Context, repo *repo_model.Repository, sha string, opts *CommitStatusOptions) *xorm.Session {
- sess := db.GetEngine(ctx).Where("repo_id = ?", repo.ID).And("sha = ?", sha)
switch opts.State {
case "pending", "success", "error", "failure", "warning":
- sess.And("state = ?", opts.State)
+ cond = cond.And(builder.Eq{
+ "state": opts.State,
+ })
}
- return sess
+
+ return cond
}
-func sortCommitStatusesSession(sess *xorm.Session, sortType string) {
- switch sortType {
+func (opts *CommitStatusOptions) ToOrders() string {
+ switch opts.SortType {
case "oldest":
- sess.Asc("created_unix")
+ return "created_unix ASC"
case "recentupdate":
- sess.Desc("updated_unix")
+ return "updated_unix DESC"
case "leastupdate":
- sess.Asc("updated_unix")
+ return "updated_unix ASC"
case "leastindex":
- sess.Desc("index")
+ return "`index` DESC"
case "highestindex":
- sess.Asc("index")
+ return "`index` ASC"
default:
- sess.Desc("created_unix")
+ return "created_unix DESC"
}
}
diff --git a/models/git/commit_status_test.go b/models/git/commit_status_test.go
index 2197433b3e..f7dd8597ed 100644
--- a/models/git/commit_status_test.go
+++ b/models/git/commit_status_test.go
@@ -22,7 +22,11 @@ func TestGetCommitStatuses(t *testing.T) {
sha1 := "1234123412341234123412341234123412341234"
- statuses, maxResults, err := git_model.GetCommitStatuses(db.DefaultContext, repo1, sha1, &git_model.CommitStatusOptions{ListOptions: db.ListOptions{Page: 1, PageSize: 50}})
+ statuses, maxResults, err := db.FindAndCount[git_model.CommitStatus](db.DefaultContext, &git_model.CommitStatusOptions{
+ ListOptions: db.ListOptions{Page: 1, PageSize: 50},
+ RepoID: repo1.ID,
+ SHA: sha1,
+ })
assert.NoError(t, err)
assert.Equal(t, int(maxResults), 5)
assert.Len(t, statuses, 5)
@@ -46,4 +50,13 @@ func TestGetCommitStatuses(t *testing.T) {
assert.Equal(t, "deploy/awesomeness", statuses[4].Context)
assert.Equal(t, structs.CommitStatusError, statuses[4].State)
assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[4].APIURL(db.DefaultContext))
+
+ statuses, maxResults, err = db.FindAndCount[git_model.CommitStatus](db.DefaultContext, &git_model.CommitStatusOptions{
+ ListOptions: db.ListOptions{Page: 2, PageSize: 50},
+ RepoID: repo1.ID,
+ SHA: sha1,
+ })
+ assert.NoError(t, err)
+ assert.Equal(t, int(maxResults), 5)
+ assert.Empty(t, statuses)
}