Merge branch 'repo-check-require-push-events' into 'master'

Do not check repos without push events

Reduce false positives from automatic repository checks by skipping
projects without push events.

See merge request !4684
This commit is contained in:
Robert Speicher
2016-06-17 16:03:28 -04:00
committed by Robert Speicher
parent 6fdf383e60
commit 989b094f42
2 changed files with 34 additions and 1 deletions
@@ -15,7 +15,7 @@ module RepositoryCheck
private
def check(project)
if !git_fsck(project.repository)
if has_pushes?(project) && !git_fsck(project.repository)
false
elsif project.wiki_enabled?
# Historically some projects never had their wiki repos initialized;
@@ -44,5 +44,9 @@ module RepositoryCheck
false
end
end
def has_pushes?(project)
Project.with_push.exists?(project.id)
end
end
end
@@ -4,6 +4,26 @@ require 'fileutils'
describe RepositoryCheck::SingleRepositoryWorker do
subject { described_class.new }
it 'passes when the project has no push events' do
project = create(:project_empty_repo, wiki_enabled: false)
project.events.destroy_all
break_repo(project)
subject.perform(project.id)
expect(project.reload.last_repository_check_failed).to eq(false)
end
it 'fails when the project has push events and a broken repository' do
project = create(:project_empty_repo)
create_push_event(project)
break_repo(project)
subject.perform(project.id)
expect(project.reload.last_repository_check_failed).to eq(true)
end
it 'fails if the wiki repository is broken' do
project = create(:project_empty_repo, wiki_enabled: true)
project.create_wiki
@@ -39,6 +59,7 @@ describe RepositoryCheck::SingleRepositoryWorker do
it 'does not create a wiki if the main repo does not exist at all' do
project = create(:project_empty_repo)
create_push_event(project)
FileUtils.rm_rf(project.repository.path_to_repo)
FileUtils.rm_rf(wiki_path(project))
@@ -54,4 +75,12 @@ describe RepositoryCheck::SingleRepositoryWorker do
def wiki_path(project)
project.wiki.repository.path_to_repo
end
def create_push_event(project)
project.events.create(action: Event::PUSHED, author_id: create(:user).id)
end
def break_repo(project)
FileUtils.rm_rf(File.join(project.repository.path_to_repo, 'objects'))
end
end