namespace :tar do
desc "Synchronise from local to remote folder via tar copy" task :up do files = fetch(:syncfiles) files.each do |local_path, config| archive_name = "transfere-#{local_path.hash}.tar.gz" tar_verbose = fetch(:syncfiles_tar_verbose, true) ? "v" : "" exclude_dir = Array(config[:exclude]) exclude_args = exclude_dir.map { |dir| "--exclude '#{dir}'"} cmd = ["tar -c#{tar_verbose}zf #{archive_name} -C #{local_path} .", *exclude_args] puts cmd.join(' ') system cmd.join(' ') tmp_file = fetch(:syncfiles_temp_file, "/tmp/#{archive_name}") remote_path = config[:remote] sync_roles = fetch(:syncfiles_roles, :all) on release_roles sync_roles do upload!(archive_name, tmp_file) execute :tar, "-xzf", tmp_file, "-C", "#{get_syncfiles_base_path}#{remote_path}" execute :rm, tmp_file end system "rm -f #{archive_name}" end end desc "Synchronise from remote to local folder via tar copy" task :down do files = fetch(:syncfiles) files.each do |local_path, config| remote_path = config[:remote] archive_name = "transfere-#{remote_path.hash}.tar.gz" tmp_file = fetch(:syncfiles_temp_file, "/tmp/#{archive_name}") tar_verbose = fetch(:syncfiles_tar_verbose, true) ? "v" : "" exclude_dir = Array(config[:exclude]) exclude_args = exclude_dir.map { |dir| "--exclude '#{dir}'"} sync_roles = fetch(:syncfiles_roles, :all) on primary sync_roles do execute :tar, "-c#{tar_verbose}zf", tmp_file, "-C", "#{get_syncfiles_base_path}#{remote_path} .", *exclude_args download!(tmp_file, archive_name) execute :rm, tmp_file end cmd = "tar -xz#{tar_verbose}f #{archive_name} -C #{local_path}" puts cmd system cmd system "rm -f #{archive_name}" end end
end