Sha256: 5e3ad59ef51180418663240a330b04665e990b56a251215a86bf4e2daed226e1

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

require 'cgi'
require 'fileutils'
require 'find'

require 'fig/file_not_found_error'
require 'fig/logging'
require 'fig/protocol'

module Fig; end
module Fig::Protocol; end

# File transfers for the local filesystem.
class Fig::Protocol::File
  include Fig::Protocol

  def download_list(uri)
    packages = []
    unescaped_path = CGI.unescape uri.path
    return packages if ! ::File.exist?(unescaped_path)

    ls = ''
    Find.find(unescaped_path) { |file| ls << file.to_s; ls << "\n" }

    strip_paths_for_list(ls, packages, unescaped_path)

    return packages
  end

  # Determine whether we need to update something.  Returns nil to indicate
  # "don't know".
  def path_up_to_date?(uri, path)
    begin
      unescaped_path = CGI.unescape uri.path
      if ::File.mtime(unescaped_path) <= ::File.mtime(path)
        return true
      end

      return false
    rescue Errno::ENOENT => error
      raise Fig::FileNotFoundError.new error.message, uri
    end
  end

  # Returns whether the file was not downloaded because the file already
  # exists and is already up-to-date.
  def download(uri, path)
    begin
      unescaped_path = CGI.unescape uri.path
      FileUtils.cp(unescaped_path, path)

      return true
    rescue Errno::ENOENT => error
      raise Fig::FileNotFoundError.new error.message, uri
    end
  end

  def upload(local_file, uri)
    unescaped_path = CGI.unescape uri.path
    FileUtils.mkdir_p(::File.dirname(unescaped_path))
    FileUtils.cp(local_file, unescaped_path)

    return
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fig-1.1.0 lib/fig/protocol/file.rb