Sha256: 9d3233ff4716da83f47d20748dd05168c287a8f4ad301d588da53d4ed6a675a9

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Backup
  module Syncer
    module RSync
      class Pull < Push
        def perform!
          log!(:started)
          write_password_file!

          create_dest_path!
          run("#{rsync_command} #{host_options}#{paths_to_pull} " \
              "'#{dest_path}'")

          log!(:finished)
        ensure
          remove_password_file!
        end

        private

        ##
        # Returns the syntax for pulling multiple paths from the remote host.
        # e.g.
        #   rsync -a -e "ssh -p 22" host:'path1' :'path2' '/dest'
        #   rsync -a rsync_user@host::'modname/path1' ::'modname/path2' '/dest'
        #
        # Remove any preceeding '~/', since these paths are on the remote.
        # Also remove any trailing `/`, since we don't want rsync's
        # "trailing / on source directories" behavior.
        def paths_to_pull
          sep = mode == :ssh ? ":" : "::"
          directories.map do |dir|
            "#{sep}'#{dir.sub(%r{^~/}, "").sub(%r{/$}, "")}'"
          end.join(" ").sub(%r{^#{sep}}, "")
        end

        # Expand path, since this is local and shell-quoted.
        def dest_path
          @dest_path ||= File.expand_path(path)
        end

        def create_dest_path!
          FileUtils.mkdir_p dest_path
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
backupii-0.1.0.pre.alpha.2 lib/backup/syncer/rsync/pull.rb
backupii-0.1.0.pre.alpha.1 lib/backup/syncer/rsync/pull.rb