Skip to content
Snippets Groups Projects
Commit 466f6874 authored by Douwe Maan's avatar Douwe Maan
Browse files

Merge branch 'create-wikis-during-check' into 'master'

Initialize wikis on legacy projects during check

Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/4173

Helps https://gitlab.com/gitlab-org/gitlab-ce/issues/15423

See merge request !3931
parents 275c6155 9f85b7bc
No related branches found
No related tags found
No related merge requests found
module RepositoryCheck module RepositoryCheck
class SingleRepositoryWorker class SingleRepositoryWorker
include Sidekiq::Worker include Sidekiq::Worker
sidekiq_options retry: false sidekiq_options retry: false
def perform(project_id) def perform(project_id)
project = Project.find(project_id) project = Project.find(project_id)
project.update_columns( project.update_columns(
Loading
@@ -11,20 +11,32 @@ module RepositoryCheck
Loading
@@ -11,20 +11,32 @@ module RepositoryCheck
last_repository_check_at: Time.now, last_repository_check_at: Time.now,
) )
end end
private private
def check(project) def check(project)
repositories = [project.repository] if !git_fsck(project.repository)
repositories << project.wiki.repository if project.wiki_enabled? false
# Use 'map do', not 'all? do', to prevent short-circuiting elsif project.wiki_enabled?
repositories.map { |repository| git_fsck(repository.path_to_repo) }.all? # Historically some projects never had their wiki repos initialized;
# this happens on project creation now. Let's initialize an empty repo
# if it is not already there.
begin
project.create_wiki
rescue Rugged::RepositoryError
end
git_fsck(project.wiki.repository)
else
true
end
end end
def git_fsck(path) def git_fsck(repository)
path = repository.path_to_repo
cmd = %W(nice git --git-dir=#{path} fsck) cmd = %W(nice git --git-dir=#{path} fsck)
output, status = Gitlab::Popen.popen(cmd) output, status = Gitlab::Popen.popen(cmd)
if status.zero? if status.zero?
true true
else else
Loading
Loading
Loading
@@ -12,7 +12,7 @@ describe RepositoryCheck::SingleRepositoryWorker do
Loading
@@ -12,7 +12,7 @@ describe RepositoryCheck::SingleRepositoryWorker do
subject.perform(project.id) subject.perform(project.id)
expect(project.reload.last_repository_check_failed).to eq(false) expect(project.reload.last_repository_check_failed).to eq(false)
   
destroy_wiki(project) break_wiki(project)
subject.perform(project.id) subject.perform(project.id)
   
expect(project.reload.last_repository_check_failed).to eq(true) expect(project.reload.last_repository_check_failed).to eq(true)
Loading
@@ -20,15 +20,38 @@ describe RepositoryCheck::SingleRepositoryWorker do
Loading
@@ -20,15 +20,38 @@ describe RepositoryCheck::SingleRepositoryWorker do
   
it 'skips wikis when disabled' do it 'skips wikis when disabled' do
project = create(:project_empty_repo, wiki_enabled: false) project = create(:project_empty_repo, wiki_enabled: false)
# Make sure the test would fail if it checked the wiki repo # Make sure the test would fail if the wiki repo was checked
destroy_wiki(project) break_wiki(project)
   
subject.perform(project.id) subject.perform(project.id)
   
expect(project.reload.last_repository_check_failed).to eq(false) expect(project.reload.last_repository_check_failed).to eq(false)
end end
   
def destroy_wiki(project) it 'creates missing wikis' do
FileUtils.rm_rf(project.wiki.repository.path_to_repo) project = create(:project_empty_repo, wiki_enabled: true)
FileUtils.rm_rf(wiki_path(project))
subject.perform(project.id)
expect(project.reload.last_repository_check_failed).to eq(false)
end
it 'does not create a wiki if the main repo does not exist at all' do
project = create(:project_empty_repo)
FileUtils.rm_rf(project.repository.path_to_repo)
FileUtils.rm_rf(wiki_path(project))
subject.perform(project.id)
expect(File.exist?(wiki_path(project))).to eq(false)
end
def break_wiki(project)
FileUtils.rm_rf(wiki_path(project) + '/objects')
end
def wiki_path(project)
project.wiki.repository.path_to_repo
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment