From f8f9cecd7003227ea21422dfd6609cbafaf5e5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Fri, 13 May 2022 14:50:30 +0200 Subject: [PATCH] [rubygems/rubygems] Retry resolution with activated gems if inline has conflicts https://github.com/rubygems/rubygems/commit/8d94c14ca0 Co-authored-by: Jonathan Hefner --- lib/bundler/inline.rb | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/bundler/inline.rb b/lib/bundler/inline.rb index 49e8e32616..238e650d65 100644 --- a/lib/bundler/inline.rb +++ b/lib/bundler/inline.rb @@ -60,8 +60,24 @@ def gemfile(install = false, options = {}, &gemfile) end end - runtime = Bundler::Runtime.new(nil, definition) - runtime.setup.require + begin + runtime = Bundler::Runtime.new(nil, definition).setup + rescue Gem::LoadError => e + name = e.name + version = e.requirement.requirements.first[1] + activated_version = Gem.loaded_specs[name].version + + Bundler.ui.info \ + "The #{name} gem was resolved to #{version}, but #{activated_version} was activated by Bundler while installing it, causing a conflict. " \ + "Bundler will now retry resolving with #{activated_version} instead." + + builder.instance_eval { gem name, activated_version } + definition = builder.to_definition(nil, true) + + retry + end + + runtime.require end end