/usr/lib/ruby/vendor_ruby/bundler/vendor/compact_index_client/lib/compact_index_client.rb is in ruby-bundler 1.13.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | # frozen_string_literal: true
require "pathname"
require "set"
class Bundler::CompactIndexClient
class Error < StandardError; end
require "bundler/vendor/compact_index_client/lib/compact_index_client/cache"
require "bundler/vendor/compact_index_client/lib/compact_index_client/updater"
require "bundler/vendor/compact_index_client/lib/compact_index_client/version"
attr_reader :directory
# @return [Lambda] A lambda that takes an array of inputs and a block, and
# maps the inputs with the block in parallel.
#
attr_accessor :in_parallel
def initialize(directory, fetcher)
@directory = Pathname.new(directory)
@updater = Updater.new(fetcher)
@cache = Cache.new(@directory)
@endpoints = Set.new
@info_checksums_by_name = {}
@parsed_checksums = false
@in_parallel = lambda do |inputs, &blk|
inputs.map(&blk)
end
end
def names
update(@cache.names_path, "names")
@cache.names
end
def versions
update(@cache.versions_path, "versions")
versions, @info_checksums_by_name = @cache.versions
versions
end
def dependencies(names)
in_parallel.call(names) do |name|
update_info(name)
@cache.dependencies(name).map {|d| d.unshift(name) }
end.flatten(1)
end
def spec(name, version, platform = nil)
update_info(name)
@cache.specific_dependency(name, version, platform)
end
def update_and_parse_checksums!
return @info_checksums_by_name if @parsed_checksums
update(@cache.versions_path, "versions")
@info_checksums_by_name = @cache.checksums
@parsed_checksums = true
end
private
def update(local_path, remote_path)
return unless @endpoints.add?(remote_path)
@updater.update(local_path, url(remote_path))
end
def update_info(name)
path = @cache.info_path(name)
checksum = @updater.checksum_for_file(path)
return unless existing = @info_checksums_by_name[name]
return if checksum == existing
update(path, "info/#{name}")
end
def url(path)
path
end
end
|