Sha256: 64ea106f454e60d3dc8a506f49c27716709d8a98708b7d57050c39345d16fb14

Contents?: true

Size: 1.84 KB

Versions: 30

Compression:

Stored size: 1.84 KB

Contents

# == ShellManager::BaseLink
#
# An abstract ShellManager driver used by drivers that provide either hard or
# symbolic links.
class AutomateIt::ShellManager::BaseLink < AutomateIt::ShellManager::BaseDriver
  abstract_driver

  # See ShellManager#ln
  def _ln(sources, target, opts={})
    kind = \
      if opts[:symbolic] and opts[:force]
        :ln_sf
      elsif opts[:symbolic]
        :ln_s
      else
        :ln
      end

    missing = []
    sources = [sources].flatten

    if kind == :ln
      raise TypeError.new("source for hard link must be a String") unless sources.size == 1
    end

    for source in sources
      peer = peer_for(source, target)
      begin
        peer_stat = File.stat(peer)
        source_stat = File.stat(source)

        if peer_stat.ino == source_stat.ino
          next
        elsif kind == :ln
          missing << source
        elsif Pathname.new(peer).realpath != Pathname.new(source).realpath
          # It's either :ln_s or :ln_sf
          missing << source
        end
      rescue Errno::ENOENT
        # File doesn't exist, so obviously missing
        missing << source
      end
    end
    return false if missing.empty?

    log.debug(PNOTE+"_ln(%s, %s, %s) # => %s" % [kind, sources.inspect, target.inspect, missing.inspect])
    missing = missing.first if missing.size == 1

    displayed = "ln"
    if opts[:symbolic] and opts[:force]
      displayed << " -sf"
    else
      displayed << " -s" if opts[:symbolic]
      displayed << " -f" if opts[:force]
    end

    if kind == :ln
      log.info(PEXEC+"#{displayed} #{missing} #{target}")
      FileUtils.ln(missing, target, _fileutils_opts) && missing
    else
      log.info(PEXEC+"#{displayed} #{String === missing ? missing : missing.join(' ')} #{target}")
      FileUtils.send(kind, missing, target, _fileutils_opts) && missing
    end
    return missing
  end
end

Version data entries

30 entries across 30 versions & 2 rubygems

Version Path
automate-it-0.9.2 lib/automateit/shell_manager/base_link.rb
automate-it-0.9.1 lib/automateit/shell_manager/base_link.rb
automate-it-0.9.0 lib/automateit/shell_manager/base_link.rb
automateit-0.70928 lib/automateit/shell_manager/base_link.rb
automateit-0.70930 lib/automateit/shell_manager/base_link.rb
automateit-0.71003 lib/automateit/shell_manager/base_link.rb
automateit-0.71030 lib/automateit/shell_manager/base_link.rb
automateit-0.71031.1 lib/automateit/shell_manager/base_link.rb
automateit-0.71031.2 lib/automateit/shell_manager/base_link.rb
automateit-0.71017 lib/automateit/shell_manager/base_link.rb
automateit-0.71021 lib/automateit/shell_manager/base_link.rb
automateit-0.71012 lib/automateit/shell_manager/base_link.rb
automateit-0.71006 lib/automateit/shell_manager/base_link.rb
automateit-0.71102 lib/automateit/shell_manager/base_link.rb
automateit-0.71101.2 lib/automateit/shell_manager/base_link.rb
automateit-0.71101 lib/automateit/shell_manager/base_link.rb
automateit-0.71103 lib/automateit/shell_manager/base_link.rb
automateit-0.71101.1 lib/automateit/shell_manager/base_link.rb
automateit-0.71031 lib/automateit/shell_manager/base_link.rb
automateit-0.71104 lib/automateit/shell_manager/base_link.rb