diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2015-12-18 13:07:53 +0100 |
---|---|---|
committer | James Edwards-Jones <jedwardsjones@gitlab.com> | 2017-01-31 22:53:56 +0000 |
commit | e9e8a2f60811c460d0bb850da2bb35ea43e35698 (patch) | |
tree | c12f1c59ef1a40b7046b2ef484a7abe2bcb09304 | |
parent | 9ff381c492695bf9b76b27047bd0b38a70a4daac (diff) | |
download | gitlab-ce-e9e8a2f60811c460d0bb850da2bb35ea43e35698.tar.gz |
Asynchronously remove pages
-rw-r--r-- | app/models/project.rb | 6 | ||||
-rw-r--r-- | app/services/update_pages_service.rb | 2 | ||||
-rw-r--r-- | app/workers/pages_worker.rb | 11 | ||||
-rw-r--r-- | spec/workers/pages_worker_spec.rb | 21 |
4 files changed, 30 insertions, 10 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index e9c7108e805..7a5bf77c5a9 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1186,7 +1186,11 @@ class Project < ActiveRecord::Base end def remove_pages - FileUtils.rm_r(pages_path, force: true) + temp_path = "#{path}.#{SecureRandom.hex}" + + if Gitlab::PagesTransfer.new.rename_project(path, temp_path, namespace.path) + PagesWorker.perform_in(5.minutes, :remove, namespace.path, temp_path) + end end def wiki diff --git a/app/services/update_pages_service.rb b/app/services/update_pages_service.rb index 818bb94a293..39f08b2a03d 100644 --- a/app/services/update_pages_service.rb +++ b/app/services/update_pages_service.rb @@ -10,6 +10,6 @@ class UpdatePagesService return unless data[:build_name] == 'pages' return unless data[:build_status] == 'success' - PagesWorker.perform_async(data[:build_id]) + PagesWorker.perform_async(:deploy, data[:build_id]) end end diff --git a/app/workers/pages_worker.rb b/app/workers/pages_worker.rb index 836e8d8ad9d..ff765a6c13c 100644 --- a/app/workers/pages_worker.rb +++ b/app/workers/pages_worker.rb @@ -7,7 +7,11 @@ class PagesWorker sidekiq_options queue: :pages, retry: false - def perform(build_id) + def perform(action, *arg) + send(action, *arg) + end + + def deploy(build_id) @build_id = build_id return unless valid? @@ -36,6 +40,11 @@ class PagesWorker return false end + def remove(namespace_path, project_path) + full_path = File.join(Settings.pages.path, namespace_path, project_path) + FileUtils.rm_r(full_path, force: true) + end + private def create_status diff --git a/spec/workers/pages_worker_spec.rb b/spec/workers/pages_worker_spec.rb index 158a4b3ba8d..85592154598 100644 --- a/spec/workers/pages_worker_spec.rb +++ b/spec/workers/pages_worker_spec.rb @@ -18,41 +18,48 @@ describe PagesWorker do it 'succeeds' do expect(project.pages_url).to be_nil - expect(worker.perform(build.id)).to be_truthy + expect(worker.deploy(build.id)).to be_truthy expect(project.pages_url).to_not be_nil end it 'limits pages size' do stub_application_setting(max_pages_size: 1) - expect(worker.perform(build.id)).to_not be_truthy + expect(worker.deploy(build.id)).to_not be_truthy end it 'removes pages after destroy' do + expect(PagesWorker).to receive(:perform_in) expect(project.pages_url).to be_nil - expect(worker.perform(build.id)).to be_truthy + expect(worker.deploy(build.id)).to be_truthy expect(project.pages_url).to_not be_nil project.destroy expect(Dir.exist?(project.public_pages_path)).to be_falsey end end + it 'fails to remove project pages when no pages is deployed' do + expect(PagesWorker).to_not receive(:perform_in) + expect(project.pages_url).to be_nil + project.destroy + end + it 'fails if no artifacts' do - expect(worker.perform(build.id)).to_not be_truthy + expect(worker.deploy(build.id)).to_not be_truthy end it 'fails for empty file fails' do build.update_attributes(artifacts_file: empty_file) - expect(worker.perform(build.id)).to_not be_truthy + expect(worker.deploy(build.id)).to_not be_truthy end it 'fails for invalid archive' do build.update_attributes(artifacts_file: invalid_file) - expect(worker.perform(build.id)).to_not be_truthy + expect(worker.deploy(build.id)).to_not be_truthy end it 'fails if sha on branch is not latest' do commit.update_attributes(sha: 'old_sha') build.update_attributes(artifacts_file: file) - expect(worker.perform(build.id)).to_not be_truthy + expect(worker.deploy(build.id)).to_not be_truthy end end |