Adds a new Archive to a Backup Model.
Backup::Model.new(:my_backup, 'My Backup') do archive :my_archive do |archive| archive.add 'path/to/archive' archive.add '/another/path/to/archive' archive.exclude 'path/to/exclude' archive.exclude '/another/path/to/exclude' end end
All paths added using `add` or `exclude` will be expanded to their full paths from the root of the filesystem. Files will be added to the tar archive using these full paths, and their leading `/` will be preserved (using tar’s `-P` option).
/path/to/pwd/path/to/archive/... /another/path/to/archive/...
When a `root` path is given, paths to add/exclude are taken as relative to the `root` path, unless given as absolute paths.
Backup::Model.new(:my_backup, 'My Backup') do archive :my_archive do |archive| archive.root '~/my_data' archive.add 'path/to/archive' archive.add '/another/path/to/archive' archive.exclude 'path/to/exclude' archive.exclude '/another/path/to/exclude' end end
This directs `tar` to change directories to the `root` path to create the archive. Unless paths were given as absolute, the paths within the archive will be relative to the `root` path.
path/to/archive/... /another/path/to/archive/...
For absolute paths added to this archive, the leading `/` will be preserved. Take note that when archives are extracted, leading `/` are stripped by default, so care must be taken when extracting archives with mixed relative/absolute paths.
# File lib/backup/archive.rb, line 53 def initialize(model, name, &block) @model = model @name = name.to_s @options = { :sudo => false, :root => false, :paths => [], :excludes => [], :tar_options => '' } DSL.new(@options).instance_eval(&block) end
# File lib/backup/archive.rb, line 66 def perform! Logger.info "Creating Archive '#{ name }'..." path = File.join(Config.tmp_path, @model.trigger, 'archives') FileUtils.mkdir_p(path) pipeline = Pipeline.new with_files_from(paths_to_package) do |files_from| pipeline.add( "#{ tar_command } #{ tar_options } -cPf -#{ tar_root } " + "#{ paths_to_exclude } #{ files_from }", tar_success_codes ) extension = 'tar' @model.compressor.compress_with do |command, ext| pipeline << command extension << ext end if @model.compressor pipeline << "#{ utility(:cat) } > " + "'#{ File.join(path, "#{ name }.#{ extension }") }'" pipeline.run end if pipeline.success? Logger.info "Archive '#{ name }' Complete!" else raise Error, "Failed to Create Archive '#{ name }'\n" + pipeline.error_messages end end
Generated with the Darkfish Rdoc Generator 2.