mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Merge RubyGems-3.3.0 and Bundler-2.3.0
This commit is contained in:
		
							parent
							
								
									ad450c9fe5
								
							
						
					
					
						commit
						69dc2ea465
					
				
				
				Notes:
				
					git
				
				2021-12-21 15:27:36 +09:00 
				
			
			
			
		
		
					 26 changed files with 313 additions and 209 deletions
				
			
		| 
						 | 
					@ -66,6 +66,7 @@ module Bundler
 | 
				
			||||||
  autoload :RubyDsl,                File.expand_path("bundler/ruby_dsl", __dir__)
 | 
					  autoload :RubyDsl,                File.expand_path("bundler/ruby_dsl", __dir__)
 | 
				
			||||||
  autoload :RubyVersion,            File.expand_path("bundler/ruby_version", __dir__)
 | 
					  autoload :RubyVersion,            File.expand_path("bundler/ruby_version", __dir__)
 | 
				
			||||||
  autoload :Runtime,                File.expand_path("bundler/runtime", __dir__)
 | 
					  autoload :Runtime,                File.expand_path("bundler/runtime", __dir__)
 | 
				
			||||||
 | 
					  autoload :SelfManager,            File.expand_path("bundler/self_manager", __dir__)
 | 
				
			||||||
  autoload :Settings,               File.expand_path("bundler/settings", __dir__)
 | 
					  autoload :Settings,               File.expand_path("bundler/settings", __dir__)
 | 
				
			||||||
  autoload :SharedHelpers,          File.expand_path("bundler/shared_helpers", __dir__)
 | 
					  autoload :SharedHelpers,          File.expand_path("bundler/shared_helpers", __dir__)
 | 
				
			||||||
  autoload :Source,                 File.expand_path("bundler/source", __dir__)
 | 
					  autoload :Source,                 File.expand_path("bundler/source", __dir__)
 | 
				
			||||||
| 
						 | 
					@ -643,6 +644,13 @@ EOF
 | 
				
			||||||
      Bundler.rubygems.clear_paths
 | 
					      Bundler.rubygems.clear_paths
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def self_manager
 | 
				
			||||||
 | 
					      @self_manager ||= begin
 | 
				
			||||||
 | 
					                          require_relative "bundler/self_manager"
 | 
				
			||||||
 | 
					                          Bundler::SelfManager.new
 | 
				
			||||||
 | 
					                        end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def eval_yaml_gemspec(path, contents)
 | 
					    def eval_yaml_gemspec(path, contents)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,6 +61,8 @@ module Bundler
 | 
				
			||||||
        Bundler.reset_settings_and_root!
 | 
					        Bundler.reset_settings_and_root!
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Bundler.self_manager.restart_with_locked_bundler_if_needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Bundler.settings.set_command_option_if_given :retry, options[:retry]
 | 
					      Bundler.settings.set_command_option_if_given :retry, options[:retry]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      current_cmd = args.last[:current_command].name
 | 
					      current_cmd = args.last[:current_command].name
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,8 @@ module Bundler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      warn_if_root
 | 
					      warn_if_root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
 | 
					      Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Disable color in deployment mode
 | 
					      # Disable color in deployment mode
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -294,7 +294,7 @@ module Bundler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if updating_major = locked_major < current_major
 | 
					        if updating_major = locked_major < current_major
 | 
				
			||||||
          Bundler.ui.warn "Warning: the lockfile is being updated to Bundler #{current_major}, " \
 | 
					          Bundler.ui.warn "Warning: the lockfile is being updated to Bundler #{current_major}, " \
 | 
				
			||||||
                          "after which you will be unable to return to Bundler #{@locked_bundler_version.segments.first}."
 | 
					                          "after which you will be unable to return to Bundler #{locked_major}."
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,6 @@ module Bundler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # return the specs in the bundler format as an index
 | 
					    # return the specs in the bundler format as an index
 | 
				
			||||||
    def specs(gem_names, source)
 | 
					    def specs(gem_names, source)
 | 
				
			||||||
      old = Bundler.rubygems.sources
 | 
					 | 
				
			||||||
      index = Bundler::Index.new
 | 
					      index = Bundler::Index.new
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if Bundler::Fetcher.disable_endpoint
 | 
					      if Bundler::Fetcher.disable_endpoint
 | 
				
			||||||
