aboutsummaryrefslogtreecommitdiff
path: root/vendor/supply_drop/lib/supply_drop/rsync.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/supply_drop/lib/supply_drop/rsync.rb')
-rw-r--r--vendor/supply_drop/lib/supply_drop/rsync.rb167
1 files changed, 0 insertions, 167 deletions
diff --git a/vendor/supply_drop/lib/supply_drop/rsync.rb b/vendor/supply_drop/lib/supply_drop/rsync.rb
deleted file mode 100644
index a3d4898..0000000
--- a/vendor/supply_drop/lib/supply_drop/rsync.rb
+++ /dev/null
@@ -1,167 +0,0 @@
-module SupplyDrop
- class Rsync
- class << self
- def command(from, to, options={})
- flags = ['-az']
- flags << '--delete' if options[:delete]
- flags << includes(options[:includes]) if options.has_key?(:includes)
- flags << excludes(options[:excludes]) if options.has_key?(:excludes)
- flags << ssh_options(options[:ssh]) if options.has_key?(:ssh)
- flags << options[:flags] if options.has_key?(:flags)
-
- "rsync #{flags.compact.join(' ')} #{from} #{to}"
- end
-
- def remote_address(user, host, path)
- user_with_host = [user, host].compact.join('@')
- [user_with_host, path].join(':')
- end
-
- def excludes(patterns)
- [patterns].flatten.compact.map { |p| "--exclude='#{p}'" }
- end
-
- def includes(patterns)
- [patterns].flatten.compact.map { |p| "--include='#{p}'" }
- end
-
- def ssh_options(options)
- mapped_options = options.map do |key, value|
- next unless value
-
- #
- # Convert Net::SSH options into OpenSSH options.
- #
- # For a list of the options normally support by Net::SSH (and thus Capistrano), see
- # http://net-ssh.github.com/net-ssh/classes/Net/SSH.html#method-c-start
- #
- # Also, to see how Net::SSH does the opposite of the conversion we are doing here, check out:
- # https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/config.rb
- #
- # API mismatch:
- #
- # * many OpenSSH options not supported
- # * some options only make sense for Net::SSH
- # * compression: for Net::SSH, this option is supposed to accept true, false, or algorithm. OpenSSH accepts 'yes' or 'no'
- #
- #
- case key
- when :auth_methods then opt_auth_methods(value)
- when :bind_address then opt('BindAddress', value)
- when :compression then opt('Compression', value ? 'yes' : 'no')
- when :compression_level then opt('CompressionLevel', value.to_i)
- when :config then "-F '#{value}'"
- when :encryption then opt('Ciphers', [value].flatten.join(','))
- when :forward_agent then opt('ForwardAgent', value)
- when :global_known_hosts_file then opt('GlobalKnownHostsFile', value)
- when :hmac then opt('MACs', [value].flatten.join(','))
- when :host_key then opt('HostKeyAlgorithms', [value].flatten.join(','))
- when :host_key_alias then opt('HostKeyAlias', value)
- when :host_name then opt('HostName', value)
- when :kex then opt('KexAlgorithms', [value].flatten.join(','))
- when :key_data then nil # not supported
- when :keys then [value].flatten.select { |k| File.exist?(k) }.map { |k| "-i #{k}" }
- when :keys_only then opt('IdentitiesOnly', value ? 'yes' : 'no')
- when :languages then nil # not applicable
- when :logger then nil # not applicable
- when :paranoid then opt('StrictHostKeyChecking', value ? 'yes' : 'no')
- when :passphrase then nil # not supported
- when :password then nil # not supported
- when :port then "-p #{value.to_i}"
- when :properties then nil # not applicable
- when :proxy then nil # not applicable
- when :rekey_blocks_limit then nil # not supported
- when :rekey_limit then opt('RekeyLimit', reverse_interpret_size(value))
- when :rekey_packet_limit then nil # not supported
- when :timeout then opt('ConnectTimeout', value.to_i)
- when :user then "-l #{value}"
- when :user_known_hosts_file then opt('UserKnownHostsFile', value)
- when :verbose then opt('LogLevel', interpret_log_level(value))
- end
- end.compact
-
- %[-e "ssh #{mapped_options.join(' ')}"] unless mapped_options.empty?
- end
-
- private
-
- def opt(option_name, option_value)
- "-o #{option_name}='#{option_value}'"
- end
-
- #
- # In OpenSSH, password and pubkey default to 'yes', hostbased defaults to 'no'.
- # Regardless, if :auth_method is configured, then we explicitly set the auth method.
- #
- def opt_auth_methods(value)
- value = [value].flatten
- opts = []
- if value.any?
- if value.include? 'password'
- opts << opt('PasswordAuthentication', 'yes')
- else
- opts << opt('PasswordAuthentication', 'no')
- end
- if value.include? 'publickey'
- opts << opt('PubkeyAuthentication', 'yes')
- else
- opts << opt('PubkeyAuthentication', 'no')
- end
- if value.include? 'hostbased'
- opts << opt('HostbasedAuthentication', 'yes')
- else
- opts << opt('HostbasedAuthentication', 'no')
- end
- end
- if opts.any?
- return opts.join(' ')
- else
- nil
- end
- end
-
- #
- # Converts the given integer size in bytes into a string with 'K', 'M', 'G' suffix, as appropriate.
- #
- # reverse of interpret_size in https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/config.rb
- #
- def reverse_interpret_size(size)
- size = size.to_i
- if size < 1024
- "#{size}"
- elsif size < 1024 * 1024
- "#{size/1024}K"
- elsif size < 1024 * 1024 * 1024
- "#{size/(1024*1024)}M"
- else
- "#{size/(1024*1024*1024)}G"
- end
- end
-
- def interpret_log_level(level)
- if level.is_a? Symbol
- case level
- when :debug then "DEBUG"
- when :info then "INFO"
- when :warn then "ERROR"
- when :error then "ERROR"
- when :fatal then "FATAL"
- else "INFO"
- end
- elsif level.is_a? Integer
- case level
- when Logger::DEBUG then "DEBUG"
- when Logger::INFO then "INFO"
- when Logger::WARN then "ERROR"
- when Logger::ERROR then "ERROR"
- when Logger::FATAL then "FATAL"
- else "INFO"
- end
- else
- "INFO"
- end
- end
-
- end
- end
-end