summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHomu <homu@barosl.com>2016-10-15 08:31:50 +0900
committerSamuel Giddins <segiddins@segiddins.me>2016-10-15 01:11:40 -0500
commit8dc001006373b9cc12bd3c83af64d9b01aa87f70 (patch)
tree6f5f500ab445c5bae4261b44682bc39f8c7f0ed4
parenta7834e47e420b4fb1c41a5a8e7adec1a2fa03481 (diff)
downloadbundler-8dc001006373b9cc12bd3c83af64d9b01aa87f70.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.rb3
-rw-r--r--spec/install/gemfile/sources_spec.rb66
-rw-r--r--spec/support/artifice/compact_index.rb8
-rw-r--r--spec/support/artifice/endpoint.rb6
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 d6b1e0cecd..83e011f0b3 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)
{