diff options
author | Bundlerbot <bot@bundler.io> | 2019-08-05 22:31:37 +0000 |
---|---|---|
committer | Bundlerbot <bot@bundler.io> | 2019-08-05 22:31:37 +0000 |
commit | 826bf309f63cb696f1eca47360bb4f24170d837b (patch) | |
tree | 5124cb7ed44af76d141e17cceb22826ee2d6ccbd /spec/install/gemfile | |
parent | 5023c56ae31140ec3c7aa381a40b46bf9f49ab02 (diff) | |
parent | c7532ced89bbc8ddc7296c56391c1c3cc981c54a (diff) | |
download | bundler-826bf309f63cb696f1eca47360bb4f24170d837b.tar.gz |
Merge #7264
7264: Consistent lockfiles r=deivid-rodriguez a=deivid-rodriguez
### What was the end-user problem that led to this PR?
The problem was that when a Gemfile would specify path sources with paths starting with "./", the generated lockfile would be inconsistent on `bundle install` and `bundle update`.
### What was your diagnosis of the problem?
My diagnosis was that when running `bundle update`, the bundle would be unlocked, and bundler would order the path sources according to the path present in the Gemfile ("./aaa" for example). On the other hand, when running `bundle install`, bundler would read the relative paths from the lockfile, where they are normalized ("aaa" for example).
### What is your fix for the problem, implemented in this PR?
My fix is to normalize relative paths when creating the source list, so that "aaa" is always used over "./aaa".
### Why did you choose this fix out of the possible options?
I chose this fix because it fixes the problem and it's backwards compatible (as in, it doesn't break any specs that assert for specific lockfiles).
Fixes #7262.
Co-authored-by: David RodrÃguez <deivid.rodriguez@riseup.net>
Diffstat (limited to 'spec/install/gemfile')
-rw-r--r-- | spec/install/gemfile/path_spec.rb | 56 |
1 files changed, 50 insertions, 6 deletions
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") } |