summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/bundler/source/path.rb11
-rw-r--r--spec/install/gemfile/path_spec.rb56
2 files changed, 58 insertions, 9 deletions
diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb
index c1d25fc4da..f98f5155fb 100644
--- a/lib/bundler/source/path.rb
+++ b/lib/bundler/source/path.rb
@@ -20,11 +20,16 @@ module Bundler
@allow_cached = false
@allow_remote = false
- @root_path = options["root_path"] || Bundler.root
+ @root_path = options["root_path"] || root
if options["path"]
@path = Pathname.new(options["path"])
- @path = expand(@path) unless @path.relative?
+ expanded_path = expand(@path)
+ @path = if @path.relative?
+ expanded_path.relative_path_from(root_path.expand_path)
+ else
+ expanded_path
+ end
end
@name = options["name"]
@@ -136,7 +141,7 @@ module Bundler
def lockfile_path
return relative_path(original_path) if original_path.absolute?
- expand(original_path).relative_path_from(Bundler.root)
+ expand(original_path).relative_path_from(root)
end
def app_cache_path(custom_path = nil)
diff --git a/spec/install/gemfile/path_spec.rb b/spec/install/gemfile/path_spec.rb
index cfd85ac73f..3f2e5bdfc3 100644
--- a/spec/install/gemfile/path_spec.rb
+++ b/spec/install/gemfile/path_spec.rb
@@ -83,6 +83,50 @@ RSpec.describe "bundle install with explicit source paths" do
end
end
+ it "sorts paths consistently on install and update when they start with ./" do
+ build_lib "demo", :path => lib_path("demo")
+ build_lib "aaa", :path => lib_path("demo/aaa")
+
+ gemfile = <<-G
+ gemspec
+ gem "aaa", :path => "./aaa"
+ G
+
+ File.open(lib_path("demo/Gemfile"), "w") {|f| f.puts gemfile }
+
+ lockfile = <<~L
+ PATH
+ remote: .
+ specs:
+ demo (1.0)
+
+ PATH
+ remote: aaa
+ specs:
+ aaa (1.0)
+
+ GEM
+ specs:
+
+ PLATFORMS
+ #{lockfile_platforms}
+
+ DEPENDENCIES
+ aaa!
+ demo!
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ L
+
+ Dir.chdir(lib_path("demo")) do
+ bundle :install
+ expect(lib_path("demo/Gemfile.lock")).to have_lockfile(lockfile)
+ bundle :update, :all => true
+ expect(lib_path("demo/Gemfile.lock")).to have_lockfile(lockfile)
+ end
+ end
+
it "expands paths when comparing locked paths to Gemfile paths" do
build_lib "foo", :path => bundled_app("foo-1.0")
@@ -370,13 +414,13 @@ RSpec.describe "bundle install with explicit source paths" do
end
it "works when the path does not have a gemspec but there is a lockfile" do
- lockfile <<-L
- PATH
- remote: vendor/bar
- specs:
+ lockfile <<~L
+ PATH
+ remote: vendor/bar
+ specs:
- GEM
- remote: http://rubygems.org
+ GEM
+ remote: http://rubygems.org
L
in_app_root { FileUtils.mkdir_p("vendor/bar") }