[前][次][番号順一覧][スレッド一覧]

ruby-changes:72029

From: David <ko1@a...>
Date: Tue, 31 May 2022 16:14:06 +0900 (JST)
Subject: [ruby-changes:72029] e2b421d679 (master): [rubygems/rubygems] Give better conflict resolution advice

https://git.ruby-lang.org/ruby.git/commit/?id=e2b421d679

From e2b421d679d7ebd2c7d6b44a96c8353b81e447b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@r...>
Date: Sun, 29 May 2022 16:47:22 +0200
Subject: [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.

https://github.com/rubygems/rubygems/commit/5d154dd50e
---
 lib/bundler/resolver.rb                |  2 +-
 spec/bundler/install/gems/flex_spec.rb | 67 ++++++++++++++++++++++++++++++++--
 2 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index 8ec6d5dbc0..d749694952 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -395,7 +395,7 @@ module Bundler https://github.com/ruby/ruby/blob/trunk/lib/bundler/resolver.rb#L395
             o << %(\n  Current #{name} version:\n    #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n)
           elsif conflict.locked_requirement
             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)
           elsif !conflict.existing
             o << "\n"
diff --git a/spec/bundler/install/gems/flex_spec.rb b/spec/bundler/install/gems/flex_spec.rb
index f9b374cf01..28ffaff3d5 100644
--- a/spec/bundler/install/gems/flex_spec.rb
+++ b/spec/bundler/install/gems/flex_spec.rb
@@ -156,7 +156,7 @@ RSpec.describe "bundle flex_install" do https://github.com/ruby/ruby/blob/trunk/spec/bundler/install/gems/flex_spec.rb#L156
     end
   end
 
-  describe "when Gemfile conflicts with lockfile" do
+  describe "when running bundle install and Gemfile conflicts with lockfile" do
     before(:each) do
       build_repo2
       install_gemfile <<-G
@@ -190,7 +190,7 @@ RSpec.describe "bundle flex_install" do https://github.com/ruby/ruby/blob/trunk/spec/bundler/install/gems/flex_spec.rb#L190
       expect(err).to match(/could not find gem 'rack-obama/i)
     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"
 
       nice_error = <<-E.strip.gsub(/^ {8}/, "")
@@ -205,7 +205,7 @@ RSpec.describe "bundle flex_install" do https://github.com/ruby/ruby/blob/trunk/spec/bundler/install/gems/flex_spec.rb#L205
             rack_middleware was resolved to 1.0, which depends on
               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.
       E
 
@@ -214,6 +214,67 @@ RSpec.describe "bundle flex_install" do https://github.com/ruby/ruby/blob/trunk/spec/bundler/install/gems/flex_spec.rb#L214
     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
     before :each do
       install_gemfile <<-G
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]