Skip to content

Commit 638fea7

Browse files
committed
Always create new xorm session
1 parent 566f054 commit 638fea7

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

models/git/commit_status.go

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"code.gitea.io/gitea/modules/translation"
2626

2727
"xorm.io/builder"
28+
"xorm.io/xorm"
2829
)
2930

3031
// CommitStatus holds a single Status of a single Commit
@@ -269,10 +270,12 @@ type CommitStatusIndex struct {
269270

270271
// GetLatestCommitStatus returns all statuses with a unique context for a given commit.
271272
func GetLatestCommitStatus(ctx context.Context, repoID int64, sha string, listOptions db.ListOptions) ([]*CommitStatus, int64, error) {
272-
base := db.GetEngine(ctx).Table(&CommitStatus{}).
273-
Where("repo_id = ?", repoID).And("sha = ?", sha)
273+
getBase := func() *xorm.Session {
274+
return db.GetEngine(ctx).Table(&CommitStatus{}).
275+
Where("repo_id = ?", repoID).And("sha = ?", sha)
276+
}
274277
indices := make([]int64, 0, 10)
275-
sess := base.Select("max( `index` ) as `index`").
278+
sess := getBase().Select("max( `index` ) as `index`").
276279
GroupBy("context_hash").OrderBy("max( `index` ) desc")
277280
if !listOptions.IsListAll() {
278281
sess = db.SetSessionPagination(sess, &listOptions)
@@ -285,7 +288,7 @@ func GetLatestCommitStatus(ctx context.Context, repoID int64, sha string, listOp
285288
if len(indices) == 0 {
286289
return statuses, count, nil
287290
}
288-
return statuses, count, base.And(builder.In("`index`", indices)).Find(&statuses)
291+
return statuses, count, getBase().And(builder.In("`index`", indices)).Find(&statuses)
289292
}
290293

291294
// GetLatestCommitStatusForPairs returns all statuses with a unique context for a given list of repo-sha pairs
@@ -297,14 +300,16 @@ func GetLatestCommitStatusForPairs(ctx context.Context, repoIDsToLatestCommitSHA
297300

298301
results := make([]result, 0, len(repoIDsToLatestCommitSHAs))
299302

300-
base := db.GetEngine(ctx).Table(&CommitStatus{})
303+
getBase := func() *xorm.Session {
304+
return db.GetEngine(ctx).Table(&CommitStatus{})
305+
}
301306

302307
// Create a disjunction of conditions for each repoID and SHA pair
303308
conds := make([]builder.Cond, 0, len(repoIDsToLatestCommitSHAs))
304309
for repoID, sha := range repoIDsToLatestCommitSHAs {
305310
conds = append(conds, builder.Eq{"repo_id": repoID, "sha": sha})
306311
}
307-
sess := base.Where(builder.Or(conds...)).
312+
sess := getBase().Where(builder.Or(conds...)).
308313
Select("max( `index` ) as `index`, repo_id").
309314
GroupBy("context_hash, repo_id").OrderBy("max( `index` ) desc")
310315

@@ -331,7 +336,7 @@ func GetLatestCommitStatusForPairs(ctx context.Context, repoIDsToLatestCommitSHA
331336
}
332337
conds = append(conds, cond)
333338
}
334-
err = base.Where(builder.Or(conds...)).Find(&statuses)
339+
err = getBase().Where(builder.Or(conds...)).Find(&statuses)
335340
if err != nil {
336341
return nil, err
337342
}
@@ -351,14 +356,17 @@ func GetLatestCommitStatusForRepoCommitIDs(ctx context.Context, repoID int64, co
351356
Index int64
352357
SHA string
353358
}
354-
base := db.GetEngine(ctx).Table(&CommitStatus{}).Where("repo_id = ?", repoID)
359+
360+
getBase := func() *xorm.Session {
361+
return db.GetEngine(ctx).Table(&CommitStatus{}).Where("repo_id = ?", repoID)
362+
}
355363
results := make([]result, 0, len(commitIDs))
356364

357365
conds := make([]builder.Cond, 0, len(commitIDs))
358366
for _, sha := range commitIDs {
359367
conds = append(conds, builder.Eq{"sha": sha})
360368
}
361-
sess := base.And(builder.Or(conds...)).
369+
sess := getBase().And(builder.Or(conds...)).
362370
Select("max( `index` ) as `index`, sha").
363371
GroupBy("context_hash, sha").OrderBy("max( `index` ) desc")
364372

@@ -376,7 +384,7 @@ func GetLatestCommitStatusForRepoCommitIDs(ctx context.Context, repoID int64, co
376384
for _, result := range results {
377385
conds = append(conds, builder.Eq{"`index`": result.Index, "sha": result.SHA})
378386
}
379-
err = base.And(builder.Or(conds...)).Find(&statuses)
387+
err = getBase().And(builder.Or(conds...)).Find(&statuses)
380388
if err != nil {
381389
return nil, err
382390
}
@@ -396,11 +404,14 @@ func FindRepoRecentCommitStatusContexts(ctx context.Context, repoID int64, befor
396404
Index int64
397405
SHA string
398406
}
407+
getBase := func() *xorm.Session {
408+
return db.GetEngine(ctx).Table(&CommitStatus{}).Where("repo_id = ?", repoID)
409+
}
410+
399411
start := timeutil.TimeStampNow().AddDuration(-before)
400-
base := db.GetEngine(ctx).Table(&CommitStatus{}).Where("repo_id = ?", repoID)
401412
results := make([]result, 0, 10)
402413

403-
sess := base.And("updated_unix >= ?", start).
414+
sess := getBase().And("updated_unix >= ?", start).
404415
Select("max( `index` ) as `index`, sha").
405416
GroupBy("context_hash, sha").OrderBy("max( `index` ) desc")
406417

@@ -418,7 +429,7 @@ func FindRepoRecentCommitStatusContexts(ctx context.Context, repoID int64, befor
418429
for _, result := range results {
419430
conds = append(conds, builder.Eq{"`index`": result.Index, "sha": result.SHA})
420431
}
421-
return contexts, base.And(builder.Or(conds...)).Select("context").Find(&contexts)
432+
return contexts, getBase().And(builder.Or(conds...)).Select("context").Find(&contexts)
422433
}
423434

424435
// NewCommitStatusOptions holds options for creating a CommitStatus

0 commit comments

Comments
 (0)