class Bosh::Cli::Versions::VersionFileResolver

Public Class Methods

new(storage, blobstore, tmpdir=Dir.tmpdir) click to toggle source
# File lib/cli/versions/version_file_resolver.rb, line 4
def initialize(storage, blobstore, tmpdir=Dir.tmpdir)
  @storage = storage
  @blobstore = blobstore
  @tmpdir = tmpdir
end

Public Instance Methods

find_file(blobstore_id, sha1, desc) click to toggle source
# File lib/cli/versions/version_file_resolver.rb, line 10
def find_file(blobstore_id, sha1, desc)
  if @storage.has_file?(sha1)
    file_path = @storage.get_file(sha1)
    file_sha1 = Digest::SHA1.file(file_path).hexdigest
    if file_sha1 == sha1
      return file_path
    end
    say("SHA1 `#{file_sha1}' of #{desc} does not match expected SHA1 `#{sha1}'".make_red)
  end

  if blobstore_id.nil?
    err("Cannot find #{desc}")
  end

  say("Downloading from blobstore (id=#{blobstore_id})...".make_green)

  tmp_file_path = File.join(@tmpdir, "bosh-tmp-file-#{SecureRandom.uuid}")
  begin
    File.open(tmp_file_path, 'wb') do |tmp_file|
      @blobstore.get(blobstore_id, tmp_file, sha1: sha1)
    end

    @storage.put_file(sha1, tmp_file_path)
  ensure
    FileUtils.rm(tmp_file_path, :force => true)
  end
end