mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
82 lines
1.7 KiB
Ruby
82 lines
1.7 KiB
Ruby
![]() |
##
|
||
|
# A GitSet represents gems that are sourced from git repositories.
|
||
|
#
|
||
|
# This is used for gem dependency file support.
|
||
|
#
|
||
|
# Example:
|
||
|
#
|
||
|
# set = Gem::Resolver::GitSet.new
|
||
|
# set.add_git_gem 'rake', 'git://example/rake.git', tag: 'rake-10.1.0'
|
||
|
|
||
|
class Gem::Resolver::GitSet < Gem::Resolver::Set
|
||
|
|
||
|
##
|
||
|
# Contains repositories needing submodules
|
||
|
|
||
|
attr_reader :need_submodules # :nodoc:
|
||
|
|
||
|
##
|
||
|
# A Hash containing git gem names for keys and a Hash of repository and
|
||
|
# git commit reference as values.
|
||
|
|
||
|
attr_reader :repositories # :nodoc:
|
||
|
|
||
|
##
|
||
|
# A hash of gem names to Gem::Resolver::GitSpecifications
|
||
|
|
||
|
attr_reader :specs # :nodoc:
|
||
|
|
||
|
def initialize # :nodoc:
|
||
|
@git = ENV['git'] || 'git'
|
||
|
@need_submodules = {}
|
||
|
@repositories = {}
|
||
|
@specs = {}
|
||
|
end
|
||
|
|
||
|
def add_git_gem name, repository, reference, submodules # :nodoc:
|
||
|
@repositories[name] = [repository, reference]
|
||
|
@need_submodules[repository] = submodules
|
||
|
end
|
||
|
|
||
|
##
|
||
|
# Finds all git gems matching +req+
|
||
|
|
||
|
def find_all req
|
||
|
@repositories.keys.select do |name|
|
||
|
name == req.name
|
||
|
end.map do |name|
|
||
|
@specs[name] || load_spec(name)
|
||
|
end.select do |spec|
|
||
|
req.matches_spec? spec
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def load_spec name
|
||
|
repository, reference = @repositories[name]
|
||
|
|
||
|
source = Gem::Source::Git.new name, repository, reference
|
||
|
|
||
|
spec = source.load_spec name
|
||
|
|
||
|
git_spec =
|
||
|
Gem::Resolver::GitSpecification.new self, spec, source
|
||
|
|
||
|
@specs[name] = git_spec
|
||
|
end
|
||
|
|
||
|
##
|
||
|
# Prefetches specifications from the git repositories in this set.
|
||
|
|
||
|
def prefetch reqs
|
||
|
names = reqs.map { |req| req.name }
|
||
|
|
||
|
@repositories.each_key do |name|
|
||
|
next unless names.include? name
|
||
|
|
||
|
load_spec name
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|