fix(mr): wait for the async source deletion before pruning in the squash test; simplify the retry pop condition
- commit
- bda2a5e775d4ad888783d682ac2d7aeecb59dee7
- author
- brice · · 2026-10-19 18:19 UTC
- committer
- brice · · 2026-10-19 18:30 UTC
- parent
- 1475ed7
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +2 -1
M internal/usecase/mergeability.go +1 -1
| @@ -385,7 +385,7 @@ func (s *Mergeability) popDue(waited retryItem) []domain.RepoName { | |||
| 385 | 385 | now := s.cfg.Clock.Now() | |
| 386 | 386 | var out []domain.RepoName | |
| 387 | 387 | s.heap = slices.DeleteFunc(s.heap, func(it retryItem) bool { | |
| 388 | - | if !(it.key == waited.key && it.due.Equal(waited.due)) && it.due.After(now) { | |
| 388 | + | if (it.key != waited.key || !it.due.Equal(waited.due)) && it.due.After(now) { | |
| 389 | 389 | return false | |
| 390 | 390 | } | |
| 391 | 391 | out = append(out, it.key) | |
| @@ -385,7 +385,7 @@ func (s *Mergeability) popDue(waited retryItem) []domain.RepoName { | |||||
| 385 | now := s.cfg.Clock.Now() | 385 | now := s.cfg.Clock.Now() | ||
| 386 | var out []domain.RepoName | 386 | var out []domain.RepoName | ||
| 387 | s.heap = slices.DeleteFunc(s.heap, func(it retryItem) bool { | 387 | s.heap = slices.DeleteFunc(s.heap, func(it retryItem) bool { | ||
| 388 | - | if !(it.key == waited.key && it.due.Equal(waited.due)) && it.due.After(now) { | 388 | + | if (it.key != waited.key || !it.due.Equal(waited.due)) && it.due.After(now) { |
| 389 | return false | 389 | return false | ||
| 390 | } | 390 | } | ||
| 391 | out = append(out, it.key) | 391 | out = append(out, it.key) | ||
M internal/usecase/mergerequests_delete_test.go +1 -0
| @@ -137,6 +137,7 @@ func TestSquashMergedRequestReadsAfterItsCommitsArePruned(t *testing.T) { | |||
| 137 | 137 | res, err := r.mrs.Merge(r.ctx, mrM, r.repo, mr.Number, ports.MergeParams{Mode: domain.MergeModeSquash, HeadID: head, DeleteSource: true}) | |
| 138 | 138 | require.NoError(t, err) | |
| 139 | 139 | require.True(t, res.SourceDeleted) | |
| 140 | + | r.mrs.Wait(r.ctx) // the deletion runs after Merge returned | |
| 140 | 141 | ||
| 141 | 142 | r.run(r.bare(), r.env(author), "reflog", "expire", "--expire=now", "--all") | |
| 142 | 143 | r.run(r.bare(), r.env(author), "gc", "-q", "--prune=now") | |
| @@ -137,6 +137,7 @@ func TestSquashMergedRequestReadsAfterItsCommitsArePruned(t *testing.T) { | |||||
| 137 | res, err := r.mrs.Merge(r.ctx, mrM, r.repo, mr.Number, ports.MergeParams{Mode: domain.MergeModeSquash, HeadID: head, DeleteSource: true}) | 137 | res, err := r.mrs.Merge(r.ctx, mrM, r.repo, mr.Number, ports.MergeParams{Mode: domain.MergeModeSquash, HeadID: head, DeleteSource: true}) | ||
| 138 | require.NoError(t, err) | 138 | require.NoError(t, err) | ||
| 139 | require.True(t, res.SourceDeleted) | 139 | require.True(t, res.SourceDeleted) | ||
| 140 | + | r.mrs.Wait(r.ctx) // the deletion runs after Merge returned | |||
| 140 | 141 | ||||
| 141 | r.run(r.bare(), r.env(author), "reflog", "expire", "--expire=now", "--all") | 142 | r.run(r.bare(), r.env(author), "reflog", "expire", "--expire=now", "--all") | ||
| 142 | r.run(r.bare(), r.env(author), "gc", "-q", "--prune=now") | 143 | r.run(r.bare(), r.env(author), "gc", "-q", "--prune=now") | ||