summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-06-14 22:11:21 +0200
committerJames Lopez <james@jameslopez.es>2016-06-14 22:11:21 +0200
commit36ccaca35a7be19498d779a5b781cc4e3f0dede8 (patch)
treee503c991277f048f22fc5899434484e7ff07818a
parentdee6fba5c9df60be370b881f074fac13d16b83ed (diff)
downloadgitlab-ce-36ccaca35a7be19498d779a5b781cc4e3f0dede8.tar.gz
project export archiver
-rw-r--r--app/controllers/projects_controller.rb4
-rw-r--r--app/models/project.rb9
-rw-r--r--app/workers/gitlab_project_archive_worker.rb9
-rw-r--r--config/initializers/1_settings.rb3
4 files changed, 22 insertions, 3 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 9a6d4be2fc8..affc298e0ca 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -266,8 +266,6 @@ class ProjectsController < Projects::ApplicationController
end
def export_project_path
- # TODO: move this, probably to ImportExport and refactor
- folder = File.join(Settings.shared['path'], 'tmp/project_exports', @project.path_with_namespace)
- Dir.glob("#{folder}/*export.tar.gz").max_by {|f| File.ctime(f)}
+ Dir.glob("#{@project.export_path}/*export.tar.gz").max_by {|f| File.ctime(f)}
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 9d7b988bf21..617dbf9a925 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -348,6 +348,11 @@ class Project < ActiveRecord::Base
joins(join_body).reorder('join_note_counts.amount DESC')
end
+
+ # Deletes gitlab project export files older than 24 hours
+ def archive_gitlab_exports!
+ Gitlab::Popen.popen(%W(find #{export_path} -not -path #{export_path} -mmin +1440 -delete))
+ end
end
def team
@@ -1104,4 +1109,8 @@ class Project < ActiveRecord::Base
Rails.logger.error "Export job failed to start for project ID #{self.id}"
end
end
+
+ def export_path
+ File.join(ImportExport.storage_path, path_with_namespace)
+ end
end
diff --git a/app/workers/gitlab_project_archive_worker.rb b/app/workers/gitlab_project_archive_worker.rb
new file mode 100644
index 00000000000..63e7086d41a
--- /dev/null
+++ b/app/workers/gitlab_project_archive_worker.rb
@@ -0,0 +1,9 @@
+class GitlabProjectArchiveWorker
+ include Sidekiq::Worker
+
+ sidekiq_options queue: :default
+
+ def perform
+ Project.archive_gitlab_exports!
+ end
+end
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 436751b9d16..64cfc0f5357 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -288,6 +288,9 @@ Settings.cron_jobs['admin_email_worker']['job_class'] = 'AdminEmailWorker'
Settings.cron_jobs['repository_archive_cache_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['repository_archive_cache_worker']['cron'] ||= '0 * * * *'
Settings.cron_jobs['repository_archive_cache_worker']['job_class'] = 'RepositoryArchiveCacheWorker'
+Settings.cron_jobs['gitlab_project_archive_worker'] ||= Settingslogic.new({})
+Settings.cron_jobs['gitlab_project_archive_worker']['cron'] ||= '0 * * * *'
+Settings.cron_jobs['gitlab_project_archive_worker']['job_class'] = 'GitlabProjectArchiveWorker'
#
# GitLab Shell