@@ -342,42 +342,40 @@ func GetLatestCommitStatusForPairs(ctx context.Context, repoIDsToLatestCommitSHA
342
342
// GetLatestCommitStatusForRepoCommitIDs returns all statuses with a unique context for a given list of repo-sha pairs
343
343
func GetLatestCommitStatusForRepoCommitIDs (ctx context.Context , repoID int64 , commitIDs []string ) (map [string ][]* CommitStatus , error ) {
344
344
type result struct {
345
- ID int64
346
- Sha string
345
+ Index int64
346
+ SHA string
347
347
}
348
-
348
+ base := db . GetEngine ( ctx ). Table ( & CommitStatus {}). Where ( "repo_id = ?" , repoID )
349
349
results := make ([]result , 0 , len (commitIDs ))
350
350
351
- sess := db .GetEngine (ctx ).Table (& CommitStatus {})
352
-
353
- // Create a disjunction of conditions for each repoID and SHA pair
354
351
conds := make ([]builder.Cond , 0 , len (commitIDs ))
355
352
for _ , sha := range commitIDs {
356
353
conds = append (conds , builder.Eq {"sha" : sha })
357
354
}
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" )
361
358
362
359
err := sess .Find (& results )
363
360
if err != nil {
364
361
return nil , err
365
362
}
366
363
367
- ids := make ([]int64 , 0 , len (results ))
368
364
repoStatuses := make (map [string ][]* CommitStatus )
369
- for _ , result := range results {
370
- ids = append (ids , result .ID )
371
- }
372
365
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 )
376
374
if err != nil {
377
375
return nil , err
378
376
}
379
377
380
- // Group the statuses by repo ID
378
+ // Group the statuses by commit
381
379
for _ , status := range statuses {
382
380
repoStatuses [status .SHA ] = append (repoStatuses [status .SHA ], status )
383
381
}
0 commit comments