| 
						 | 
					@ -153,8 +152,6 @@ module Bundler
 | 
				
			||||||
    rescue CertificateFailureError
 | 
					    rescue CertificateFailureError
 | 
				
			||||||
      Bundler.ui.info "" if gem_names && use_api # newline after dots
 | 
					      Bundler.ui.info "" if gem_names && use_api # newline after dots
 | 
				
			||||||
      raise
 | 
					      raise
 | 
				
			||||||
    ensure
 | 
					 | 
				
			||||||
      Bundler.rubygems.sources = old
 | 
					 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def use_api
 | 
					    def use_api
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -239,7 +239,7 @@ module Bundler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def ensure_specs_are_compatible!
 | 
					    def ensure_specs_are_compatible!
 | 
				
			||||||
      system_ruby = Bundler::RubyVersion.system
 | 
					      system_ruby = Bundler::RubyVersion.system
 | 
				
			||||||
      rubygems_version = Gem::Version.create(Gem::VERSION)
 | 
					      rubygems_version = Bundler.rubygems.version
 | 
				
			||||||
      @definition.specs.each do |spec|
 | 
					      @definition.specs.each do |spec|
 | 
				
			||||||
        if required_ruby_version = spec.required_ruby_version
 | 
					        if required_ruby_version = spec.required_ruby_version
 | 
				
			||||||
          unless required_ruby_version.satisfied_by?(system_ruby.gem_version)
 | 
					          unless required_ruby_version.satisfied_by?(system_ruby.gem_version)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,6 +46,16 @@ module Bundler
 | 
				
			||||||
      attributes
 | 
					      attributes
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def self.bundled_with
 | 
				
			||||||
 | 
					      lockfile = Bundler.default_lockfile
 | 
				
			||||||
 | 
					      return unless lockfile.file?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      lockfile_contents = Bundler.read_file(lockfile)
 | 
				
			||||||
 | 
					      return unless lockfile_contents.include?(BUNDLED)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      lockfile_contents.split(BUNDLED).last.strip
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def initialize(lockfile)
 | 
					    def initialize(lockfile)
 | 
				
			||||||
      @platforms    = []
 | 
					      @platforms    = []
 | 
				
			||||||
      @sources      = []
 | 
					      @sources      = []
 | 
				
			||||||
