diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2017-08-23 20:25:44 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2017-08-23 20:25:44 +0800 |
commit | 5f811894a8ba0d85298cc695c360f171d30c193c (patch) | |
tree | c0912536de9917f4883d4f5da090ff20564c6d32 /app | |
parent | d546f7d36e6703bda430e2f50fe4e87a07ab48f8 (diff) | |
download | gitlab-ce-5f811894a8ba0d85298cc695c360f171d30c193c.tar.gz |
Remove unwanted refs after importing a project
Because we don't need them, and they would slow down
the repository, keeping unneeded objects as well.
We could also consider doing this in regular housekeeping.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/services/projects/housekeeping_service.rb | 2 | ||||
-rw-r--r-- | app/services/projects/import_export/cleanup_service.rb | 33 |
3 files changed, 36 insertions, 1 deletions
diff --git a/app/models/project.rb b/app/models/project.rb index 37f4dd08355..72da4e8eb2e 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::HousekeepingService.new(project).execute + Projects::ImportExport::CleanupService.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/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 |