From d7a4a2fe7577f2ca17d28f10d312ed98d5253ae4 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Mon, 18 Apr 2016 10:52:01 +0200 Subject: [PATCH 1/3] When a project wiki is disabled skip it for fsck --- .../single_repository_worker.rb | 6 ++-- .../single_repository_worker_spec.rb | 30 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 spec/workers/repository_check/single_repository_worker_spec.rb diff --git a/app/workers/repository_check/single_repository_worker.rb b/app/workers/repository_check/single_repository_worker.rb index e54ae86d06c2..a76729e3c74e 100644 --- a/app/workers/repository_check/single_repository_worker.rb +++ b/app/workers/repository_check/single_repository_worker.rb @@ -15,10 +15,10 @@ def perform(project_id) private def check(project) + repositories = [project.repository] + repositories << project.wiki.repository if project.wiki_enabled? # Use 'map do', not 'all? do', to prevent short-circuiting - [project.repository, project.wiki.repository].map do |repository| - git_fsck(repository.path_to_repo) - end.all? + repositories.map { |repository| git_fsck(repository.path_to_repo) }.all? end def git_fsck(path) diff --git a/spec/workers/repository_check/single_repository_worker_spec.rb b/spec/workers/repository_check/single_repository_worker_spec.rb new file mode 100644 index 000000000000..3179dd70b0a6 --- /dev/null +++ b/spec/workers/repository_check/single_repository_worker_spec.rb @@ -0,0 +1,30 @@ +require 'spec_helper' +require 'fileutils' + +describe RepositoryCheck::SingleRepositoryWorker do + subject { described_class.new } + + it 'fails if the wiki repository is broken' do + project = create(:project_empty_repo, wiki_enabled: true) + project.create_wiki + + # Test sanity: everything should be fine before the wiki repo is broken + subject.perform(project.id) + expect(project.reload.last_repository_check_failed).to eq(false) + + FileUtils.rm_rf(project.wiki.repository.path_to_repo) + subject.perform(project.id) + + expect(project.reload.last_repository_check_failed).to eq(true) + end + + it 'skips wikis when disabled' do + project = create(:project_empty_repo, wiki_enabled: false) + # Make sure the test would fail if it checked the wiki repo + FileUtils.rm_rf(project.wiki.repository.path_to_repo) + + subject.perform(project.id) + + expect(project.reload.last_repository_check_failed).to eq(false) + end +end -- GitLab From fdf6ca6c01ec54bf86ee72d5adbaf4ae3cff8483 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Mon, 18 Apr 2016 10:58:40 +0200 Subject: [PATCH 2/3] Improve 'auto fsck' admin emails --- app/mailers/repository_check_mailer.rb | 2 +- app/views/repository_check_mailer/notify.html.haml | 3 +++ app/views/repository_check_mailer/notify.text.haml | 3 +++ spec/mailers/repository_check_mailer_spec.rb | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/mailers/repository_check_mailer.rb b/app/mailers/repository_check_mailer.rb index 2bff5b63cc44..21db2fe04a03 100644 --- a/app/mailers/repository_check_mailer.rb +++ b/app/mailers/repository_check_mailer.rb @@ -8,7 +8,7 @@ def notify(failed_count) mail( to: User.admins.pluck(:email), - subject: @message + subject: "GitLab Admin | #{@message}" ) end end diff --git a/app/views/repository_check_mailer/notify.html.haml b/app/views/repository_check_mailer/notify.html.haml index df16f503570d..a585147ddd18 100644 --- a/app/views/repository_check_mailer/notify.html.haml +++ b/app/views/repository_check_mailer/notify.html.haml @@ -3,3 +3,6 @@ %p = link_to "See the affected projects in the GitLab admin panel", admin_namespaces_projects_url(last_repository_check_failed: 1) + +%p + You are receiving this message because you are a GitLab administrator for #{Gitlab.config.gitlab.url}. diff --git a/app/views/repository_check_mailer/notify.text.haml b/app/views/repository_check_mailer/notify.text.haml index 02f3f80288a2..93db151329ef 100644 --- a/app/views/repository_check_mailer/notify.text.haml +++ b/app/views/repository_check_mailer/notify.text.haml @@ -1,3 +1,6 @@ #{@message}. \ View details: #{admin_namespaces_projects_url(last_repository_check_failed: 1)} + +You are receiving this message because you are a GitLab administrator +for #{Gitlab.config.gitlab.url}. diff --git a/spec/mailers/repository_check_mailer_spec.rb b/spec/mailers/repository_check_mailer_spec.rb index 583bf15176f5..00613c7b6710 100644 --- a/spec/mailers/repository_check_mailer_spec.rb +++ b/spec/mailers/repository_check_mailer_spec.rb @@ -15,7 +15,7 @@ it 'mentions the number of failed checks' do mail = described_class.notify(3) - expect(mail).to have_subject '3 projects failed their last repository check' + expect(mail).to have_subject 'GitLab Admin | 3 projects failed their last repository check' end end end -- GitLab From 1394ccfe834c4e34bed701d206c77961a594fa23 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Mon, 18 Apr 2016 11:03:53 +0200 Subject: [PATCH 3/3] Destroy wikis uniformly --- .../repository_check/single_repository_worker_spec.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spec/workers/repository_check/single_repository_worker_spec.rb b/spec/workers/repository_check/single_repository_worker_spec.rb index 3179dd70b0a6..087e4c667d8c 100644 --- a/spec/workers/repository_check/single_repository_worker_spec.rb +++ b/spec/workers/repository_check/single_repository_worker_spec.rb @@ -12,7 +12,7 @@ subject.perform(project.id) expect(project.reload.last_repository_check_failed).to eq(false) - FileUtils.rm_rf(project.wiki.repository.path_to_repo) + destroy_wiki(project) subject.perform(project.id) expect(project.reload.last_repository_check_failed).to eq(true) @@ -21,10 +21,14 @@ it 'skips wikis when disabled' do project = create(:project_empty_repo, wiki_enabled: false) # Make sure the test would fail if it checked the wiki repo - FileUtils.rm_rf(project.wiki.repository.path_to_repo) + destroy_wiki(project) subject.perform(project.id) expect(project.reload.last_repository_check_failed).to eq(false) end + + def destroy_wiki(project) + FileUtils.rm_rf(project.wiki.repository.path_to_repo) + end end -- GitLab