| 
						 | 
					@ -77,25 +87,12 @@ module Bundler
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
      @specs = @specs.values.sort_by(&:identifier)
 | 
					      @specs = @specs.values.sort_by(&:identifier)
 | 
				
			||||||
      warn_for_outdated_bundler_version
 | 
					 | 
				
			||||||
    rescue ArgumentError => e
 | 
					    rescue ArgumentError => e
 | 
				
			||||||
      Bundler.ui.debug(e)
 | 
					      Bundler.ui.debug(e)
 | 
				
			||||||
      raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
 | 
					      raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
 | 
				
			||||||
        "and then `bundle install` to generate a new lockfile."
 | 
					        "and then `bundle install` to generate a new lockfile."
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def warn_for_outdated_bundler_version
 | 
					 | 
				
			||||||
      return unless bundler_version
 | 
					 | 
				
			||||||
      return if bundler_version.segments.last == "dev"
 | 
					 | 
				
			||||||
      prerelease_text = bundler_version.prerelease? ? " --pre" : ""
 | 
					 | 
				
			||||||
      current_version = Gem::Version.create(Bundler::VERSION)
 | 
					 | 
				
			||||||
      return unless current_version < bundler_version
 | 
					 | 
				
			||||||
      Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
 | 
					 | 
				
			||||||
           "than the version that created the lockfile (#{bundler_version}). We suggest you to " \
 | 
					 | 
				
			||||||
           "upgrade to the version that created the lockfile by running `gem install " \
 | 
					 | 
				
			||||||
           "bundler:#{bundler_version}#{prerelease_text}`.\n"
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TYPES = {
 | 
					    TYPES = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,7 +21,7 @@ module Bundler
 | 
				
			||||||
        elsif options[:local_git]
 | 
					        elsif options[:local_git]
 | 
				
			||||||
          install_local_git(names, version, options)
 | 
					          install_local_git(names, version, options)
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
          sources = options[:source] || Bundler.rubygems.sources
 | 
					          sources = options[:source] || Gem.sources
 | 
				
			||||||
          install_rubygems(names, version, sources)
 | 
					          install_rubygems(names, version, sources)
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,25 +12,21 @@ module Bundler
 | 
				
			||||||
      EXT_LOCK = Monitor.new
 | 
					      EXT_LOCK = Monitor.new
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def self.version
 | 
					 | 
				
			||||||
      @version ||= Gem::Version.new(Gem::VERSION)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def self.provides?(req_str)
 | 
					 | 
				
			||||||
      Gem::Requirement.new(req_str).satisfied_by?(version)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def initialize
 | 
					    def initialize
 | 
				
			||||||
      @replaced_methods = {}
 | 
					      @replaced_methods = {}
 | 
				
			||||||
      backport_ext_builder_monitor
 | 
					      backport_ext_builder_monitor
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def version
 | 
					    def version
 | 
				
			||||||
      self.class.version
 | 
					      @version ||= Gem.rubygems_version
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def provides?(req_str)
 | 
					    def provides?(req_str)
 | 
				
			||||||
      self.class.provides?(req_str)
 | 
					      Gem::Requirement.new(req_str).satisfied_by?(version)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def supports_bundler_trampolining?
 | 
				
			||||||
 | 
					      provides?(">= 3.3.0.a")
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def build_args
 | 
					    def build_args
 | 
				
			||||||
| 
						 | 
					@ -142,19 +138,6 @@ module Bundler
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def sources=(val)
 | 
					 | 
				
			||||||
      # Gem.configuration creates a new Gem::ConfigFile, which by default will read ~/.gemrc
 | 
					 | 
				
			||||||
      # If that file exists, its settings (including sources) will overwrite the values we
 | 
					 | 
				
			||||||
      # are about to set here. In order to avoid that, we force memoizing the config file now.
 | 
					 | 
				
			||||||
      configuration
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      Gem.sources = val
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def sources
 | 
					 | 
				
			||||||
      Gem.sources
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def gem_dir
 | 
					    def gem_dir
 | 
				
			||||||
      Gem.dir
 | 
					      Gem.dir
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					@ -588,6 +571,10 @@ module Bundler
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def find_bundler(version)
 | 
				
			||||||
 | 
					      find_name("bundler").find {|s| s.version.to_s == version }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def find_name(name)
 | 
					    def find_name(name)
 | 
				
			||||||
      Gem::Specification.stubs_for(name).map(&:to_spec)
 | 
					      Gem::Specification.stubs_for(name).map(&:to_spec)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										73
									
								
								lib/bundler/self_manager.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								lib/bundler/self_manager.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,73 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module Bundler
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # This class handles installing and switching to the version of bundler needed
 | 
				
			||||||
 | 
					  # by an application.
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  class SelfManager
 | 
				
			||||||
 | 
					    def restart_with_locked_bundler_if_needed
 | 
				
			||||||
 | 
					      return unless needs_switching? && installed?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      restart_with_locked_bundler
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def install_locked_bundler_and_restart_with_it_if_needed
 | 
				
			||||||
 | 
					      return unless needs_switching?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Bundler.ui.info \
 | 
				
			||||||
 | 
					        "Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
 | 
				
			||||||
 | 
					        "Installing Bundler #{lockfile_version} and restarting using that version."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      install_and_restart_with_locked_bundler
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def install_and_restart_with_locked_bundler
 | 
				
			||||||
 | 
					      bundler_dep = Gem::Dependency.new("bundler", lockfile_version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Gem.install(bundler_dep)
 | 
				
			||||||
 | 
					    rescue StandardError => e
 | 
				
			||||||
 | 
					      Bundler.ui.trace e
 | 
				
			||||||
 | 
					      Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      restart_with_locked_bundler
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def restart_with_locked_bundler
 | 
				
			||||||
 | 
					      configured_gem_home = ENV["GEM_HOME"]
 | 
				
			||||||
 | 
					      configured_gem_path = ENV["GEM_PATH"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Bundler.with_original_env do
 | 
				
			||||||
 | 
					        Kernel.exec(
 | 
				
			||||||
 | 
					          { "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => lockfile_version },
 | 
				
			||||||
 | 
					          $PROGRAM_NAME, *ARGV
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def needs_switching?
 | 
				
			||||||
 | 
					      ENV["BUNDLER_VERSION"].nil? &&
 | 
				
			||||||
 | 
					        Bundler.rubygems.supports_bundler_trampolining? &&
 | 
				
			||||||
 | 
					        SharedHelpers.in_bundle? &&
 | 
				
			||||||
 | 
					        lockfile_version &&
 | 
				
			||||||
 | 
					        !lockfile_version.end_with?(".dev") &&
 | 
				
			||||||
 | 
					        lockfile_version != current_version
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def installed?
 | 
				
			||||||
 | 
					      Bundler.configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      Bundler.rubygems.find_bundler(lockfile_version)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def current_version
 | 
				
			||||||
 | 
					      @current_version ||= Bundler::VERSION
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lockfile_version
 | 
				
			||||||
 | 
					      @lockfile_version ||= Bundler::LockfileParser.bundled_with
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,7 @@ module Bundler
 | 
				
			||||||
            s.loaded_from = File.expand_path("..", __FILE__)
 | 
					            s.loaded_from = File.expand_path("..", __FILE__)
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          if local_spec = Bundler.rubygems.find_name("bundler").find {|s| s.version.to_s == VERSION }
 | 
					          if local_spec = Bundler.rubygems.find_bundler(VERSION)
 | 
				
			||||||
            idx << local_spec
 | 
					            idx << local_spec
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,7 +73,7 @@ m = Module.new do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    requirement = bundler_gem_version.approximate_recommendation
 | 
					    requirement = bundler_gem_version.approximate_recommendation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return requirement unless Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.7.0")
 | 
					    return requirement unless Gem.rubygems_version < Gem::Version.new("2.7.0")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    requirement += ".a" if bundler_gem_version.prerelease?
 | 
					    requirement += ".a" if bundler_gem_version.prerelease?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
# frozen_string_literal: false
 | 
					# frozen_string_literal: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module Bundler
 | 
					module Bundler
 | 
				
			||||||
  VERSION = "2.3.0.dev".freeze
 | 
					  VERSION = "2.3.0".freeze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def self.bundler_major_version
 | 
					  def self.bundler_major_version
 | 
				
			||||||
    @bundler_major_version ||= VERSION.split(".").first.to_i
 | 
					    @bundler_major_version ||= VERSION.split(".").first.to_i
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@
 | 
				
			||||||
require 'rbconfig'
 | 
					require 'rbconfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module Gem
 | 
					module Gem
 | 
				
			||||||
  VERSION = "3.3.0.dev".freeze
 | 
					  VERSION = "3.3.0".freeze
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Must be first since it unloads the prelude from 1.9.2
 | 
					# Must be first since it unloads the prelude from 1.9.2
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ RSpec.describe Bundler::Plugin::Installer do
 | 
				
			||||||
    it "uses Gem.sources when non of the source is provided" do
 | 
					    it "uses Gem.sources when non of the source is provided" do
 | 
				
			||||||
      sources = double(:sources)
 | 
					      sources = double(:sources)
 | 
				
			||||||
      Bundler.settings # initialize it before we have to touch rubygems.ext_lock
 | 
					      Bundler.settings # initialize it before we have to touch rubygems.ext_lock
 | 
				
			||||||
      allow(Bundler).to receive_message_chain("rubygems.sources") { sources }
 | 
					      allow(Gem).to receive(:sources) { sources }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      allow(installer).to receive(:install_rubygems).
 | 
					      allow(installer).to receive(:install_rubygems).
 | 
				
			||||||
        with("new-plugin", [">= 0"], sources).once
 | 
					        with("new-plugin", [">= 0"], sources).once
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -186,11 +186,25 @@ RSpec.describe "bundle binstubs <gem>" do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          before do
 | 
					          before do
 | 
				
			||||||
            lockfile lockfile.gsub(/BUNDLED WITH\n   .*$/m, "BUNDLED WITH\n   55.0")
 | 
					            lockfile lockfile.gsub(/BUNDLED WITH\n   .*$/m, "BUNDLED WITH\n   55.0")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            update_repo2 do
 | 
				
			||||||
 | 
					              with_built_bundler("55.0") {|gem_path| FileUtils.mv(gem_path, gem_repo2("gems")) }
 | 
				
			||||||
 | 
					            end
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          it "runs the available version of bundler when the version is older and the same major" do
 | 
					          it "installs and runs the exact version of bundler", :rubygems => ">= 3.3.0.dev" do
 | 
				
			||||||
            sys_exec "bin/bundle install"
 | 
					            sys_exec "bin/bundle install --verbose", :env => { "BUNDLER_SPEC_GEM_SOURCES" => file_uri_for(gem_repo2).to_s, "RUBYOPT" => "-r#{spec_dir}/support/hax.rb" }
 | 
				
			||||||
            expect(exitstatus).not_to eq(42)
 | 
					            expect(exitstatus).not_to eq(42)
 | 
				
			||||||
 | 
					            expect(out).to include("Bundler 55.1 is running, but your lockfile was generated with 55.0. Installing Bundler 55.0 and restarting using that version.")
 | 
				
			||||||
 | 
					            expect(out).to include("Using bundler 55.0")
 | 
				
			||||||
 | 
					            expect(err).not_to include("Activating bundler (~> 55.0) failed:")
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          it "runs the available version of bundler", :rubygems => "< 3.3.0.dev" do
 | 
				
			||||||
 | 
					            sys_exec "bin/bundle install --verbose"
 | 
				
			||||||
 | 
					            expect(exitstatus).not_to eq(42)
 | 
				
			||||||
 | 
					            expect(out).not_to include("Bundler 55.1 is running, but your lockfile was generated with 55.0. Installing Bundler 55.0 and restarting using that version.")
 | 
				
			||||||
 | 
					            expect(out).to include("Using bundler 55.1")
 | 
				
			||||||
            expect(err).not_to include("Activating bundler (~> 55.0) failed:")
 | 
					            expect(err).not_to include("Activating bundler (~> 55.0) failed:")
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -471,10 +471,10 @@ RSpec.describe "bundle check" do
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context "is newer" do
 | 
					    context "is newer" do
 | 
				
			||||||
      it "does not change the lock but warns" do
 | 
					      it "does not change the lock and does not warn" do
 | 
				
			||||||
        lockfile lock_with(Bundler::VERSION.succ)
 | 
					        lockfile lock_with(Bundler::VERSION.succ)
 | 
				
			||||||
        bundle :check
 | 
					        bundle :check
 | 
				
			||||||
        expect(err).to include("the running version of Bundler (#{Bundler::VERSION}) is older than the version that created the lockfile (#{Bundler::VERSION.succ})")
 | 
					        expect(err).to be_empty
 | 
				
			||||||
        expect(lockfile).to eq lock_with(Bundler::VERSION.succ)
 | 
					        expect(lockfile).to eq lock_with(Bundler::VERSION.succ)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,7 +39,7 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "updates the lockfile's bundler version if current ver. is newer" do
 | 
					  it "updates the lockfile's bundler version if current ver. is newer, and version was forced through BUNDLER_VERSION" do
 | 
				
			||||||
    system_gems "bundler-1.8.2"
 | 
					    system_gems "bundler-1.8.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    lockfile <<-L
 | 
					    lockfile <<-L
 | 
				
			||||||
| 
						 | 
					@ -64,12 +64,15 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
         1.8.2
 | 
					         1.8.2
 | 
				
			||||||
    L
 | 
					    L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    install_gemfile <<-G, :env => { "BUNDLER_VERSION" => Bundler::VERSION }
 | 
					    install_gemfile <<-G, :verbose => true, :env => { "BUNDLER_VERSION" => Bundler::VERSION }
 | 
				
			||||||
      source "#{file_uri_for(gem_repo2)}"
 | 
					      source "#{file_uri_for(gem_repo2)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      gem "rack"
 | 
					      gem "rack"
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(out).not_to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with 1.8.2.")
 | 
				
			||||||
 | 
					    expect(out).to include("Using bundler #{Bundler::VERSION}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(lockfile).to eq <<~G
 | 
					    expect(lockfile).to eq <<~G
 | 
				
			||||||
      GEM
 | 
					      GEM
 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
| 
						 | 
					@ -87,9 +90,13 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "does not update the lockfile's bundler version if nothing changed during bundle install" do
 | 
					  it "does not update the lockfile's bundler version if nothing changed during bundle install, but uses the locked version", :rubygems => ">= 3.3.0.a" do
 | 
				
			||||||
    version = "#{Bundler::VERSION.split(".").first}.0.0.a"
 | 
					    version = "#{Bundler::VERSION.split(".").first}.0.0.a"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update_repo2 do
 | 
				
			||||||
 | 
					      with_built_bundler(version) {|gem_path| FileUtils.mv(gem_path, gem_repo2("gems")) }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    lockfile <<-L
 | 
					    lockfile <<-L
 | 
				
			||||||
      GEM
 | 
					      GEM
 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
| 
						 | 
					@ -106,12 +113,15 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
         #{version}
 | 
					         #{version}
 | 
				
			||||||
    L
 | 
					    L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    install_gemfile <<-G
 | 
					    install_gemfile <<-G, :verbose => true, :env => { "BUNDLER_SPEC_GEM_SOURCES" => file_uri_for(gem_repo2).to_s }
 | 
				
			||||||
      source "#{file_uri_for(gem_repo2)}"
 | 
					      source "#{file_uri_for(gem_repo2)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      gem "rack"
 | 
					      gem "rack"
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(out).to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{version}.")
 | 
				
			||||||
 | 
					    expect(out).to include("Using bundler #{version}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(lockfile).to eq <<~G
 | 
					    expect(lockfile).to eq <<~G
 | 
				
			||||||
      GEM
 | 
					      GEM
 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
| 
						 | 
					@ -129,7 +139,56 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "updates the lockfile's bundler version if not present" do
 | 
					  it "does not update the lockfile's bundler version if nothing changed during bundle install, and uses the latest version", :rubygems => "< 3.3.0.a" do
 | 
				
			||||||
 | 
					    version = "#{Bundler::VERSION.split(".").first}.0.0.a"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    update_repo2 do
 | 
				
			||||||
 | 
					      with_built_bundler(version) {|gem_path| FileUtils.mv(gem_path, gem_repo2("gems")) }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    lockfile <<-L
 | 
				
			||||||
 | 
					      GEM
 | 
				
			||||||
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
 | 
					        specs:
 | 
				
			||||||
 | 
					          rack (1.0.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      PLATFORMS
 | 
				
			||||||
 | 
					        #{lockfile_platforms}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      DEPENDENCIES
 | 
				
			||||||
 | 
					        rack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      BUNDLED WITH
 | 
				
			||||||
 | 
					         #{version}
 | 
				
			||||||
 | 
					    L
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    install_gemfile <<-G, :verbose => true, :env => { "BUNDLER_SPEC_GEM_SOURCES" => file_uri_for(gem_repo2).to_s }
 | 
				
			||||||
 | 
					      source "#{file_uri_for(gem_repo2)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      gem "rack"
 | 
				
			||||||
 | 
					    G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(out).not_to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{version}.")
 | 
				
			||||||
 | 
					    expect(out).to include("Using bundler #{Bundler::VERSION}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(lockfile).to eq <<~G
 | 
				
			||||||
 | 
					      GEM
 | 
				
			||||||
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
 | 
					        specs:
 | 
				
			||||||
 | 
					          rack (1.0.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      PLATFORMS
 | 
				
			||||||
 | 
					        #{lockfile_platforms}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      DEPENDENCIES
 | 
				
			||||||
 | 
					        rack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      BUNDLED WITH
 | 
				
			||||||
 | 
					         #{version}
 | 
				
			||||||
 | 
					    G
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "adds the BUNDLED WITH section if not present" do
 | 
				
			||||||
    lockfile <<-L
 | 
					    lockfile <<-L
 | 
				
			||||||
      GEM
 | 
					      GEM
 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					        remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
| 
						 | 
					@ -166,152 +225,6 @@ RSpec.describe "the lockfile format" do
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "warns if the current version is older than lockfile's bundler version, and locked version is a final release" do
 | 
					 | 
				
			||||||
    current_version = "999.998.999"
 | 
					 | 
				
			||||||
    system_gems "bundler-#{current_version}"
 | 
					 | 
				
			||||||
    newer_minor = "999.999.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    lockfile <<-L
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    L
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    install_gemfile <<-G, :env => { "BUNDLER_VERSION" => current_version }
 | 
					 | 
				
			||||||
      source "#{file_uri_for(gem_repo2)}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      gem "rack"
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    warning_message = "the running version of Bundler (#{current_version}) is older " \
 | 
					 | 
				
			||||||
                      "than the version that created the lockfile (#{newer_minor}). " \
 | 
					 | 
				
			||||||
                      "We suggest you to upgrade to the version that created the " \
 | 
					 | 
				
			||||||
                      "lockfile by running `gem install bundler:#{newer_minor}`."
 | 
					 | 
				
			||||||
    expect(err).to include warning_message
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    expect(lockfile).to eq <<~G
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  it "warns if the current version is older than lockfile's bundler version, and locked version is a prerelease" do
 | 
					 | 
				
			||||||
    current_version = "999.998.999"
 | 
					 | 
				
			||||||
    system_gems "bundler-#{current_version}"
 | 
					 | 
				
			||||||
    newer_minor = "999.999.0.pre1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    lockfile <<-L
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    L
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    install_gemfile <<-G, :env => { "BUNDLER_VERSION" => current_version }
 | 
					 | 
				
			||||||
      source "#{file_uri_for(gem_repo2)}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      gem "rack"
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    warning_message = "the running version of Bundler (#{current_version}) is older " \
 | 
					 | 
				
			||||||
                      "than the version that created the lockfile (#{newer_minor}). " \
 | 
					 | 
				
			||||||
                      "We suggest you to upgrade to the version that created the " \
 | 
					 | 
				
			||||||
                      "lockfile by running `gem install bundler:#{newer_minor} --pre`."
 | 
					 | 
				
			||||||
    expect(err).to include warning_message
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    expect(lockfile).to eq <<~G
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  it "doesn't warn if the current version is older than lockfile's bundler version, and locked version is a dev version" do
 | 
					 | 
				
			||||||
    current_version = "999.998.999"
 | 
					 | 
				
			||||||
    system_gems "bundler-#{current_version}"
 | 
					 | 
				
			||||||
    newer_minor = "999.999.0.dev"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    lockfile <<-L
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    L
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    install_gemfile <<-G, :env => { "BUNDLER_VERSION" => current_version }
 | 
					 | 
				
			||||||
      source "#{file_uri_for(gem_repo2)}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      gem "rack"
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    expect(err).to be_empty
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    expect(lockfile).to eq <<~G
 | 
					 | 
				
			||||||
      GEM
 | 
					 | 
				
			||||||
        remote: #{file_uri_for(gem_repo2)}/
 | 
					 | 
				
			||||||
        specs:
 | 
					 | 
				
			||||||
          rack (1.0.0)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      PLATFORMS
 | 
					 | 
				
			||||||
        #{lockfile_platforms}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      DEPENDENCIES
 | 
					 | 
				
			||||||
        rack
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      BUNDLED WITH
 | 
					 | 
				
			||||||
         #{newer_minor}
 | 
					 | 
				
			||||||
    G
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  it "warns when updating bundler major version" do
 | 
					  it "warns when updating bundler major version" do
 | 
				
			||||||
    current_version = Bundler::VERSION
 | 
					    current_version = Bundler::VERSION
 | 
				
			||||||
    older_major = previous_major(current_version)
 | 
					    older_major = previous_major(current_version)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -168,7 +168,7 @@ RSpec.describe "Bundler.setup with multi platform stuff" do
 | 
				
			||||||
        nokogiri
 | 
					        nokogiri
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      BUNDLED WITH
 | 
					      BUNDLED WITH
 | 
				
			||||||
        2.1.4
 | 
					        #{Bundler::VERSION}
 | 
				
			||||||
    G
 | 
					    G
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    bundle "install"
 | 
					    bundle "install"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										109
									
								
								spec/bundler/runtime/self_management_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								spec/bundler/runtime/self_management_spec.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,109 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RSpec.describe "Self management", :rubygems => ">= 3.3.0.dev" do
 | 
				
			||||||
 | 
					  describe "auto switching" do
 | 
				
			||||||
 | 
					    let(:next_minor) do
 | 
				
			||||||
 | 
					      Bundler::VERSION.split(".").map.with_index {|s, i| i == 1 ? s.to_i + 1 : s }[0..2].join(".")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    before do
 | 
				
			||||||
 | 
					      build_repo2 do
 | 
				
			||||||
 | 
					        with_built_bundler(next_minor) {|gem_path| FileUtils.mv(gem_path, gem_repo2("gems")) }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      gemfile <<-G
 | 
				
			||||||
 | 
					        source "#{file_uri_for(gem_repo2)}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gem "rack"
 | 
				
			||||||
 | 
					      G
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "installs locked version when using system path and uses it" do
 | 
				
			||||||
 | 
					      lockfile_bundled_with(next_minor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "config set --local path.system true"
 | 
				
			||||||
 | 
					      bundle "install", :env => { "BUNDLER_SPEC_GEM_SOURCES" => file_uri_for(gem_repo2).to_s }
 | 
				
			||||||
 | 
					      expect(out).to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{next_minor}. Installing Bundler #{next_minor} and restarting using that version.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # It uninstalls the older system bundler
 | 
				
			||||||
 | 
					      bundle "clean --force"
 | 
				
			||||||
 | 
					      expect(out).to eq("Removing bundler (#{Bundler::VERSION})")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # App now uses locked version
 | 
				
			||||||
 | 
					      bundle "-v"
 | 
				
			||||||
 | 
					      expect(out).to end_with(next_minor[0] == "2" ? "Bundler version #{next_minor}" : next_minor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Subsequent installs use the locked version without reinstalling
 | 
				
			||||||
 | 
					      bundle "install --verbose"
 | 
				
			||||||
 | 
					      expect(out).to include("Using bundler #{next_minor}")
 | 
				
			||||||
 | 
					      expect(out).not_to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{next_minor}. Installing Bundler #{next_minor} and restarting using that version.")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "installs locked version when using local path and uses it" do
 | 
				
			||||||
 | 
					      lockfile_bundled_with(next_minor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "config set --local path vendor/bundle"
 | 
				
			||||||
 | 
					      bundle "install", :env => { "BUNDLER_SPEC_GEM_SOURCES" => file_uri_for(gem_repo2).to_s }
 | 
				
			||||||
 | 
					      expect(out).to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{next_minor}. Installing Bundler #{next_minor} and restarting using that version.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # It does not uninstall the locked bundler
 | 
				
			||||||
 | 
					      bundle "clean"
 | 
				
			||||||
 | 
					      expect(out).to be_empty
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # App now uses locked version
 | 
				
			||||||
 | 
					      bundle "-v"
 | 
				
			||||||
 | 
					      expect(out).to end_with(next_minor[0] == "2" ? "Bundler version #{next_minor}" : next_minor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Subsequent installs use the locked version without reinstalling
 | 
				
			||||||
 | 
					      bundle "install --verbose"
 | 
				
			||||||
 | 
					      expect(out).to include("Using bundler #{next_minor}")
 | 
				
			||||||
 | 
					      expect(out).not_to include("Bundler #{Bundler::VERSION} is running, but your lockfile was generated with #{next_minor}. Installing Bundler #{next_minor} and restarting using that version.")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "does not try to install a development version" do
 | 
				
			||||||
 | 
					      lockfile_bundled_with("#{next_minor}.dev")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "install --verbose"
 | 
				
			||||||
 | 
					      expect(out).not_to match(/restarting using that version/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "-v"
 | 
				
			||||||
 | 
					      expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it "shows a discreet message if locked bundler does not exist, and something more complete in `--verbose` mode" do
 | 
				
			||||||
 | 
					      missing_minor ="#{Bundler::VERSION[0]}.999.999"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      lockfile_bundled_with(missing_minor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "install"
 | 
				
			||||||
 | 
					      expect(err).to eq("There was an error installing the locked bundler version (#{missing_minor}), rerun with the `--verbose` flag for more details. Going on using bundler #{Bundler::VERSION}.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "install --verbose"
 | 
				
			||||||
 | 
					      expect(err).to include("There was an error installing the locked bundler version (#{missing_minor}), rerun with the `--verbose` flag for more details. Going on using bundler #{Bundler::VERSION}.")
 | 
				
			||||||
 | 
					      expect(err).to include("Gem::UnsatisfiableDependencyError")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      bundle "-v"
 | 
				
			||||||
 | 
					      expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def lockfile_bundled_with(version)
 | 
				
			||||||
 | 
					      lockfile <<~L
 | 
				
			||||||
 | 
					        GEM
 | 
				
			||||||
 | 
					          remote: #{file_uri_for(gem_repo2)}/
 | 
				
			||||||
 | 
					          specs:
 | 
				
			||||||
 | 
					            rack (1.0.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        PLATFORMS
 | 
				
			||||||
 | 
					          #{lockfile_platforms}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        DEPENDENCIES
 | 
				
			||||||
 | 
					          rack
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BUNDLED WITH
 | 
				
			||||||
 | 
					           #{version}
 | 
				
			||||||
 | 
					      L
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@ RSpec.configure do |config|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config.filter_run_excluding :git => RequirementChecker.against(git_version)
 | 
					  config.filter_run_excluding :git => RequirementChecker.against(git_version)
 | 
				
			||||||
  config.filter_run_excluding :bundler => RequirementChecker.against(Bundler::VERSION.split(".")[0])
 | 
					  config.filter_run_excluding :bundler => RequirementChecker.against(Bundler::VERSION.split(".")[0])
 | 
				
			||||||
 | 
					  config.filter_run_excluding :rubygems => RequirementChecker.against(Gem::VERSION)
 | 
				
			||||||
  config.filter_run_excluding :ruby_repo => !ENV["GEM_COMMAND"].nil?
 | 
					  config.filter_run_excluding :ruby_repo => !ENV["GEM_COMMAND"].nil?
 | 
				
			||||||
  config.filter_run_excluding :no_color_tty => Gem.win_platform? || !ENV["GITHUB_ACTION"].nil?
 | 
					  config.filter_run_excluding :no_color_tty => Gem.win_platform? || !ENV["GITHUB_ACTION"].nil?
 | 
				
			||||||
  config.filter_run_excluding :permissions => Gem.win_platform?
 | 
					  config.filter_run_excluding :permissions => Gem.win_platform?
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,7 +32,7 @@ module Gem
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ENV["BUNDLER_SPEC_GEM_SOURCES"]
 | 
					  if ENV["BUNDLER_SPEC_GEM_SOURCES"]
 | 
				
			||||||
    @sources = [ENV["BUNDLER_SPEC_GEM_SOURCES"]]
 | 
					    self.sources = [ENV["BUNDLER_SPEC_GEM_SOURCES"]]
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # We only need this hack for rubygems versions without the BundlerVersionFinder
 | 
					  # We only need this hack for rubygems versions without the BundlerVersionFinder
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -166,7 +166,7 @@ module Spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def gem_command(command, options = {})
 | 
					    def gem_command(command, options = {})
 | 
				
			||||||
      env = options[:env] || {}
 | 
					      env = options[:env] || {}
 | 
				
			||||||
      env["RUBYOPT"] = opt_add("-r#{spec_dir}/support/hax.rb", env["RUBYOPT"] || ENV["RUBYOPT"])
 | 
					      env["RUBYOPT"] = opt_add(opt_add("-r#{spec_dir}/support/hax.rb", env["RUBYOPT"]), ENV["RUBYOPT"])
 | 
				
			||||||
      options[:env] = env
 | 
					      options[:env] = env
 | 
				
			||||||
      sys_exec("#{Path.gem_bin} #{command}", options)
 | 
					      sys_exec("#{Path.gem_bin} #{command}", options)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					@ -181,7 +181,7 @@ module Spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def sys_exec(cmd, options = {})
 | 
					    def sys_exec(cmd, options = {})
 | 
				
			||||||
      env = options[:env] || {}
 | 
					      env = options[:env] || {}
 | 
				
			||||||
      env["RUBYOPT"] = opt_add("-r#{spec_dir}/support/switch_rubygems.rb", env["RUBYOPT"] || ENV["RUBYOPT"])
 | 
					      env["RUBYOPT"] = opt_add(opt_add("-r#{spec_dir}/support/switch_rubygems.rb", env["RUBYOPT"]), ENV["RUBYOPT"])
 | 
				
			||||||
      dir = options[:dir] || bundled_app
 | 
					      dir = options[:dir] || bundled_app
 | 
				
			||||||
      command_execution = CommandExecution.new(cmd.to_s, dir)
 | 
					      command_execution = CommandExecution.new(cmd.to_s, dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -348,6 +348,7 @@ module Spec
 | 
				
			||||||
      without_env_side_effects do
 | 
					      without_env_side_effects do
 | 
				
			||||||
        ENV["GEM_HOME"] = path.to_s
 | 
					        ENV["GEM_HOME"] = path.to_s
 | 
				
			||||||
        ENV["GEM_PATH"] = path.to_s
 | 
					        ENV["GEM_PATH"] = path.to_s
 | 
				
			||||||
 | 
					        ENV["BUNDLER_ORIG_GEM_HOME"] = nil
 | 
				
			||||||
        ENV["BUNDLER_ORIG_GEM_PATH"] = nil
 | 
					        ENV["BUNDLER_ORIG_GEM_PATH"] = nil
 | 
				
			||||||
        yield
 | 
					        yield
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,4 +60,4 @@ DEPENDENCIES
 | 
				
			||||||
  test-unit
 | 
					  test-unit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUNDLED WITH
 | 
					BUNDLED WITH
 | 
				
			||||||
   2.3.0.dev
 | 
					   2.3.0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,4 +66,4 @@ DEPENDENCIES
 | 
				
			||||||
  test-unit
 | 
					  test-unit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUNDLED WITH
 | 
					BUNDLED WITH
 | 
				
			||||||
   2.3.0.dev
 | 
					   2.3.0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,4 +41,4 @@ DEPENDENCIES
 | 
				
			||||||
  webrick (= 1.7.0)
 | 
					  webrick (= 1.7.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BUNDLED WITH
 | 
					BUNDLED WITH
 | 
				
			||||||
   2.3.0.dev
 | 
					   2.3.0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue