lib/backup/cleaner.rb
module Backup
module Cleaner
class Error < Backup::Error; end
class << self
##
# Logs warnings if any temporary files still exist
# from the last time this model/trigger was run,
# then removes the files.
def prepare(model)
messages = []
packaging_folder = File.join(Config.tmp_path, model.trigger)
if File.exist?(packaging_folder)
messages << <<-EOS
The temporary packaging folder still exists!
'#{packaging_folder}'
It will now be removed.
EOS
FileUtils.rm_rf(packaging_folder)
end
package_files = package_files_for(model.trigger)
unless package_files.empty?
# the chances of the packaging folder AND
# the package files existing are practically nil
messages << ("-" * 74) unless messages.empty?
messages << <<-EOS
The temporary backup folder '#{Config.tmp_path}'
appears to contain the package files from the previous backup!
#{package_files.join("\n")}
These files will now be removed.
EOS
package_files.each { |file| FileUtils.rm_f(file) }
end
unless messages.empty?
Logger.warn Error.new(<<-EOS)
Cleanup Warning
#{messages.join("\n")}
Please check the log for messages and/or your notifications
concerning this backup: '#{model.label} (#{model.trigger})'
The temporary files which had to be removed should not have existed.
EOS
end
end
##
# Remove the temporary folder used during packaging
def remove_packaging(model)
Logger.info "Cleaning up the temporary files..."
FileUtils.rm_rf(File.join(Config.tmp_path, model.trigger))
end
##
# Remove the final package files from tmp_path
# Note: 'force' is used, since a Local Storage may *move* these files.
def remove_package(package)
Logger.info "Cleaning up the package files..."
package.filenames.each do |file|
FileUtils.rm_f(File.join(Config.tmp_path, file))
end
end
##
# Logs warnings if any temporary files still exist
# when errors occur during the backup
def warnings(model)
messages = []
packaging_folder = File.join(Config.tmp_path, model.trigger)
if File.exist?(packaging_folder)
messages << <<-EOS
The temporary packaging folder still exists!
'#{packaging_folder}'
This folder may contain completed Archives and/or Database backups.
EOS
end
package_files = package_files_for(model.trigger)
unless package_files.empty?
# the chances of the packaging folder AND
# the package files existing are practically nil
messages << ("-" * 74) unless messages.empty?
messages << <<-EOS
The temporary backup folder '#{Config.tmp_path}'
appears to contain the backup files which were to be stored:
#{package_files.join("\n")}
EOS
end
unless messages.empty?
Logger.warn Error.new(<<-EOS)
Cleanup Warning
#{messages.join("\n")}
Make sure you check these files before the next scheduled backup for
'#{model.label} (#{model.trigger})'
These files will be removed at that time!
EOS
end
end
private
def package_files_for(trigger)
Dir[File.join(Config.tmp_path, "#{trigger}.tar{,[.-]*}")]
end
end
end
end