Sha256: 9eda1d374cb3f3ca188ec9f294d501facdffb18c7c1e851fb51b14341fae90af

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

require 'shellwords'

module Lono::Utils
  module Rsync
    include Lono::Utils::Logging

    def sh(command)
      logger.info "=> #{command}"
      out = `#{command}`
      logger.info out if ENV['LONO_DEBUG_SH']
      success = $?.success?
      raise("ERROR: running command #{command}").color(:red) unless success
      success
    end

    def rsync(src, dest)
      # Using FileUtils.cp_r doesnt work if there are special files like socket files in the src dir.
      # Instead of using this hack https://bugs.ruby-lang.org/issues/10104
      # Using rsync to perform the copy.
      src.chop! if src.ends_with?('/')
      dest.chop! if dest.ends_with?('/')
      check_rsync_installed!
      # Ensures required trailing slashes
      FileUtils.mkdir_p(File.dirname(dest))
      sh "rsync -a --links --no-specials --no-devices #{Shellwords.escape(src)}/ #{Shellwords.escape(dest)}/"
    end

    @@rsync_installed = false
    def check_rsync_installed!
      return if @@rsync_installed # only check once
      if system "type rsync > /dev/null 2>&1"
        @@rsync_installed = true
      else
        raise "ERROR: Rsync is required. Rsync does not seem to be installed.".color(:red)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lono-8.0.0.pre.rc3 lib/lono/utils/rsync.rb
lono-8.0.0.pre.rc2 lib/lono/utils/rsync.rb
lono-8.0.0.pre.rc1 lib/lono/utils/rsync.rb