[rubygems/rubygems] Copy prerelease attribute to dependency resolver sets
https://github.com/rubygems/rubygems/commit/5956e7f8e5
This commit is contained in:
parent
27b0638386
commit
3ac239f790
@ -21,7 +21,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|||||||
|
|
||||||
def pick_sets # :nodoc:
|
def pick_sets # :nodoc:
|
||||||
@sources.each_source do |source|
|
@sources.each_source do |source|
|
||||||
@sets << source.dependency_resolver_set
|
@sets << source.dependency_resolver_set(@prerelease)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -42,6 +42,6 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
|
|||||||
|
|
||||||
def get_set(name)
|
def get_set(name)
|
||||||
link = @links[name]
|
link = @links[name]
|
||||||
@sets[link] ||= Gem::Source.new(link).dependency_resolver_set if link
|
@sets[link] ||= Gem::Source.new(link).dependency_resolver_set(@prerelease) if link
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -67,28 +67,11 @@ class Gem::Source
|
|||||||
|
|
||||||
##
|
##
|
||||||
# Returns a Set that can fetch specifications from this source.
|
# Returns a Set that can fetch specifications from this source.
|
||||||
|
#
|
||||||
def dependency_resolver_set # :nodoc:
|
# The set will optionally fetch prereleases if requested.
|
||||||
return Gem::Resolver::IndexSet.new self if uri.scheme == "file"
|
#
|
||||||
|
def dependency_resolver_set(prerelease = false)
|
||||||
fetch_uri = if uri.host == "rubygems.org"
|
new_dependency_resolver_set.tap {|set| set.prerelease = prerelease }
|
||||||
index_uri = uri.dup
|
|
||||||
index_uri.host = "index.rubygems.org"
|
|
||||||
index_uri
|
|
||||||
else
|
|
||||||
uri
|
|
||||||
end
|
|
||||||
|
|
||||||
bundler_api_uri = enforce_trailing_slash(fetch_uri) + "versions"
|
|
||||||
|
|
||||||
begin
|
|
||||||
fetcher = Gem::RemoteFetcher.fetcher
|
|
||||||
response = fetcher.fetch_path bundler_api_uri, nil, true
|
|
||||||
rescue Gem::RemoteFetcher::FetchError
|
|
||||||
Gem::Resolver::IndexSet.new self
|
|
||||||
else
|
|
||||||
Gem::Resolver::APISet.new response.uri + "./info/"
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def hash # :nodoc:
|
def hash # :nodoc:
|
||||||
@ -234,6 +217,29 @@ class Gem::Source
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def new_dependency_resolver_set
|
||||||
|
return Gem::Resolver::IndexSet.new self if uri.scheme == "file"
|
||||||
|
|
||||||
|
fetch_uri = if uri.host == "rubygems.org"
|
||||||
|
index_uri = uri.dup
|
||||||
|
index_uri.host = "index.rubygems.org"
|
||||||
|
index_uri
|
||||||
|
else
|
||||||
|
uri
|
||||||
|
end
|
||||||
|
|
||||||
|
bundler_api_uri = enforce_trailing_slash(fetch_uri) + "versions"
|
||||||
|
|
||||||
|
begin
|
||||||
|
fetcher = Gem::RemoteFetcher.fetcher
|
||||||
|
response = fetcher.fetch_path bundler_api_uri, nil, true
|
||||||
|
rescue Gem::RemoteFetcher::FetchError
|
||||||
|
Gem::Resolver::IndexSet.new self
|
||||||
|
else
|
||||||
|
Gem::Resolver::APISet.new response.uri + "./info/"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def enforce_trailing_slash(uri)
|
def enforce_trailing_slash(uri)
|
||||||
uri.merge(uri.path.gsub(%r{/+$}, "") + "/")
|
uri.merge(uri.path.gsub(%r{/+$}, "") + "/")
|
||||||
end
|
end
|
||||||
|
@ -1214,6 +1214,30 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|||||||
assert_match "Installing a (2)", @ui.output
|
assert_match "Installing a (2)", @ui.output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execute_installs_from_a_gemdeps_with_prerelease
|
||||||
|
spec_fetcher do |fetcher|
|
||||||
|
fetcher.download "a", 1
|
||||||
|
fetcher.download "a", "2.a"
|
||||||
|
end
|
||||||
|
|
||||||
|
File.open @gemdeps, "w" do |f|
|
||||||
|
f << "gem 'a'"
|
||||||
|
end
|
||||||
|
|
||||||
|
@cmd.handle_options %w[--prerelease]
|
||||||
|
@cmd.options[:gemdeps] = @gemdeps
|
||||||
|
|
||||||
|
use_ui @ui do
|
||||||
|
assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
|
||||||
|
@cmd.execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_equal %w[a-2.a], @cmd.installed_specs.map(&:full_name)
|
||||||
|
|
||||||
|
assert_match "Installing a (2.a)", @ui.output
|
||||||
|
end
|
||||||
|
|
||||||
def test_execute_installs_deps_a_gemdeps
|
def test_execute_installs_deps_a_gemdeps
|
||||||
spec_fetcher do |fetcher|
|
spec_fetcher do |fetcher|
|
||||||
fetcher.download "q", "1.0"
|
fetcher.download "q", "1.0"
|
||||||
|
@ -31,6 +31,20 @@ class TestGemResolverBestSet < Gem::TestCase
|
|||||||
assert_equal %w[a-1], found.map(&:full_name)
|
assert_equal %w[a-1], found.map(&:full_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_pick_sets_prerelease
|
||||||
|
set = Gem::Resolver::BestSet.new
|
||||||
|
set.prerelease = true
|
||||||
|
|
||||||
|
set.pick_sets
|
||||||
|
|
||||||
|
sets = set.sets
|
||||||
|
|
||||||
|
assert_equal 1, sets.count
|
||||||
|
|
||||||
|
source_set = sets.first
|
||||||
|
assert_equal true, source_set.prerelease
|
||||||
|
end
|
||||||
|
|
||||||
def test_find_all_local
|
def test_find_all_local
|
||||||
spec_fetcher do |fetcher|
|
spec_fetcher do |fetcher|
|
||||||
fetcher.spec "a", 1
|
fetcher.spec "a", 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user