diff options
-rw-r--r-- | app/services/batched_git_ref_updates/project_cleanup_service.rb | 2 | ||||
-rw-r--r-- | spec/services/batched_git_ref_updates/project_cleanup_service_spec.rb | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/app/services/batched_git_ref_updates/project_cleanup_service.rb b/app/services/batched_git_ref_updates/project_cleanup_service.rb index f9518cad975..7367c8be1d1 100644 --- a/app/services/batched_git_ref_updates/project_cleanup_service.rb +++ b/app/services/batched_git_ref_updates/project_cleanup_service.rb @@ -28,7 +28,7 @@ module BatchedGitRefUpdates refs = batch.map(&:ref) refs.each_slice(GITALY_BATCH_SIZE) do |refs_to_delete| - project.repository.delete_refs(*refs_to_delete) + project.repository.delete_refs(*refs_to_delete.uniq) end total_deletes += refs.count diff --git a/spec/services/batched_git_ref_updates/project_cleanup_service_spec.rb b/spec/services/batched_git_ref_updates/project_cleanup_service_spec.rb index dcdfdfade3c..e8ac9588ef3 100644 --- a/spec/services/batched_git_ref_updates/project_cleanup_service_spec.rb +++ b/spec/services/batched_git_ref_updates/project_cleanup_service_spec.rb @@ -53,6 +53,15 @@ RSpec.describe BatchedGitRefUpdates::ProjectCleanupService, feature_category: :g expect(test_refs(project2)).to include('refs/test/project2-ref1') end + it 'handles duplicates' do + BatchedGitRefUpdates::Deletion.create!(project_id: project1.id, ref: 'refs/test/some-duplicate') + BatchedGitRefUpdates::Deletion.create!(project_id: project1.id, ref: 'refs/test/some-duplicate') + + service.execute + + expect(test_refs(project1)).not_to include('refs/test/some-duplicate') + end + it 'marks the processed BatchedGitRefUpdates::Deletion as processed' do service.execute |