summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2017-08-23 20:25:44 +0800
committerLin Jen-Shin <godfat@godfat.org>2017-08-23 20:25:44 +0800
commit5f811894a8ba0d85298cc695c360f171d30c193c (patch)
treec0912536de9917f4883d4f5da090ff20564c6d32 /app
parentd546f7d36e6703bda430e2f50fe4e87a07ab48f8 (diff)
downloadgitlab-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.rb2
-rw-r--r--app/services/projects/housekeeping_service.rb2
-rw-r--r--app/services/projects/import_export/cleanup_service.rb33
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