Skip to content

Commit a4faa4b

Browse files
committed
Replace max( id ) in GetLatestCommitStatusForRepoCommitIDs
1 parent 82d47a5 commit a4faa4b

File tree

1 file changed

+15
-17
lines changed

1 file changed

+15
-17
lines changed

models/git/commit_status.go

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -342,42 +342,40 @@ func GetLatestCommitStatusForPairs(ctx context.Context, repoIDsToLatestCommitSHA
342342
// GetLatestCommitStatusForRepoCommitIDs returns all statuses with a unique context for a given list of repo-sha pairs
343343
func GetLatestCommitStatusForRepoCommitIDs(ctx context.Context, repoID int64, commitIDs []string) (map[string][]*CommitStatus, error) {
344344
type result struct {
345-
ID int64
346-
Sha string
345+
Index int64
346+
SHA string
347347
}
348-
348+
base := db.GetEngine(ctx).Table(&CommitStatus{}).Where("repo_id = ?", repoID)
349349
results := make([]result, 0, len(commitIDs))
350350

351-
sess := db.GetEngine(ctx).Table(&CommitStatus{})
352-
353-
// Create a disjunction of conditions for each repoID and SHA pair
354351
conds := make([]builder.Cond, 0, len(commitIDs))
355352
for _, sha := range commitIDs {
356353
conds = append(conds, builder.Eq{"sha": sha})
357354
}
358-
sess = sess.Where(builder.Eq{"repo_id": repoID}.And(builder.Or(conds...))).
359-
Select("max( id ) as id, sha").
360-
GroupBy("context_hash, sha").OrderBy("max( id ) desc")
355+
sess := base.And(builder.Or(conds...)).
356+
Select("max( `index` ) as `index`, sha").
357+
GroupBy("context_hash, sha").OrderBy("max( `index` ) desc")
361358

362359
err := sess.Find(&results)
363360
if err != nil {
364361
return nil, err
365362
}
366363

367-
ids := make([]int64, 0, len(results))
368364
repoStatuses := make(map[string][]*CommitStatus)
369-
for _, result := range results {
370-
ids = append(ids, result.ID)
371-
}
372365

373-
statuses := make([]*CommitStatus, 0, len(ids))
374-
if len(ids) > 0 {
375-
err = db.GetEngine(ctx).In("id", ids).Find(&statuses)
366+
if len(results) > 0 {
367+
statuses := make([]*CommitStatus, 0, len(results))
368+
369+
conds = make([]builder.Cond, 0, len(results))
370+
for _, result := range results {
371+
conds = append(conds, builder.Eq{"`index`": result.Index, "sha": result.SHA})
372+
}
373+
err = base.And(builder.Or(conds...)).Find(&statuses)
376374
if err != nil {
377375
return nil, err
378376
}
379377

380-
// Group the statuses by repo ID
378+
// Group the statuses by commit
381379
for _, status := range statuses {
382380
repoStatuses[status.SHA] = append(repoStatuses[status.SHA], status)
383381
}

0 commit comments

Comments
 (0)