@@ -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
343343func 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