summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThe Bundler Bot <bot@bundler.io>2017-06-06 23:58:17 +0000
committerThe Bundler Bot <bot@bundler.io>2017-06-06 23:58:17 +0000
commite32353b063292427beccdb48fd8d6d0c74555911 (patch)
tree16be450a5fc1959225c5112fa87fb2c820875c15
parent28ab085c47268aca02c5abb465aabff50b326b9c (diff)
parent81656610125de15a56834a91ff4f8608b1dc04cc (diff)
downloadbundler-e32353b063292427beccdb48fd8d6d0c74555911.tar.gz
Auto merge of #5707 - bundler:seg-sort-by-name-spec-set, r=indirect
[SpecSet] Sort by name in #tsort Closes #5696 This is required for backwards compatibility, see issue #5696 for an example. The issue is that previous versions of bundler would have the load path in one (correct) order, and master has them in another (correct) order. So some projects depend on the load path ordering when multiple gems have the same requirable file. - [x] Test case
-rw-r--r--lib/bundler/spec_set.rb3
-rw-r--r--spec/runtime/setup_spec.rb44
2 files changed, 37 insertions, 10 deletions
diff --git a/lib/bundler/spec_set.rb b/lib/bundler/spec_set.rb
index 5fd6bd606f..9642633578 100644
--- a/lib/bundler/spec_set.rb
+++ b/lib/bundler/spec_set.rb
@@ -160,7 +160,8 @@ module Bundler
end
def tsort_each_node
- @specs.each {|s| yield s }
+ # MUST sort by name for backwards compatibility
+ @specs.sort_by(&:name).each {|s| yield s }
end
def spec_for_dependency(dep, match_current_platform)
diff --git a/spec/runtime/setup_spec.rb b/spec/runtime/setup_spec.rb
index c94147dff7..8418f63c3b 100644
--- a/spec/runtime/setup_spec.rb
+++ b/spec/runtime/setup_spec.rb
@@ -108,6 +108,17 @@ RSpec.describe "Bundler.setup" do
end
context "load order" do
+ def clean_load_path(lp)
+ without_bundler_load_path = ruby!("puts $LOAD_PATH").split("\n")
+ lp = lp - [
+ bundler_path.to_s,
+ bundler_path.join("gems/bundler-#{Bundler::VERSION}/lib").to_s,
+ tmp("rubygems/lib").to_s,
+ root.join("../lib").expand_path.to_s,
+ ] - without_bundler_load_path
+ lp.map! {|p| p.sub(/^#{system_gem_path}/, "") }
+ end
+
it "puts loaded gems after -I and RUBYLIB" do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -139,8 +150,6 @@ RSpec.describe "Bundler.setup" do
gem "rails"
G
- without_bundler_load_path = ruby!("puts $LOAD_PATH").split("\n")
-
ruby! <<-RUBY
require 'rubygems'
require 'bundler'
@@ -148,13 +157,7 @@ RSpec.describe "Bundler.setup" do
puts $LOAD_PATH
RUBY
- load_path = out.split("\n") - [
- bundler_path.to_s,
- bundler_path.join("gems/bundler-#{Bundler::VERSION}/lib").to_s,
- tmp("rubygems/lib").to_s,
- root.join("../lib").expand_path.to_s,
- ] - without_bundler_load_path
- load_path.map! {|lp| lp.sub(/^#{system_gem_path}/, "") }
+ load_path = clean_load_path(out.split("\n"))
expect(load_path).to start_with(
"/gems/rails-2.3.2/lib",
@@ -166,6 +169,29 @@ RSpec.describe "Bundler.setup" do
"/gems/rake-10.0.2/lib"
)
end
+
+ it "falls back to order the load path alphabetically for backwards compatibility" do
+ install_gemfile! <<-G
+ source "file://#{gem_repo1}"
+ gem "weakling"
+ gem "duradura"
+ gem "terranova"
+ G
+
+ ruby! <<-RUBY
+ require 'rubygems'
+ require 'bundler/setup'
+ puts $LOAD_PATH
+ RUBY
+
+ load_path = clean_load_path(out.split("\n"))
+
+ expect(load_path).to start_with(
+ "/gems/weakling-0.0.3/lib",
+ "/gems/terranova-8/lib",
+ "/gems/duradura-7.0/lib"
+ )
+ end
end
it "raises if the Gemfile was not yet installed" do