summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/project.rb6
-rw-r--r--app/services/update_pages_service.rb2
-rw-r--r--app/workers/pages_worker.rb11
-rw-r--r--spec/workers/pages_worker_spec.rb21
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