class Bundler::CompactIndexClient
Constants
- DEBUG_MUTEX
- GemParser
Attributes
directory[R]
Public Class Methods
debug()
click to toggle source
# File bundler/compact_index_client.rb, line 9 def self.debug return unless ENV["DEBUG_COMPACT_INDEX"] DEBUG_MUTEX.synchronize { warn("[#{self}] #{yield}") } end
new(directory, fetcher)
click to toggle source
# File bundler/compact_index_client.rb, line 21 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 @mutex = Thread::Mutex.new end
Public Instance Methods
dependencies(names)
click to toggle source
# File bundler/compact_index_client.rb, line 68 def dependencies(names) Bundler::CompactIndexClient.debug { "dependencies(#{names})" } execution_mode.call(names) do |name| update_info(name) @cache.dependencies(name).map {|d| d.unshift(name) } end.flatten(1) end
execution_mode()
click to toggle source
@return [Lambda] A lambda that takes an array of inputs and a block, and
maps the inputs with the block in parallel.
# File bundler/compact_index_client.rb, line 41 def execution_mode @execution_mode || sequentially end
execution_mode=(block)
click to toggle source
# File bundler/compact_index_client.rb, line 31 def execution_mode=(block) Bundler::CompactIndexClient.debug { "execution_mode=" } @endpoints = Set.new @execution_mode = block end
names()
click to toggle source
# File bundler/compact_index_client.rb, line 55 def names Bundler::CompactIndexClient.debug { "/names" } update(@cache.names_path, "names") @cache.names end
sequential_execution_mode!()
click to toggle source
# File bundler/compact_index_client.rb, line 45 def sequential_execution_mode! self.execution_mode = sequentially end
sequentially()
click to toggle source
# File bundler/compact_index_client.rb, line 49 def sequentially @sequentially ||= lambda do |inputs, &blk| inputs.map(&blk) end end
update_and_parse_checksums!()
click to toggle source
# File bundler/compact_index_client.rb, line 76 def update_and_parse_checksums! Bundler::CompactIndexClient.debug { "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
versions()
click to toggle source
# File bundler/compact_index_client.rb, line 61 def versions Bundler::CompactIndexClient.debug { "/versions" } update(@cache.versions_path, "versions") versions, @info_checksums_by_name = @cache.versions versions end
Private Instance Methods
synchronize() { || ... }
click to toggle source
# File bundler/compact_index_client.rb, line 115 def synchronize @mutex.synchronize { yield } end
update(local_path, remote_path)
click to toggle source
# File bundler/compact_index_client.rb, line 86 def update(local_path, remote_path) Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" } unless synchronize { @endpoints.add?(remote_path) } Bundler::CompactIndexClient.debug { "already fetched #{remote_path}" } return end @updater.update(local_path, url(remote_path)) end
update_info(name)
click to toggle source
# File bundler/compact_index_client.rb, line 95 def update_info(name) Bundler::CompactIndexClient.debug { "update_info(#{name})" } path = @cache.info_path(name) checksum = @updater.checksum_for_file(path) unless existing = @info_checksums_by_name[name] Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since it is missing from versions" } return end if checksum == existing Bundler::CompactIndexClient.debug { "skipping updating info for #{name} since the versions checksum matches the local checksum" } return end Bundler::CompactIndexClient.debug { "updating info for #{name} since the versions checksum #{existing} != the local checksum #{checksum}" } update(path, "info/#{name}") end
url(path)
click to toggle source
# File bundler/compact_index_client.rb, line 111 def url(path) path end