Commit e230551940b31f7779a16975f2b3e941815d2e03

Authored by Dmitriy Zaporozhets
1 parent 1d03fa2e

backup/restore uploads

CHANGELOG
... ... @@ -10,6 +10,8 @@ v 5.1.0
10 10 - Backup/Restore refactored. Backup dump project wiki too now
11 11 - Restyled Issues list. Show milestone version in issue row
12 12 - Restyled Merge Request list
  13 + - Backup now dump/restore uploads
  14 + - Improved perfomance of dashboard
13 15  
14 16 v 5.0.0
15 17 - Replaced gitolite with gitlab-shell
... ...
lib/backup/uploads.rb 0 → 100644
... ... @@ -0,0 +1,25 @@
  1 +module Backup
  2 + class Uploads
  3 + attr_reader :app_uploads_dir, :backup_uploads_dir, :backup_dir
  4 +
  5 + def initialize
  6 + @app_uploads_dir = Rails.root.join('public', 'uploads')
  7 + @backup_dir = Gitlab.config.backup.path
  8 + @backup_uploads_dir = File.join(Gitlab.config.backup.path, 'uploads')
  9 + end
  10 +
  11 + # Copy uploads from public/uploads to backup/uploads
  12 + def dump
  13 + FileUtils.mkdir_p(backup_uploads_dir)
  14 + FileUtils.cp_r(app_uploads_dir, backup_dir)
  15 + end
  16 +
  17 + def restore
  18 + if File.exists?(app_uploads_dir)
  19 + FileUtils.mv(app_uploads_dir, Rails.root.join('public', "uploads.#{Time.now.to_i}"))
  20 + end
  21 +
  22 + FileUtils.cp_r(backup_uploads_dir, app_uploads_dir)
  23 + end
  24 + end
  25 +end
... ...
lib/tasks/gitlab/backup.rake
... ... @@ -9,6 +9,7 @@ namespace :gitlab do
9 9  
10 10 Rake::Task["gitlab:backup:db:create"].invoke
11 11 Rake::Task["gitlab:backup:repo:create"].invoke
  12 + Rake::Task["gitlab:backup:uploads:create"].invoke
12 13  
13 14 Dir.chdir(Gitlab.config.backup.path)
14 15  
... ... @@ -25,7 +26,7 @@ namespace :gitlab do
25 26  
26 27 # create archive
27 28 print "Creating backup archive: #{Time.now.to_i}_gitlab_backup.tar ... "
28   - if Kernel.system("tar -cf #{Time.now.to_i}_gitlab_backup.tar repositories/ db/ backup_information.yml")
  29 + if Kernel.system("tar -cf #{Time.now.to_i}_gitlab_backup.tar repositories/ db/ uploads/ backup_information.yml")
29 30 puts "done".green
30 31 else
31 32 puts "failed".red
... ... @@ -33,7 +34,7 @@ namespace :gitlab do
33 34  
34 35 # cleanup: remove tmp files
35 36 print "Deleting tmp directories ... "
36   - if Kernel.system("rm -rf repositories/ db/ backup_information.yml")
  37 + if Kernel.system("rm -rf repositories/ db/ uploads/ backup_information.yml")
37 38 puts "done".green
38 39 else
39 40 puts "failed".red
... ... @@ -99,10 +100,11 @@ namespace :gitlab do
99 100  
100 101 Rake::Task["gitlab:backup:db:restore"].invoke
101 102 Rake::Task["gitlab:backup:repo:restore"].invoke
  103 + Rake::Task["gitlab:backup:uploads:restore"].invoke
102 104  
103 105 # cleanup: remove tmp files
104 106 print "Deleting tmp directories ... "
105   - if Kernel.system("rm -rf repositories/ db/ backup_information.yml")
  107 + if Kernel.system("rm -rf repositories/ db/ uploads/ backup_information.yml")
106 108 puts "done".green
107 109 else
108 110 puts "failed".red
... ... @@ -136,5 +138,19 @@ namespace :gitlab do
136 138 puts "done".green
137 139 end
138 140 end
  141 +
  142 + namespace :uploads do
  143 + task :create => :environment do
  144 + puts "Dumping uploads ... ".blue
  145 + Backup::Uploads.new.dump
  146 + puts "done".green
  147 + end
  148 +
  149 + task :restore => :environment do
  150 + puts "Restoring uploads ... ".blue
  151 + Backup::Uploads.new.restore
  152 + puts "done".green
  153 + end
  154 + end
139 155 end # namespace end: backup
140 156 end # namespace end: gitlab
... ...