class KPM::BaseArtifact

def pull_and_put_in_place(logger, coordinates, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, overrides={}, ssl_verify=true)

def pull_and_put_in_place(logger, coordinates, destination_path=nil, skip_top_dir=true, sha1_file=nil, force_download=false, overrides={}, ssl_verify=true)
  destination_path = KPM::root if destination_path.nil?
  # Create the destination directory
  if path_looks_like_a_directory(destination_path)
    destination_dir = destination_path
  else
    destination_dir = File.dirname(destination_path)
  end
  FileUtils.mkdir_p(destination_dir)
  # Build artifact info
  artifact_info = artifact_info(coordinates, destination_path, overrides, ssl_verify)
  if !force_download && skip_if_exists(artifact_info, coordinates, sha1_file)
    logger.info "Skipping installation of #{coordinates} to #{artifact_info[:file_path]}, file already exists"
    artifact_info[:skipped] = true
    return artifact_info
  end
  # Download the artifact in a temporary directory in case of failures
  Dir.mktmpdir do |tmp_destination_dir|
    logger.info "      Starting download of #{coordinates} to #{tmp_destination_dir}"
    downloaded_artifact_info  = pull_and_verify(logger, artifact_info[:sha1], coordinates, tmp_destination_dir, sha1_file, overrides, ssl_verify)
    if artifact_info[:is_tgz]
      Utils.unpack_tgz(downloaded_artifact_info[:file_path], destination_path, skip_top_dir)
      FileUtils.rm downloaded_artifact_info[:file_path]
    else
      FileUtils.mv downloaded_artifact_info[:file_path], destination_path
      artifact_info[:size] = downloaded_artifact_info[:size]
    end
    logger.info "Successful installation of #{coordinates} to #{artifact_info[:file_path]}"
  end
  artifact_info
end