diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/services/projects/housecleaning_service.rb | 40 | ||||
-rw-r--r-- | app/services/projects/import_export/cleanup_service.rb | 42 |
3 files changed, 41 insertions, 43 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 72da4e8eb2e..c0060504d74 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -372,7 +372,7 @@ class Project < ActiveRecord::Base if Gitlab::ImportSources.importer_names.include?(project.import_type) && project.repo_exists? project.run_after_commit do begin - Projects::ImportExport::CleanupService.new(project).execute + Projects::HousecleaningService.new(project).execute rescue Projects::HousekeepingService::LeaseTaken => e Rails.logger.info("Could not perform housekeeping for project #{project.full_path} (#{project.id}): #{e}") end diff --git a/app/services/projects/housecleaning_service.rb b/app/services/projects/housecleaning_service.rb new file mode 100644 index 00000000000..d5cf8478e13 --- /dev/null +++ b/app/services/projects/housecleaning_service.rb @@ -0,0 +1,40 @@ +module Projects + class HousecleaningService + def self.reserved_refs_names + %w[heads tags merge-requests keep-around environments] + end + + def self.reserved_refs_regexp + names = reserved_refs_names.map(&Regexp.method(:escape)).join('|') + + %r{\Arefs/(?:#{names})/} + end + + def initialize(project) + @project = project + end + + # This could raise Projects::HousekeepingService::LeaseTaken + def execute + Projects::HousekeepingService.new(@project).execute do + garbage_refs.each(&rugged.references.method(:delete)) + end + end + + private + + def garbage_refs + @garbage_refs ||= begin + reserved_refs_regexp = self.class.reserved_refs_regexp + + rugged.references.reject do |ref| + ref.name =~ reserved_refs_regexp + end + end + end + + def rugged + @rugged ||= @project.repository.rugged + end + end +end diff --git a/app/services/projects/import_export/cleanup_service.rb b/app/services/projects/import_export/cleanup_service.rb deleted file mode 100644 index 25bff3468a9..00000000000 --- a/app/services/projects/import_export/cleanup_service.rb +++ /dev/null @@ -1,42 +0,0 @@ -module Projects - module ImportExport - class CleanupService - def self.reserved_refs_names - %w[heads tags merge-requests keep-around environments] - end - - def self.reserved_refs_regexp - names = reserved_refs_names.map(&Regexp.method(:escape)).join('|') - - %r{\Arefs/(?:#{names})/} - end - - def initialize(project) - @project = project - end - - # This could raise Projects::HousekeepingService::LeaseTaken - def execute - Projects::HousekeepingService.new(@project).execute do - garbage_refs.each(&rugged.references.method(:delete)) - end - end - - private - - def garbage_refs - @garbage_refs ||= begin - reserved_refs_regexp = self.class.reserved_refs_regexp - - rugged.references.reject do |ref| - ref.name =~ reserved_refs_regexp - end - end - end - - def rugged - @rugged ||= @project.repository.rugged - end - end - end -end |