Initialize wikis on legacy projects during check
This commit is contained in:
parent
f127edd012
commit
9f85b7bc58
|
@ -15,13 +15,25 @@ module RepositoryCheck
|
||||||
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
|
end
|
||||||
|
|
||||||
def git_fsck(path)
|
git_fsck(project.wiki.repository)
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue