summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2017-06-29 09:22:52 +0000
committerSean McGivern <sean@mcgivern.me.uk>2017-06-29 09:22:52 +0000
commitff048ba8a353f25341694db89c8ef5680fa574e8 (patch)
tree314a7fee264bf120b9c53132d1404833710989dd
parente3a6fedb1350ffcb4838b35cde86593cb1fe1715 (diff)
parent639639ef8a759c3956502a12df62c138022ee104 (diff)
downloadgitlab-ce-ff048ba8a353f25341694db89c8ef5680fa574e8.tar.gz
Merge branch 'fix-34417' into 'master'
Perform housekeeping only when an import of a fresh project is completed Closes #34417 See merge request !12529
-rw-r--r--app/models/project.rb27
-rw-r--r--changelogs/unreleased/fix-34417.yml4
-rw-r--r--spec/models/project_spec.rb34
3 files changed, 48 insertions, 17 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 2c1c2278e2d..228f66b95cd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -351,7 +351,16 @@ class Project < ActiveRecord::Base
after_transition started: :finished do |project, _|
project.reset_cache_and_import_attrs
- project.perform_housekeeping
+
+ if Gitlab::ImportSources.importer_names.include?(project.import_type) && project.repo_exists?
+ project.run_after_commit do
+ begin
+ Projects::HousekeepingService.new(project).execute
+ rescue Projects::HousekeepingService::LeaseTaken => e
+ Rails.logger.info("Could not perform housekeeping for project #{project.path_with_namespace} (#{project.id}): #{e}")
+ end
+ end
+ end
end
end
@@ -509,22 +518,6 @@ class Project < ActiveRecord::Base
ProjectCacheWorker.perform_async(self.id)
end
- remove_import_data
- end
-
- def perform_housekeeping
- return unless repo_exists?
-
- run_after_commit do
- begin
- Projects::HousekeepingService.new(self).execute
- rescue Projects::HousekeepingService::LeaseTaken => e
- Rails.logger.info("Could not perform housekeeping for project #{self.path_with_namespace} (#{self.id}): #{e}")
- end
- end
- end
-
- def remove_import_data
import_data&.destroy
end
diff --git a/changelogs/unreleased/fix-34417.yml b/changelogs/unreleased/fix-34417.yml
new file mode 100644
index 00000000000..5f012ad0c81
--- /dev/null
+++ b/changelogs/unreleased/fix-34417.yml
@@ -0,0 +1,4 @@
+---
+title: Perform housekeeping only when an import of a fresh project is completed
+merge_request:
+author:
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index ff4fe7f7e03..5565fd2d391 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -1500,6 +1500,40 @@ describe Project, models: true do
end
end
+ describe 'project import state transitions' do
+ context 'state transition: [:started] => [:finished]' do
+ let(:housekeeping_service) { spy }
+
+ before do
+ allow(Projects::HousekeepingService).to receive(:new) { housekeeping_service }
+ end
+
+ it 'performs housekeeping when an import of a fresh project is completed' do
+ project = create(:project_empty_repo, :import_started, import_type: :github)
+
+ project.import_finish
+
+ expect(housekeeping_service).to have_received(:execute)
+ end
+
+ it 'does not perform housekeeping when project repository does not exist' do
+ project = create(:empty_project, :import_started, import_type: :github)
+
+ project.import_finish
+
+ expect(housekeeping_service).not_to have_received(:execute)
+ end
+
+ it 'does not perform housekeeping when project does not have a valid import type' do
+ project = create(:empty_project, :import_started, import_type: nil)
+
+ project.import_finish
+
+ expect(housekeeping_service).not_to have_received(:execute)
+ end
+ end
+ end
+
describe '#latest_successful_builds_for' do
def create_pipeline(status = 'success')
create(:ci_pipeline, project: project,