From 824b6ef9b727383bca533d23d99a983432833c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 21 Mar 2019 15:12:35 +0100 Subject: [PATCH] Remove version overriding stuff unless necessary By doing this we avoid circular requires (`rubygems` requires `bundler` via `USE_GEMDEPS`, `bundler` requires `rubygems` when loading its own version), and also redefinition warnings when the `bundler.gemspec` is evaluated with `rubygems` already loaded (for example, when running `ruby setup.rb` from `rubygems` repo). When working with rubygems versions that didn't have the bundler version finder, it seems to be necessary, but for newer rubygems versions it's not. --- lib/bundler/rubygems_integration.rb | 4 ++++ lib/bundler/version.rb | 34 +++++++++++++++++------------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb index 9df0897ca28..3d062c329ea 100644 --- a/lib/bundler/rubygems_integration.rb +++ b/lib/bundler/rubygems_integration.rb @@ -317,6 +317,10 @@ def stubs_provide_full_functionality? provides?(">= 2.5.2") end + def has_bundler_version_finder? + provides?(">= 2.7.0") + end + def replace_gem(specs, specs_by_name) reverse_rubygems_kernel_mixin diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index cfd63009501..9a6e71f59c9 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -1,23 +1,29 @@ # frozen_string_literal: false +require_relative "rubygems_integration" + module Bundler - # We're doing this because we might write tests that deal - # with other versions of bundler and we are unsure how to - # handle this better. - VERSION = "2.1.0.pre.1".freeze unless defined?(::Bundler::VERSION) + if Bundler.rubygems.has_bundler_version_finder? + VERSION = "2.1.0.pre.1".freeze + else + # We're doing this because we might write tests that deal + # with other versions of bundler and we are unsure how to + # handle this better. + VERSION = "2.1.0.pre.1".freeze unless defined?(::Bundler::VERSION) - def self.overwrite_loaded_gem_version - begin - require "rubygems" - rescue LoadError - return + def self.overwrite_loaded_gem_version + begin + require "rubygems" + rescue LoadError + return + end + return unless bundler_spec = Gem.loaded_specs["bundler"] + return if bundler_spec.version == VERSION + bundler_spec.version = Bundler::VERSION end - return unless bundler_spec = Gem.loaded_specs["bundler"] - return if bundler_spec.version == VERSION - bundler_spec.version = Bundler::VERSION + private_class_method :overwrite_loaded_gem_version + overwrite_loaded_gem_version end - private_class_method :overwrite_loaded_gem_version - overwrite_loaded_gem_version def self.bundler_major_version @bundler_major_version ||= VERSION.split(".").first.to_i