Initialize wikis on legacy projects during check
This commit is contained in:
parent
f127edd012
commit
9f85b7bc58
|
@ -15,13 +15,25 @@ 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
|
||||
repositories.map { |repository| git_fsck(repository.path_to_repo) }.all?
|
||||
if !git_fsck(project.repository)
|
||||
false
|
||||
elsif project.wiki_enabled?
|
||||
# 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
|
||||
|
||||
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)
|
||||
output, status = Gitlab::Popen.popen(cmd)
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ describe RepositoryCheck::SingleRepositoryWorker do
|
|||
subject.perform(project.id)
|
||||
expect(project.reload.last_repository_check_failed).to eq(false)
|
||||
|
||||
destroy_wiki(project)
|
||||
break_wiki(project)
|
||||
subject.perform(project.id)
|
||||
|
||||
expect(project.reload.last_repository_check_failed).to eq(true)
|
||||
|
@ -20,15 +20,38 @@ describe RepositoryCheck::SingleRepositoryWorker do
|
|||
|
||||
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
|
||||
destroy_wiki(project)
|
||||
# Make sure the test would fail if the wiki repo was checked
|
||||
break_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)
|
||||
it 'creates missing wikis' do
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue