| |
@@ -0,0 +1,54 @@
|
| |
+ From 891246c3865ed0af7e277ca50c079f466d035f7c Mon Sep 17 00:00:00 2001
|
| |
+ From: Jarek Prokop <jprokop@redhat.com>
|
| |
+ Date: Thu, 1 Jun 2023 13:22:24 +0200
|
| |
+ Subject: [PATCH] Backport "Fix another issue of Bundler not falling back to an
|
| |
+ installable candidate"
|
| |
+
|
| |
+ In this case, when materializing a legacy lockfile using only "ruby"
|
| |
+ platform, and in frozen mode.
|
| |
+
|
| |
+ =====
|
| |
+
|
| |
+ Commit adapted from: https://github.com/rubygems/rubygems/pull/6261
|
| |
+ ---
|
| |
+ bundler/lib/bundler/lazy_specification.rb | 11 +++--
|
| |
+ .../install/gemfile/specific_platform_spec.rb | 41 ++++++++++++-------
|
| |
+ 2 files changed, 35 insertions(+), 17 deletions(-)
|
| |
+
|
| |
+ diff --git a/bundler/lib/bundler/lazy_specification.rb b/bundler/lib/bundler/lazy_specification.rb
|
| |
+ index e8bee25ab..a65020e6c 100644
|
| |
+ --- a/bundler/lib/bundler/lazy_specification.rb
|
| |
+ +++ b/bundler/lib/bundler/lazy_specification.rb
|
| |
+ @@ -85,7 +85,7 @@ def materialize_for_installation
|
| |
+
|
| |
+ installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
| |
+
|
| |
+ - specification = __materialize__(installable_candidates)
|
| |
+ + specification = __materialize__(installable_candidates, :fallback_to_non_installable => false)
|
| |
+ return specification unless specification.nil?
|
| |
+
|
| |
+ if target_platform != platform
|
| |
+ @@ -98,13 +98,18 @@ def materialize_for_installation
|
| |
+ __materialize__(candidates)
|
| |
+ end
|
| |
+
|
| |
+ - def __materialize__(candidates)
|
| |
+ + # If in frozen mode, we fallback to a non-installable candidate because by
|
| |
+ + # doing this we avoid re-resolving and potentially end up changing the
|
| |
+ + # lock file, which is not allowed. In that case, we will give a proper error
|
| |
+ + # about the mismatch higher up the stack, right before trying to install the
|
| |
+ + # bad gem.
|
| |
+ + def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
| |
+ search = candidates.reverse.find do |spec|
|
| |
+ spec.is_a?(StubSpecification) ||
|
| |
+ (spec.matches_current_ruby? &&
|
| |
+ spec.matches_current_rubygems?)
|
| |
+ end
|
| |
+ - if search.nil? && Bundler.frozen_bundle?
|
| |
+ + if search.nil? && fallback_to_non_installable
|
| |
+ search = candidates.last
|
| |
+ else
|
| |
+ search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
| |
+ --
|
| |
+ 2.41.0.rc1
|
| |
+
|
| |
I wonder that this part of the patch is properly created. I see a difference from the upstream patch. In your patch, in the here document "G", there is no 2 spaces indent.
https://github.com/rubygems/rubygems/commit/93af31aaaed75e9aa9cb182d2f0c2100918ed7ac
https://github.com/rubygems/rubygems/commit/93af31aaaed75e9aa9cb182d2f0c2100918ed7ac.patch