From d7a4a2fe7577f2ca17d28f10d312ed98d5253ae4 Mon Sep 17 00:00:00 2001
From: Jacob Vosmaer <contact@jacobvosmaer.nl>
Date: Mon, 18 Apr 2016 10:52:01 +0200
Subject: [PATCH] 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 e54ae86d06c..a76729e3c74 100644
--- a/app/workers/repository_check/single_repository_worker.rb
+++ b/app/workers/repository_check/single_repository_worker.rb
@@ -15,10 +15,10 @@ module RepositoryCheck
     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 00000000000..3179dd70b0a
--- /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
-- 
2.30.9