1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

[rubygems/rubygems] Give better conflict resolution advice

This alternative really uses only the Gemfile, and can never end up
being absurd, because it will never be suggested when there's no
lockfile, and it suggests deleting the lockfile.

5d154dd50e
This commit is contained in:
David Rodríguez 2022-05-29 16:47:22 +02:00 committed by git
parent 9241d75a61
commit e2b421d679
2 changed files with 65 additions and 4 deletions

View file

@ -395,7 +395,7 @@ module Bundler
o << %(\n Current #{name} version:\n #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n) o << %(\n Current #{name} version:\n #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n)
elsif conflict.locked_requirement elsif conflict.locked_requirement
o << "\n" o << "\n"
o << %(Running `bundle update` will rebuild your snapshot from scratch, using only\n) o << %(Deleting your #{name_for_locking_dependency_source} file and running `bundle install` will rebuild your snapshot from scratch, using only\n)
o << %(the gems in your Gemfile, which may resolve the conflict.\n) o << %(the gems in your Gemfile, which may resolve the conflict.\n)
elsif !conflict.existing elsif !conflict.existing
o << "\n" o << "\n"

View file

@ -156,7 +156,7 @@ RSpec.describe "bundle flex_install" do
end end
end end
describe "when Gemfile conflicts with lockfile" do describe "when running bundle install and Gemfile conflicts with lockfile" do
before(:each) do before(:each) do
build_repo2 build_repo2
install_gemfile <<-G install_gemfile <<-G
@ -190,7 +190,7 @@ RSpec.describe "bundle flex_install" do
expect(err).to match(/could not find gem 'rack-obama/i) expect(err).to match(/could not find gem 'rack-obama/i)
end end
it "suggests bundle update when the Gemfile requires different versions than the lock" do it "suggests deleting the Gemfile.lock file when the Gemfile requires different versions than the lock" do
bundle "config set force_ruby_platform true" bundle "config set force_ruby_platform true"
nice_error = <<-E.strip.gsub(/^ {8}/, "") nice_error = <<-E.strip.gsub(/^ {8}/, "")
@ -205,7 +205,7 @@ RSpec.describe "bundle flex_install" do
rack_middleware was resolved to 1.0, which depends on rack_middleware was resolved to 1.0, which depends on
rack (= 0.9.1) rack (= 0.9.1)
Running `bundle update` will rebuild your snapshot from scratch, using only Deleting your Gemfile.lock file and running `bundle install` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict. the gems in your Gemfile, which may resolve the conflict.
E E
@ -214,6 +214,67 @@ RSpec.describe "bundle flex_install" do
end end
end end
describe "when running bundle update and Gemfile conflicts with lockfile" do
before(:each) do
build_repo4 do
build_gem "jekyll-feed", "0.16.0"
build_gem "jekyll-feed", "0.15.1"
build_gem "github-pages", "226" do |s|
s.add_dependency "jekyll-feed", "0.15.1"
end
end
install_gemfile <<-G
source "#{file_uri_for(gem_repo4)}"
gem "jekyll-feed", "~> 0.12"
G
puts lockfile
lockfile <<-L
GEM
remote: #{file_uri_for(gem_repo4)}/
specs:
jekyll-feed (0.16.0)
PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
jekyll-feed
BUNDLED WITH
#{Bundler::VERSION}
L
gemfile <<-G
source "#{file_uri_for(gem_repo4)}"
gem "github-pages", "~> 226"
gem "jekyll-feed", "~> 0.12"
G
end
it "suggests deleting the Gemfile.lock file when the Gemfile requires different versions than the lock" do
nice_error = <<-E.strip.gsub(/^ {8}/, "")
Bundler could not find compatible versions for gem "jekyll-feed":
In snapshot (Gemfile.lock):
jekyll-feed (>= 0.16.0)
In Gemfile:
jekyll-feed (~> 0.12)
github-pages (~> 226) was resolved to 226, which depends on
jekyll-feed (= 0.15.1)
Deleting your Gemfile.lock file and running `bundle install` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
E
bundle :update, :raise_on_error => false
expect(err).to end_with(nice_error)
end
end
describe "subtler cases" do describe "subtler cases" do
before :each do before :each do
install_gemfile <<-G install_gemfile <<-G