diff options
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/housekeeping_service.rb | 2 | ||||
-rw-r--r-- | app/services/projects/import_export/cleanup_service.rb | 33 |
2 files changed, 35 insertions, 0 deletions
diff --git a/app/services/projects/housekeeping_service.rb b/app/services/projects/housekeeping_service.rb index d66ef676088..dcef8b66215 100644 --- a/app/services/projects/housekeeping_service.rb +++ b/app/services/projects/housekeeping_service.rb @@ -26,6 +26,8 @@ module Projects lease_uuid = try_obtain_lease raise LeaseTaken unless lease_uuid.present? + yield if block_given? + execute_gitlab_shell_gc(lease_uuid) end diff --git a/app/services/projects/import_export/cleanup_service.rb b/app/services/projects/import_export/cleanup_service.rb new file mode 100644 index 00000000000..54d7fb88a91 --- /dev/null +++ b/app/services/projects/import_export/cleanup_service.rb @@ -0,0 +1,33 @@ +module Projects + module ImportExport + class CleanupService + RESERVED_REFS_REGEXP = + %r{\Arefs/(?:heads|tags|merge\-requests|keep\-around|environments)/} + + attr_reader :project + + 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 ||= rugged.references.reject do |ref| + ref.name =~ RESERVED_REFS_REGEXP + end + end + + def rugged + @rugged ||= project.repository.rugged + end + end + end +end |