parent
cbf366643b
commit
ae99233db0
3 changed files with 49 additions and 37 deletions
|
@ -25,7 +25,6 @@ import (
|
||||||
"code.gitea.io/gitea/modules/translation"
|
"code.gitea.io/gitea/modules/translation"
|
||||||
|
|
||||||
"xorm.io/builder"
|
"xorm.io/builder"
|
||||||
"xorm.io/xorm"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// CommitStatus holds a single Status of a single Commit
|
// CommitStatus holds a single Status of a single Commit
|
||||||
|
@ -220,58 +219,56 @@ func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus {
|
||||||
// CommitStatusOptions holds the options for query commit statuses
|
// CommitStatusOptions holds the options for query commit statuses
|
||||||
type CommitStatusOptions struct {
|
type CommitStatusOptions struct {
|
||||||
db.ListOptions
|
db.ListOptions
|
||||||
|
RepoID int64
|
||||||
|
SHA string
|
||||||
State string
|
State string
|
||||||
SortType string
|
SortType string
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCommitStatuses returns all statuses for a given commit.
|
func (opts *CommitStatusOptions) ToConds() builder.Cond {
|
||||||
func GetCommitStatuses(ctx context.Context, repo *repo_model.Repository, sha string, opts *CommitStatusOptions) ([]*CommitStatus, int64, error) {
|
var cond builder.Cond = builder.Eq{
|
||||||
if opts.Page <= 0 {
|
"repo_id": opts.RepoID,
|
||||||
opts.Page = 1
|
"sha": opts.SHA,
|
||||||
}
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
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 {
|
switch opts.State {
|
||||||
case "pending", "success", "error", "failure", "warning":
|
case "pending", "success", "error", "failure", "warning":
|
||||||
sess.And("state = ?", opts.State)
|
cond = cond.And(builder.Eq{
|
||||||
}
|
"state": opts.State,
|
||||||
return sess
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func sortCommitStatusesSession(sess *xorm.Session, sortType string) {
|
return cond
|
||||||
switch sortType {
|
|
||||||
case "oldest":
|
|
||||||
sess.Asc("created_unix")
|
|
||||||
case "recentupdate":
|
|
||||||
sess.Desc("updated_unix")
|
|
||||||
case "leastupdate":
|
|
||||||
sess.Asc("updated_unix")
|
|
||||||
case "leastindex":
|
|
||||||
sess.Desc("index")
|
|
||||||
case "highestindex":
|
|
||||||
sess.Asc("index")
|
|
||||||
default:
|
|
||||||
sess.Desc("created_unix")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (opts *CommitStatusOptions) ToOrders() string {
|
||||||
|
switch opts.SortType {
|
||||||
|
case "oldest":
|
||||||
|
return "created_unix ASC"
|
||||||
|
case "recentupdate":
|
||||||
|
return "updated_unix DESC"
|
||||||
|
case "leastupdate":
|
||||||
|
return "updated_unix ASC"
|
||||||
|
case "leastindex":
|
||||||
|
return "`index` DESC"
|
||||||
|
case "highestindex":
|
||||||
|
return "`index` ASC"
|
||||||
|
default:
|
||||||
|
return "created_unix DESC"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCommitStatuses returns all statuses for a given commit.
|
||||||
|
func GetCommitStatuses(ctx context.Context, opts *CommitStatusOptions) ([]*CommitStatus, int64, error) {
|
||||||
|
sess := db.GetEngine(ctx).
|
||||||
|
Where(opts.ToConds()).
|
||||||
|
OrderBy(opts.ToOrders())
|
||||||
|
|
||||||
|
db.SetSessionPagination(sess, opts)
|
||||||
|
|
||||||
|
statuses := make([]*CommitStatus, 0, opts.PageSize)
|
||||||
|
count, err := sess.FindAndCount(&statuses)
|
||||||
|
return statuses, count, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// CommitStatusIndex represents a table for commit status index
|
// CommitStatusIndex represents a table for commit status index
|
||||||
|
|
|
@ -22,7 +22,11 @@ func TestGetCommitStatuses(t *testing.T) {
|
||||||
|
|
||||||
sha1 := "1234123412341234123412341234123412341234"
|
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 := git_model.GetCommitStatuses(db.DefaultContext, &git_model.CommitStatusOptions{
|
||||||
|
ListOptions: db.ListOptions{Page: 1, PageSize: 50},
|
||||||
|
RepoID: repo1.ID,
|
||||||
|
SHA: sha1,
|
||||||
|
})
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, int(maxResults), 5)
|
assert.Equal(t, int(maxResults), 5)
|
||||||
assert.Len(t, statuses, 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, "deploy/awesomeness", statuses[4].Context)
|
||||||
assert.Equal(t, structs.CommitStatusError, statuses[4].State)
|
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))
|
assert.Equal(t, "https://try.gitea.io/api/v1/repos/user2/repo1/statuses/1234123412341234123412341234123412341234", statuses[4].APIURL(db.DefaultContext))
|
||||||
|
|
||||||
|
statuses, maxResults, err = git_model.GetCommitStatuses(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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,8 +194,10 @@ func getCommitStatuses(ctx *context.APIContext, sha string) {
|
||||||
|
|
||||||
listOptions := utils.GetListOptions(ctx)
|
listOptions := utils.GetListOptions(ctx)
|
||||||
|
|
||||||
statuses, maxResults, err := git_model.GetCommitStatuses(ctx, repo, sha, &git_model.CommitStatusOptions{
|
statuses, maxResults, err := git_model.GetCommitStatuses(ctx, &git_model.CommitStatusOptions{
|
||||||
ListOptions: listOptions,
|
ListOptions: listOptions,
|
||||||
|
RepoID: repo.ID,
|
||||||
|
SHA: sha,
|
||||||
SortType: ctx.FormTrim("sort"),
|
SortType: ctx.FormTrim("sort"),
|
||||||
State: ctx.FormTrim("state"),
|
State: ctx.FormTrim("state"),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Reference in a new issue