Class: Fig::Protocol::SSH
- Inherits:
-
Object
- Object
- Fig::Protocol::SSH
- Includes:
- Fig::Protocol
- Defined in:
- lib/fig/protocol/ssh.rb
Overview
File transfers using external ssh and scp programs
Instance Method Summary collapse
-
#download(uri, path, prompt_for_login) ⇒ Object
Returns whether the file was not downloaded because the file already exists and is already up-to-date.
- #download_list(uri) ⇒ Object
-
#path_up_to_date?(uri, path, prompt_for_login) ⇒ Boolean
Determine whether we need to update something.
- #upload(local_file, uri) ⇒ Object
Instance Method Details
#download(uri, path, prompt_for_login) ⇒ Object
Returns whether the file was not downloaded because the file already exists and is already up-to-date.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/fig/protocol/ssh.rb', line 61 def download(uri, path, prompt_for_login) unescaped_path = CGI.unescape uri.path exists = remote_path_exists(uri.host, unescaped_path) { || raise Fig::NetworkError.new( "Unable to determine whether #{uri} exists: #{}", ) } if not exists raise Fig::FileNotFoundError.new "#{uri} doesn't exist.", uri end scp("#{uri.host}:#{unescaped_path}", path) { || raise Fig::NetworkError.new( "Unable to copy remote file to #{path}: #{}", ) } return true end |
#download_list(uri) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/fig/protocol/ssh.rb', line 16 def download_list(uri) packages = [] unescaped_path = CGI.unescape uri.path ls = ssh(uri.host, 'find', unescaped_path, '-type', 'd') { || raise Fig::NetworkError.new } strip_paths_for_list(ls, packages, unescaped_path) return packages end |
#path_up_to_date?(uri, path, prompt_for_login) ⇒ Boolean
Determine whether we need to update something. Returns nil to indicate “don’t know”.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/fig/protocol/ssh.rb', line 33 def path_up_to_date?(uri, path, prompt_for_login) unescaped_path = CGI.unescape uri.path size_mtime = ssh(uri.host, 'stat', '--format="%s %Z"', unescaped_path) { || raise Fig::NetworkError.new( "Unable to get size and modification time for remote path #{path}: #{}", ) } remote_size, remote_mtime = size_mtime.split remote_size = remote_size.to_i remote_mtime = remote_mtime.to_i if remote_size != ::File.size(path) return false end if remote_mtime <= ::File.mtime(path).to_i return true end return false end |
#upload(local_file, uri) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/fig/protocol/ssh.rb', line 86 def upload(local_file, uri) unescaped_path = CGI.unescape uri.path ssh(uri.host, 'mkdir', '-p', ::File.dirname(unescaped_path)) { || raise Fig::NetworkError.new( "Unable to create directory on remote: #{}", ) } scp(local_file, "#{uri.host}:#{unescaped_path}") { || raise Fig::NetworkError.new( "Unable to copy #{local_file} to remote: #{}", ) } return end |