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
This commit is contained in:
commit
466f6874af
|
@ -1,9 +1,9 @@
|
|||
module RepositoryCheck
|
||||
class SingleRepositoryWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
|
||||
sidekiq_options retry: false
|
||||
|
||||
|
||||
def perform(project_id)
|
||||
project = Project.find(project_id)
|
||||
project.update_columns(
|
||||
|
@ -11,20 +11,32 @@ module RepositoryCheck
|
|||
last_repository_check_at: Time.now,
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
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
|
||||
|
||||
git_fsck(project.wiki.repository)
|
||||
else
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
def git_fsck(path)
|
||||
|
||||
def git_fsck(repository)
|
||||
path = repository.path_to_repo
|
||||
cmd = %W(nice git --git-dir=#{path} fsck)
|
||||
output, status = Gitlab::Popen.popen(cmd)
|
||||
|
||||
|
||||
if status.zero?
|
||||
true
|
||||
else
|
||||
|
|
|
@ -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