diff options
author | Homu <homu@barosl.com> | 2016-10-15 08:31:50 +0900 |
---|---|---|
committer | Homu <homu@barosl.com> | 2016-10-15 08:31:50 +0900 |
commit | 9b12e554a537489bce2bc57f3b24cd7695c0aa77 (patch) | |
tree | 6295eddf70c9f4f7f53e6a3fe6f662ab7cf57320 | |
parent | 37ec6051f6442a23b2c524cfdee02a13873a2a61 (diff) | |
parent | f0aaed7c123c23f1fec8e963c2f2ffa6d734b6cf (diff) | |
download | bundler-9b12e554a537489bce2bc57f3b24cd7695c0aa77.tar.gz |
Auto merge of #5090 - bundler:aa-missing-specs, r=indirect
[Index] Allow pre-release versions in search when the base is pre-release
Closes #5089
-rw-r--r-- | lib/bundler/index.rb | 3 | ||||
-rw-r--r-- | spec/install/gemfile/sources_spec.rb | 66 | ||||
-rw-r--r-- | spec/support/artifice/compact_index.rb | 8 | ||||
-rw-r--r-- | spec/support/artifice/endpoint.rb | 6 |
4 files changed, 78 insertions, 5 deletions
diff --git a/lib/bundler/index.rb b/lib/bundler/index.rb index 4529c57279..5bdb102d37 100644 --- a/lib/bundler/index.rb +++ b/lib/bundler/index.rb @@ -179,7 +179,8 @@ module Bundler end wants_prerelease = dependency.requirement.prerelease? - only_prerelease = specs.all? {|spec| spec.version.prerelease? } + wants_prerelease ||= base && base.any? {|base_spec| base_spec.version.prerelease? } + only_prerelease = specs.all? {|spec| spec.version.prerelease? } unless wants_prerelease || only_prerelease found.reject! {|spec| spec.version.prerelease? } diff --git a/spec/install/gemfile/sources_spec.rb b/spec/install/gemfile/sources_spec.rb index fd11c3feab..e687e9af41 100644 --- a/spec/install/gemfile/sources_spec.rb +++ b/spec/install/gemfile/sources_spec.rb @@ -449,4 +449,70 @@ describe "bundle install with gems on multiple sources" do end end end + + context "when a gem is installed to system gems" do + before do + install_gemfile! <<-G + source "file://#{gem_repo1}" + gem "rack" + G + end + + context "and the gemfile changes" do + it "is still able to find that gem from remote sources" do + source_uri = "file://#{gem_repo1}" + second_uri = "file://#{gem_repo4}" + + build_repo4 do + build_gem "rack", "2.0.1.1.forked" + build_gem "thor", "0.19.1.1.forked" + end + + # When this gemfile is installed... + gemfile <<-G + source "#{source_uri}" + + source "#{second_uri}" do + gem "rack", "2.0.1.1.forked" + gem "thor" + end + gem "rack-obama" + G + + # It creates this lockfile. + lockfile <<-L + GEM + remote: #{source_uri}/ + remote: #{second_uri}/ + specs: + rack (2.0.1.1.forked) + rack-obama (1.0) + rack + thor (0.19.1.1.forked) + + PLATFORMS + ruby + + DEPENDENCIES + rack (= 2.0.1.1.forked)! + rack-obama + thor! + L + + # Then we change the Gemfile by adding a version to thor + gemfile <<-G + source "#{source_uri}" + + source "#{second_uri}" do + gem "rack", "2.0.1.1.forked" + gem "thor", "0.19.1.1.forked" + end + gem "rack-obama" + G + + # But we should still be able to find rack 2.0.1.1.forked and install it + bundle! :install + end + end + end end diff --git a/spec/support/artifice/compact_index.rb b/spec/support/artifice/compact_index.rb index 0afd7fc526..9111ed8211 100644 --- a/spec/support/artifice/compact_index.rb +++ b/spec/support/artifice/compact_index.rb @@ -67,9 +67,11 @@ class CompactIndexAPI < Endpoint @gems ||= {} @gems[gem_repo] ||= begin specs = Bundler::Deprecate.skip_during do - Marshal.load(File.open(gem_repo.join("specs.4.8")).read).map do |name, version, platform| - load_spec(name, version, platform, gem_repo) - end + %w(specs.4.8 prerelease_specs.4.8).map do |filename| + Marshal.load(File.open(gem_repo.join(filename)).read).map do |name, version, platform| + load_spec(name, version, platform, gem_repo) + end + end.flatten end specs.group_by(&:name).map do |name, versions| diff --git a/spec/support/artifice/endpoint.rb b/spec/support/artifice/endpoint.rb index 2955889a86..99ffac1c11 100644 --- a/spec/support/artifice/endpoint.rb +++ b/spec/support/artifice/endpoint.rb @@ -24,7 +24,11 @@ class Endpoint < Sinatra::Base require "rubygems" require "bundler" Bundler::Deprecate.skip_during do - Marshal.load(File.open(gem_repo.join("specs.4.8")).read).map do |name, version, platform| + all_specs = %w(specs.4.8 prerelease_specs.4.8).map do |filename| + Marshal.load(File.open(gem_repo.join(filename)).read) + end.inject(:+) + + all_specs.map do |name, version, platform| spec = load_spec(name, version, platform, gem_repo) next unless gem_names.include?(spec.name) { |