diff options
Diffstat (limited to 'lib/backup/files.rb')
-rw-r--r-- | lib/backup/files.rb | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/backup/files.rb b/lib/backup/files.rb index dae9056a47b..619a62fd6f6 100644 --- a/lib/backup/files.rb +++ b/lib/backup/files.rb @@ -7,14 +7,17 @@ module Backup class Files include Backup::Helper - attr_reader :name, :app_files_dir, :backup_tarball, :files_parent_dir + DEFAULT_EXCLUDE = 'lost+found' - def initialize(name, app_files_dir) + attr_reader :name, :app_files_dir, :backup_tarball, :excludes, :files_parent_dir + + def initialize(name, app_files_dir, excludes: []) @name = name @app_files_dir = File.realpath(app_files_dir) @files_parent_dir = File.realpath(File.join(@app_files_dir, '..')) @backup_files_dir = File.join(Gitlab.config.backup.path, File.basename(@app_files_dir) ) @backup_tarball = File.join(Gitlab.config.backup.path, name + '.tar.gz') + @excludes = [DEFAULT_EXCLUDE].concat(excludes) end # Copy files from public/files to backup/files @@ -23,7 +26,7 @@ module Backup FileUtils.rm_f(backup_tarball) if ENV['STRATEGY'] == 'copy' - cmd = %W(rsync -a --exclude=lost+found #{app_files_dir} #{Gitlab.config.backup.path}) + cmd = [%w(rsync -a), exclude_dirs(:rsync), %W(#{app_files_dir} #{Gitlab.config.backup.path})].flatten output, status = Gitlab::Popen.popen(cmd) unless status == 0 @@ -31,10 +34,12 @@ module Backup raise Backup::Error, 'Backup failed' end - run_pipeline!([%W(#{tar} --exclude=lost+found -C #{@backup_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) + tar_cmd = [tar, exclude_dirs(:tar), %W(-C #{@backup_files_dir} -cf - .)].flatten + run_pipeline!([tar_cmd, gzip_cmd], out: [backup_tarball, 'w', 0600]) FileUtils.rm_rf(@backup_files_dir) else - run_pipeline!([%W(#{tar} --exclude=lost+found -C #{app_files_dir} -cf - .), gzip_cmd], out: [backup_tarball, 'w', 0600]) + tar_cmd = [tar, exclude_dirs(:tar), %W(-C #{app_files_dir} -cf - .)].flatten + run_pipeline!([tar_cmd, gzip_cmd], out: [backup_tarball, 'w', 0600]) end end @@ -81,5 +86,17 @@ module Backup error = err_r.read raise Backup::Error, "Backup failed. #{error}" unless error =~ regex end + + def exclude_dirs(fmt) + excludes.map do |s| + if s == DEFAULT_EXCLUDE + '--exclude=' + s + elsif fmt == :rsync + '--exclude=/' + s + elsif fmt == :tar + '--exclude=./' + s + end + end + end end end |