diff options
-rw-r--r-- | lib/bundler/source/path.rb | 11 | ||||
-rw-r--r-- | spec/install/gemfile/path_spec.rb | 56 |
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") } |