Class: Indocker::Rsync
- Inherits:
-
Object
- Object
- Indocker::Rsync
- Defined in:
- lib/indocker/rsync.rb
Class Method Summary collapse
- .local_sync(from, to, create_path: nil, raise_on_error: false, exclude: nil) ⇒ Object
- .sync(session, from, to, create_path: nil, raise_on_error: false, exclude: nil) ⇒ Object
- .sync_local_cp(from, to, raise_on_error:) ⇒ Object
- .sync_local_rsync(from, to, raise_on_error:, exclude: nil) ⇒ Object
Class Method Details
.local_sync(from, to, create_path: nil, raise_on_error: false, exclude: nil) ⇒ Object
4 5 6 7 8 9 10 11 12 13 |
# File 'lib/indocker/rsync.rb', line 4 def self.local_sync(from, to, create_path: nil, raise_on_error: false, exclude: nil) @session ||= Indocker::SshSession.new( host: 'localhost', user: nil, port: nil, logger: Indocker.logger ) sync(@session, from, to, create_path: create_path, raise_on_error: raise_on_error, exclude: exclude) end |
.sync(session, from, to, create_path: nil, raise_on_error: false, exclude: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/indocker/rsync.rb', line 15 def self.sync(session, from, to, create_path: nil, raise_on_error: false, exclude: nil) if create_path session.exec!("mkdir -p #{create_path}") end if session.local? return if File.(to) == File.(from) Indocker::Shell.command("rm -rf #{to}", Indocker.logger, raise_on_error: raise_on_error) if Indocker::Shell.command_exist?("rsync") sync_local_rsync(from, to, raise_on_error: raise_on_error, exclude: exclude) else Indocker.logger.debug("WARNING: exclude option skipped due to fallback to CP command") sync_local_cp(from, to, raise_on_error: raise_on_error) end else command = "rsync --delete-after -a -e 'ssh -p #{session.port}' #{from} #{session.user}@#{session.host}:#{to}" Indocker.logger.debug("sync #{from} #{session.user}@#{session.host}:#{to}") Indocker::Shell.command(command, Indocker.logger, raise_on_error: raise_on_error) end end |
.sync_local_cp(from, to, raise_on_error:) ⇒ Object
39 40 41 |
# File 'lib/indocker/rsync.rb', line 39 def self.sync_local_cp(from, to, raise_on_error:) Indocker::Shell.command("cp -r #{from} #{to}", Indocker.logger, raise_on_error: raise_on_error) end |
.sync_local_rsync(from, to, raise_on_error:, exclude: nil) ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/indocker/rsync.rb', line 43 def self.sync_local_rsync(from, to, raise_on_error:, exclude: nil) = [] << " --exclude=#{exclude}" if exclude # Add a trailing slash to directory to have behavior similar to CP command if File.directory?(from) && !from.end_with?("/") from = "#{from}/" end Indocker::Shell.command("rsync -a #{options.join(' ')} #{from} #{to}", Indocker.logger, raise_on_error: raise_on_error) end |