Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rubygem-bundler for openSUSE:Factory 
checked in at 2021-08-27 21:43:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-bundler (Old)
 and      /work/SRC/openSUSE:Factory/.rubygem-bundler.new.1899 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rubygem-bundler"

Fri Aug 27 21:43:32 2021 rev:53 rq:912491 version:2.2.24

Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-bundler/rubygem-bundler.changes  
2021-07-02 13:28:23.856327394 +0200
+++ 
/work/SRC/openSUSE:Factory/.rubygem-bundler.new.1899/rubygem-bundler.changes    
    2021-08-27 21:43:46.293961289 +0200
@@ -1,0 +2,48 @@
+Mon Jul 26 05:49:13 UTC 2021 - Stephan Kulow <co...@suse.com>
+
+updated to version 2.2.24
+ see installed CHANGELOG.md
+
+  # 2.2.24 (July 15, 2021)
+  
+  ## Bug fixes:
+  
+    - Fix development gem unintentionally removed on an edge case 
[#4751](https://github.com/rubygems/rubygems/pull/4751)
+    - Fix dangling empty plugin hooks 
[#4755](https://github.com/rubygems/rubygems/pull/4755)
+    - Fix `bundle plugin install --help` showing `bundle install`'s help 
[#4756](https://github.com/rubygems/rubygems/pull/4756)
+    - Make sure `bundle check` shows uniq missing gems 
[#4749](https://github.com/rubygems/rubygems/pull/4749)
+  
+  ## Performance:
+  
+    - Slightly speed up `bundler/setup` 
[#4750](https://github.com/rubygems/rubygems/pull/4750)
+  
+  # 2.2.23 (July 9, 2021)
+  
+  ## Enhancements:
+  
+    - Fix `bundle install` on truffleruby selecting incorrect variant for 
`sorbet-static` gem [#4625](https://github.com/rubygems/rubygems/pull/4625)
+    - Spare meaningless warning on read-only bundle invocations 
[#4724](https://github.com/rubygems/rubygems/pull/4724)
+  
+  ## Bug fixes:
+  
+    - Fix incorrect warning about duplicated gems in the Gemfile 
[#4732](https://github.com/rubygems/rubygems/pull/4732)
+    - Fix `bundle plugin install foo` crashing 
[#4734](https://github.com/rubygems/rubygems/pull/4734)
+  
+  # 2.2.22 (July 6, 2021)
+  
+  ## Enhancements:
+  
+    - Never downgrade indirect dependencies when running `bundle update` 
[#4713](https://github.com/rubygems/rubygems/pull/4713)
+    - Fix `getaddrinfo` errors not treated as fatal on non darwin platforms 
[#4703](https://github.com/rubygems/rubygems/pull/4703)
+  
+  ## Bug fixes:
+  
+    - Fix `bundle update <gem>` sometimes hanging and `bundle lock --update` 
not being able to update an insecure lockfile to the new format if it requires 
downgrades [#4652](https://github.com/rubygems/rubygems/pull/4652)
+    - Fix edge case combination of DSL methods and duplicated sources causing 
gems to not be found [#4711](https://github.com/rubygems/rubygems/pull/4711)
+    - Fix `bundle doctor` crashing when finding a broken symlink 
[#4707](https://github.com/rubygems/rubygems/pull/4707)
+    - Fix incorrect re-resolve edge case 
[#4700](https://github.com/rubygems/rubygems/pull/4700)
+    - Fix some gems being unintentionally locked under multiple lockfile 
sections [#4701](https://github.com/rubygems/rubygems/pull/4701)
+    - Fix `--conservative` flag unexpectedly updating indirect dependencies 
[#4692](https://github.com/rubygems/rubygems/pull/4692)
+  
+
+-------------------------------------------------------------------

Old:
----
  bundler-2.2.21.gem

New:
----
  bundler-2.2.24.gem

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rubygem-bundler.spec ++++++
--- /var/tmp/diff_new_pack.2qJb3Z/_old  2021-08-27 21:43:47.721962940 +0200
+++ /var/tmp/diff_new_pack.2qJb3Z/_new  2021-08-27 21:43:47.721962940 +0200
@@ -24,7 +24,7 @@
 #
 
 Name:           rubygem-bundler
-Version:        2.2.21
+Version:        2.2.24
 Release:        0
 %define mod_name bundler
 %define mod_full_name %{mod_name}-%{version}

++++++ bundler-2.2.21.gem -> bundler-2.2.24.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md
--- old/CHANGELOG.md    2021-06-23 15:25:56.000000000 +0200
+++ new/CHANGELOG.md    2021-07-15 17:00:51.000000000 +0200
@@ -1,3 +1,44 @@
+# 2.2.24 (July 15, 2021)
+
+## Bug fixes:
+
+  - Fix development gem unintentionally removed on an edge case 
[#4751](https://github.com/rubygems/rubygems/pull/4751)
+  - Fix dangling empty plugin hooks 
[#4755](https://github.com/rubygems/rubygems/pull/4755)
+  - Fix `bundle plugin install --help` showing `bundle install`'s help 
[#4756](https://github.com/rubygems/rubygems/pull/4756)
+  - Make sure `bundle check` shows uniq missing gems 
[#4749](https://github.com/rubygems/rubygems/pull/4749)
+
+## Performance:
+
+  - Slightly speed up `bundler/setup` 
[#4750](https://github.com/rubygems/rubygems/pull/4750)
+
+# 2.2.23 (July 9, 2021)
+
+## Enhancements:
+
+  - Fix `bundle install` on truffleruby selecting incorrect variant for 
`sorbet-static` gem [#4625](https://github.com/rubygems/rubygems/pull/4625)
+  - Spare meaningless warning on read-only bundle invocations 
[#4724](https://github.com/rubygems/rubygems/pull/4724)
+
+## Bug fixes:
+
+  - Fix incorrect warning about duplicated gems in the Gemfile 
[#4732](https://github.com/rubygems/rubygems/pull/4732)
+  - Fix `bundle plugin install foo` crashing 
[#4734](https://github.com/rubygems/rubygems/pull/4734)
+
+# 2.2.22 (July 6, 2021)
+
+## Enhancements:
+
+  - Never downgrade indirect dependencies when running `bundle update` 
[#4713](https://github.com/rubygems/rubygems/pull/4713)
+  - Fix `getaddrinfo` errors not treated as fatal on non darwin platforms 
[#4703](https://github.com/rubygems/rubygems/pull/4703)
+
+## Bug fixes:
+
+  - Fix `bundle update <gem>` sometimes hanging and `bundle lock --update` not 
being able to update an insecure lockfile to the new format if it requires 
downgrades [#4652](https://github.com/rubygems/rubygems/pull/4652)
+  - Fix edge case combination of DSL methods and duplicated sources causing 
gems to not be found [#4711](https://github.com/rubygems/rubygems/pull/4711)
+  - Fix `bundle doctor` crashing when finding a broken symlink 
[#4707](https://github.com/rubygems/rubygems/pull/4707)
+  - Fix incorrect re-resolve edge case 
[#4700](https://github.com/rubygems/rubygems/pull/4700)
+  - Fix some gems being unintentionally locked under multiple lockfile 
sections [#4701](https://github.com/rubygems/rubygems/pull/4701)
+  - Fix `--conservative` flag unexpectedly updating indirect dependencies 
[#4692](https://github.com/rubygems/rubygems/pull/4692)
+
 # 2.2.21 (June 23, 2021)
 
 ## Security fixes:
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/build_metadata.rb 
new/lib/bundler/build_metadata.rb
--- old/lib/bundler/build_metadata.rb   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/build_metadata.rb   2021-07-15 17:00:51.000000000 +0200
@@ -4,8 +4,8 @@
   # Represents metadata from when the Bundler gem was built.
   module BuildMetadata
     # begin ivars
-    @built_at = "2021-06-23".freeze
-    @git_commit_sha = "0b5db72094".freeze
+    @built_at = "2021-07-15".freeze
+    @git_commit_sha = "d78b1ee235".freeze
     @release = true
     # end ivars
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/cli/doctor.rb 
new/lib/bundler/cli/doctor.rb
--- old/lib/bundler/cli/doctor.rb       2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/cli/doctor.rb       2021-07-15 17:00:51.000000000 +0200
@@ -100,8 +100,11 @@
       files_not_readable_or_writable = []
       files_not_rw_and_owned_by_different_user = []
       files_not_owned_by_current_user_but_still_rw = []
+      broken_symlinks = []
       Find.find(Bundler.bundle_path.to_s).each do |f|
-        if !File.writable?(f) || !File.readable?(f)
+        if !File.exist?(f)
+          broken_symlinks << f
+        elsif !File.writable?(f) || !File.readable?(f)
           if File.stat(f).uid != Process.uid
             files_not_rw_and_owned_by_different_user << f
           else
@@ -113,6 +116,13 @@
       end
 
       ok = true
+
+      if broken_symlinks.any?
+        Bundler.ui.warn "Broken links exist in the Bundler home. Please report 
them to the offending gem's upstream repo. These files are:\n - 
#{broken_symlinks.join("\n - ")}"
+
+        ok = false
+      end
+
       if files_not_owned_by_current_user_but_still_rw.any?
         Bundler.ui.warn "Files exist in the Bundler home that are owned by 
another " \
           "user, but are still readable/writable. These files are:\n - 
#{files_not_owned_by_current_user_but_still_rw.join("\n - ")}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/cli/install.rb 
new/lib/bundler/cli/install.rb
--- old/lib/bundler/cli/install.rb      2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/cli/install.rb      2021-07-15 17:00:51.000000000 +0200
@@ -104,7 +104,7 @@
     private
 
     def warn_if_root
-      return if Bundler.settings[:silence_root_warning] || Bundler::WINDOWS || 
!Process.uid.zero?
+      return if Bundler.settings[:silence_root_warning] || Gem.win_platform? 
|| !Process.uid.zero?
       Bundler.ui.warn "Don't run Bundler as root. Bundler can ask for sudo " \
         "if it is needed, and installing your bundle as root will break this " 
\
         "application for all non-root users on this machine.", :wrap => true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/cli/lock.rb new/lib/bundler/cli/lock.rb
--- old/lib/bundler/cli/lock.rb 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/cli/lock.rb 2021-07-15 17:00:51.000000000 +0200
@@ -21,9 +21,13 @@
       Bundler::Fetcher.disable_endpoint = options["full-index"]
 
       update = options[:update]
+      conservative = options[:conservative]
+
       if update.is_a?(Array) # unlocking specific gems
         Bundler::CLI::Common.ensure_all_gems_in_lockfile!(update)
-        update = { :gems => update, :lock_shared_dependencies => 
options[:conservative] }
+        update = { :gems => update, :conservative => conservative }
+      elsif update
+        update = { :conservative => conservative } if conservative
       end
       definition = Bundler.definition(update)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/cli/update.rb 
new/lib/bundler/cli/update.rb
--- old/lib/bundler/cli/update.rb       2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/cli/update.rb       2021-07-15 17:00:51.000000000 +0200
@@ -27,9 +27,14 @@
         raise InvalidOption, "Cannot specify --all along with specific 
options."
       end
 
+      conservative = options[:conservative]
+
       if full_update
-        # We're doing a full update
-        Bundler.definition(true)
+        if conservative
+          Bundler.definition(:conservative => conservative)
+        else
+          Bundler.definition(true)
+        end
       else
         unless Bundler.default_lockfile.exist?
           raise GemfileLockNotFound, "This Bundle hasn't been installed yet. " 
\
@@ -43,7 +48,7 @@
         end
 
         Bundler.definition(:gems => gems, :sources => sources, :ruby => 
options[:ruby],
-                           :lock_shared_dependencies => options[:conservative],
+                           :conservative => conservative,
                            :bundler => options[:bundler])
       end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/cli.rb new/lib/bundler/cli.rb
--- old/lib/bundler/cli.rb      2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/cli.rb      2021-07-15 17:00:51.000000000 +0200
@@ -14,6 +14,7 @@
     COMMAND_ALIASES = {
       "check" => "c",
       "install" => "i",
+      "plugin" => "",
       "list" => "ls",
       "exec" => ["e", "ex", "exe"],
       "cache" => ["package", "pack"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/current_ruby.rb 
new/lib/bundler/current_ruby.rb
--- old/lib/bundler/current_ruby.rb     2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/current_ruby.rb     2021-07-15 17:00:51.000000000 +0200
@@ -65,19 +65,19 @@
     end
 
     def mswin?
-      Bundler::WINDOWS
+      Gem.win_platform?
     end
 
     def mswin64?
-      Bundler::WINDOWS && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mswin64" && Bundler.local_platform.cpu == "x64"
+      Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mswin64" && Bundler.local_platform.cpu == "x64"
     end
 
     def mingw?
-      Bundler::WINDOWS && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu != "x64"
+      Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu != "x64"
     end
 
     def x64_mingw?
-      Bundler::WINDOWS && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu == "x64"
+      Gem.win_platform? && Bundler.local_platform != Gem::Platform::RUBY && 
Bundler.local_platform.os == "mingw32" && Bundler.local_platform.cpu == "x64"
     end
 
     (KNOWN_MINOR_VERSIONS + KNOWN_MAJOR_VERSIONS).each do |version|
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/definition.rb 
new/lib/bundler/definition.rb
--- old/lib/bundler/definition.rb       2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/definition.rb       2021-07-15 17:00:51.000000000 +0200
@@ -56,10 +56,8 @@
         @unlocking_bundler = false
         @unlocking = unlock
       else
-        unlock = unlock.dup
         @unlocking_bundler = unlock.delete(:bundler)
-        unlock.delete_if {|_k, v| Array(v).empty? }
-        @unlocking = !unlock.empty?
+        @unlocking = unlock.any? {|_k, v| !Array(v).empty? }
       end
 
       @dependencies    = dependencies
@@ -106,8 +104,8 @@
         @locked_platforms = []
       end
 
-      @locked_gem_sources = @locked_sources.select {|s| 
s.is_a?(Source::Rubygems) }
-      @multisource_allowed = @locked_gem_sources.any?(&:multiple_remotes?) && 
(sources.aggregate_global_source? || Bundler.frozen_bundle?)
+      locked_gem_sources = @locked_sources.select {|s| 
s.is_a?(Source::Rubygems) }
+      @multisource_allowed = locked_gem_sources.size == 1 && 
locked_gem_sources.first.multiple_remotes? && Bundler.frozen_bundle?
 
       if @multisource_allowed
         unless sources.aggregate_global_source?
@@ -116,10 +114,9 @@
           Bundler::SharedHelpers.major_deprecation 2, msg
         end
 
-        @sources.merged_gem_lockfile_sections!
+        @sources.merged_gem_lockfile_sections!(locked_gem_sources.first)
       end
 
-      @unlock[:gems] ||= []
       @unlock[:sources] ||= []
       @unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
         @ruby_version.diff(locked_ruby_version_object)
@@ -132,9 +129,11 @@
       @path_changes = converge_paths
       @source_changes = converge_sources
 
-      unless @unlock[:lock_shared_dependencies]
-        eager_unlock = expand_dependencies(@unlock[:gems], true)
-        @unlock[:gems] = @locked_specs.for(eager_unlock, [], false, false, 
false).map(&:name)
+      if @unlock[:conservative]
+        @unlock[:gems] ||= @dependencies.map(&:name)
+      else
+        eager_unlock = expand_dependencies(@unlock[:gems] || [], true)
+        @unlock[:gems] = @locked_specs.for(eager_unlock, false, false, 
false).map(&:name)
       end
 
       @dependency_changes = converge_dependencies
@@ -186,25 +185,15 @@
     #
     # @return [Bundler::SpecSet]
     def specs
-      @specs ||= begin
-        begin
-          specs = resolve.materialize(requested_dependencies)
-        rescue GemNotFound => e # Handle yanked gem
-          gem_name, gem_version = extract_gem_info(e)
-          locked_gem = @locked_specs[gem_name].last
-          raise if locked_gem.nil? || locked_gem.version.to_s != gem_version 
|| !@remote
-          raise GemNotFound, "Your bundle is locked to #{locked_gem} from 
#{locked_gem.source}, but that version can " \
-                             "no longer be found in that source. That means 
the author of #{locked_gem} has removed it. " \
-                             "You'll need to update your bundle to a version 
other than #{locked_gem} that hasn't been " \
-                             "removed in order to install."
-        end
-        unless specs["bundler"].any?
-          bundler = 
sources.metadata_source.specs.search(Gem::Dependency.new("bundler", 
VERSION)).last
-          specs["bundler"] = bundler
-        end
-
-        specs
-      end
+      @specs ||= add_bundler_to(resolve.materialize(requested_dependencies))
+    rescue GemNotFound => e # Handle yanked gem
+      gem_name, gem_version = extract_gem_info(e)
+      locked_gem = @locked_specs[gem_name].last
+      raise if locked_gem.nil? || locked_gem.version.to_s != gem_version || 
!@remote
+      raise GemNotFound, "Your bundle is locked to #{locked_gem} from 
#{locked_gem.source}, but that version can " \
+                         "no longer be found in that source. That means the 
author of #{locked_gem} has removed it. " \
+                         "You'll need to update your bundle to a version other 
than #{locked_gem} that hasn't been " \
+                         "removed in order to install."
     end
 
     def new_specs
@@ -236,17 +225,11 @@
     end
 
     def requested_specs
-      @requested_specs ||= begin
-        groups = requested_groups
-        groups.map!(&:to_sym)
-        specs_for(groups)
-      end
+      specs_for(requested_groups)
     end
 
     def requested_dependencies
-      groups = requested_groups
-      groups.map!(&:to_sym)
-      dependencies_for(groups)
+      dependencies_for(requested_groups)
     end
 
     def current_dependencies
@@ -256,11 +239,13 @@
     end
 
     def specs_for(groups)
+      groups = requested_groups if groups.empty?
       deps = dependencies_for(groups)
-      specs.for(expand_dependencies(deps))
+      add_bundler_to(resolve.materialize(expand_dependencies(deps)))
     end
 
     def dependencies_for(groups)
+      groups.map!(&:to_sym)
       current_dependencies.reject do |d|
         (d.groups & groups).empty?
       end
@@ -498,9 +483,6 @@
     attr_reader :sources
     private :sources
 
-    attr_reader :locked_gem_sources
-    private :locked_gem_sources
-
     def nothing_changed?
       !@source_changes && !@dependency_changes && !@new_platform && 
!@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
     end
@@ -511,6 +493,15 @@
 
     private
 
+    def add_bundler_to(specs)
+      unless specs["bundler"].any?
+        bundler = 
sources.metadata_source.specs.search(Gem::Dependency.new("bundler", 
VERSION)).last
+        specs["bundler"] = bundler
+      end
+
+      specs
+    end
+
     def precompute_source_requirements_for_indirect_dependencies?
       sources.non_global_rubygems_sources.all?(&:dependency_api_available?) && 
!sources.aggregate_global_source?
     end
@@ -628,35 +619,11 @@
       end
     end
 
-    def converge_rubygems_sources
-      return false unless multisource_allowed?
-
-      return false if locked_gem_sources.empty?
-
-      # Get the RubyGems remotes from the Gemfile
-      actual_remotes = sources.rubygems_remotes
-      return false if actual_remotes.empty?
-
-      changes = false
-
-      # If there is a RubyGems source in both
-      locked_gem_sources.each do |locked_gem_source|
-        # Merge the remotes from the Gemfile into the Gemfile.lock
-        changes |= locked_gem_source.replace_remotes(actual_remotes, 
Bundler.settings[:allow_deployment_source_credential_changes])
-      end
-
-      changes
-    end
-
     def converge_sources
-      changes = false
-
-      changes |= converge_rubygems_sources
-
       # Replace the sources from the Gemfile with the sources from the 
Gemfile.lock,
       # if they exist in the Gemfile.lock and are `==`. If you can't find an 
equivalent
       # source in the Gemfile.lock, use the one from the Gemfile.
-      changes |= sources.replace_sources!(@locked_sources)
+      changes = sources.replace_sources!(@locked_sources)
 
       sources.all_sources.each do |source|
         # If the source is unlockable and the current command allows an unlock 
of
@@ -741,8 +708,6 @@
         end
       end
 
-      unlock_source_unlocks_spec = 
Bundler.feature_flag.unlock_source_unlocks_spec?
-
       converged = []
       @locked_specs.each do |s|
         # Replace the locked dependency's source with the equivalent source 
from the Gemfile
@@ -754,11 +719,6 @@
         next if s.source.nil?
         next if @unlock[:sources].include?(s.source.name)
 
-        # XXX This is a backwards-compatibility fix to preserve the ability to
-        # unlock a single gem by passing its name via `--source`. See issue 
#3759
-        # TODO: delete in Bundler 2
-        next if unlock_source_unlocks_spec && 
@unlock[:sources].include?(s.name)
-
         # If the spec is from a path source and it doesn't exist anymore
         # then we unlock it.
 
@@ -770,7 +730,7 @@
             # if we won't need the source (according to the lockfile),
             # don't error if the path/git source isn't available
             next if @locked_specs.
-                    for(requested_dependencies, [], false, true, false).
+                    for(requested_dependencies, false, true, false).
                     none? {|locked_spec| locked_spec.source == s.source }
 
             raise
@@ -789,8 +749,8 @@
       end
 
       resolve = SpecSet.new(converged)
-      @locked_specs_incomplete_for_platform = 
!resolve.for(expand_dependencies(requested_dependencies & deps), 
@unlock[:gems], true, true)
-      resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], 
false, false, false)
+      @locked_specs_incomplete_for_platform = 
!resolve.for(expand_dependencies(requested_dependencies & deps), true, true)
+      resolve = SpecSet.new(resolve.for(expand_dependencies(deps, true), 
false, false, false).reject{|s| @unlock[:gems].include?(s.name) })
       diff    = nil
 
       # Now, we unlock any sources that do not have anymore gems pinned to it
@@ -912,14 +872,13 @@
     end
 
     def additional_base_requirements_for_resolve
-      return [] unless @locked_gems
+      return [] unless @locked_gems && unlocking? && 
!sources.expired_sources?(@locked_gems.sources)
       dependencies_by_name = dependencies.inject({}) {|memo, dep| 
memo.update(dep.name => dep) }
       @locked_gems.specs.reduce({}) do |requirements, locked_spec|
         name = locked_spec.name
         dependency = dependencies_by_name[name]
-        next requirements unless dependency
         next requirements if @locked_gems.dependencies[name] != dependency
-        next requirements if dependency.source.is_a?(Source::Path)
+        next requirements if dependency && 
dependency.source.is_a?(Source::Path)
         dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
         requirements[name] = DepProxy.get_proxy(dep, locked_spec.platform)
         requirements
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/dsl.rb new/lib/bundler/dsl.rb
--- old/lib/bundler/dsl.rb      2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/dsl.rb      2021-07-15 17:00:51.000000000 +0200
@@ -24,9 +24,6 @@
     def initialize
       @source               = nil
       @sources              = SourceList.new
-
-      @global_rubygems_sources = []
-
       @git_sources          = {}
       @dependencies         = []
       @groups               = []
@@ -48,7 +45,6 @@
       @gemfiles << expanded_gemfile_path
       contents ||= Bundler.read_file(@gemfile.to_s)
       instance_eval(contents.dup.tap{|x| x.untaint if RUBY_VERSION < "2.7" }, 
gemfile.to_s, 1)
-      check_primary_source_safety
     rescue Exception => e # rubocop:disable Lint/RescueException
       message = "There was an error " \
         "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
@@ -107,8 +103,8 @@
       if current = @dependencies.find {|d| d.name == dep.name }
         deleted_dep = @dependencies.delete(current) if current.type == 
:development
 
-        if current.requirement != dep.requirement
-          unless deleted_dep
+        unless deleted_dep
+          if current.requirement != dep.requirement
             return if dep.type == :development
 
             update_prompt = ""
@@ -126,17 +122,14 @@
             raise GemfileError, "You cannot specify the same gem twice with 
different version requirements.\n" \
                             "You specified: #{current.name} 
(#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
                              "#{update_prompt}"
+          else
+            Bundler.ui.warn "Your Gemfile lists the gem #{current.name} 
(#{current.requirement}) more than once.\n" \
+                            "You should probably keep only one of them.\n" \
+                            "Remove any duplicate entries and specify the gem 
only once.\n" \
+                            "While it's not a problem now, it could cause 
errors if you change the version of one of them later."
           end
 
-        else
-          Bundler.ui.warn "Your Gemfile lists the gem #{current.name} 
(#{current.requirement}) more than once.\n" \
-                          "You should probably keep only one of them.\n" \
-                          "Remove any duplicate entries and specify the gem 
only once.\n" \
-                          "While it's not a problem now, it could cause errors 
if you change the version of one of them later."
-        end
-
-        if current.source != dep.source
-          unless deleted_dep
+          if current.source != dep.source
             return if dep.type == :development
             raise GemfileError, "You cannot specify the same gem twice coming 
from different sources.\n" \
                             "You specified that #{dep.name} 
(#{dep.requirement}) should come from " \
@@ -168,7 +161,7 @@
       elsif block_given?
         with_source(@sources.add_rubygems_source("remotes" => source), &blk)
       else
-        @global_rubygems_sources << source
+        @sources.add_global_rubygems_remote(source)
       end
     end
 
@@ -222,6 +215,7 @@
     end
 
     def to_definition(lockfile, unlock)
+      check_primary_source_safety
       Definition.new(lockfile, @dependencies, @sources, unlock, @ruby_version, 
@optional_groups, @gemfiles)
     end
 
@@ -453,12 +447,7 @@
     end
 
     def check_rubygems_source_safety
-      @sources.global_rubygems_source = @global_rubygems_sources.shift
-      return if @global_rubygems_sources.empty?
-
-      @global_rubygems_sources.each do |source|
-        @sources.add_rubygems_remote(source)
-      end
+      return unless @sources.aggregate_global_source?
 
       if Bundler.feature_flag.bundler_3_mode?
         msg = "This Gemfile contains multiple primary sources. " \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/feature_flag.rb 
new/lib/bundler/feature_flag.rb
--- old/lib/bundler/feature_flag.rb     2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/feature_flag.rb     2021-07-15 17:00:51.000000000 +0200
@@ -38,7 +38,6 @@
     settings_flag(:print_only_version_number) { bundler_3_mode? }
     settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
     settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
-    settings_flag(:unlock_source_unlocks_spec) { !bundler_3_mode? }
     settings_flag(:update_requires_all_flag) { bundler_4_mode? }
     settings_flag(:use_gem_version_promoter_for_major_updates) { 
bundler_3_mode? }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/fetcher/downloader.rb 
new/lib/bundler/fetcher/downloader.rb
--- old/lib/bundler/fetcher/downloader.rb       2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/fetcher/downloader.rb       2021-07-15 17:00:51.000000000 
+0200
@@ -68,8 +68,7 @@
         raise CertificateFailureError.new(uri)
       rescue *HTTP_ERRORS => e
         Bundler.ui.trace e
-        case e.message
-        when /host down:/, /getaddrinfo: nodename nor servname provided/
+        if e.is_a?(SocketError) || e.message =~ /host down:/
           raise NetworkDownError, "Could not reach host #{uri.host}. Check 
your network " \
             "connection and try again."
         else
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/index.rb new/lib/bundler/index.rb
--- old/lib/bundler/index.rb    2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/index.rb    2021-07-15 17:00:51.000000000 +0200
@@ -195,11 +195,7 @@
           if base # allow all platforms when searching from a lockfile
             dependency.matches_spec?(spec)
           else
-            if Gem::Platform.respond_to? :match_spec?
-              dependency.matches_spec?(spec) && Gem::Platform.match_spec?(spec)
-            else
-              dependency.matches_spec?(spec) && 
Gem::Platform.match(spec.platform)
-            end
+            dependency.matches_spec?(spec) && Gem::Platform.match_spec?(spec)
           end
         end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/installer/standalone.rb 
new/lib/bundler/installer/standalone.rb
--- old/lib/bundler/installer/standalone.rb     2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/installer/standalone.rb     2021-07-15 17:00:51.000000000 
+0200
@@ -3,7 +3,7 @@
 module Bundler
   class Standalone
     def initialize(groups, definition)
-      @specs = groups.empty? ? definition.requested_specs : 
definition.specs_for(groups.map(&:to_sym))
+      @specs = definition.specs_for(groups)
     end
 
     def generate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/installer.rb new/lib/bundler/installer.rb
--- old/lib/bundler/installer.rb        2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/installer.rb        2021-07-15 17:00:51.000000000 +0200
@@ -135,7 +135,7 @@
           next
         end
 
-        mode = Bundler::WINDOWS ? "wb:UTF-8" : "w"
+        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
         require "erb"
         content = if RUBY_VERSION >= "2.6"
           ERB.new(template, :trim_mode => "-").result(binding)
@@ -144,7 +144,7 @@
         end
 
         File.write(binstub_path, content, :mode => mode, :perm => 0o777 & 
~File.umask)
-        if Bundler::WINDOWS || options[:all_platforms]
+        if Gem.win_platform? || options[:all_platforms]
           prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
           File.write("#{binstub_path}.cmd", prefix + content, :mode => mode)
         end
@@ -182,7 +182,7 @@
         executable_path = Pathname(spec.full_gem_path).join(spec.bindir, 
executable).relative_path_from(bin_path)
         executable_path = executable_path
 
-        mode = Bundler::WINDOWS ? "wb:UTF-8" : "w"
+        mode = Gem.win_platform? ? "wb:UTF-8" : "w"
         require "erb"
         content = if RUBY_VERSION >= "2.6"
           ERB.new(template, :trim_mode => "-").result(binding)
@@ -191,7 +191,7 @@
         end
 
         File.write("#{bin_path}/#{executable}", content, :mode => mode, :perm 
=> 0o755)
-        if Bundler::WINDOWS || options[:all_platforms]
+        if Gem.win_platform? || options[:all_platforms]
           prefix = "@ruby -x \"%~f0\" %*\n@exit /b %ERRORLEVEL%\n\n"
           File.write("#{bin_path}/#{executable}.cmd", prefix + content, :mode 
=> mode)
         end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/lockfile_parser.rb 
new/lib/bundler/lockfile_parser.rb
--- old/lib/bundler/lockfile_parser.rb  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/lockfile_parser.rb  2021-07-15 17:00:51.000000000 +0200
@@ -1,16 +1,5 @@
 # frozen_string_literal: true
 
-#--
-# Some versions of the Bundler 1.1 RC series introduced corrupted
-# lockfiles. There were two major problems:
-#
-# * multiple copies of the same GIT section appeared in the lockfile
-# * when this happened, those sections got multiple copies of gems
-#   in those sections.
-#
-# As a result, Bundler 1.1 contains code that fixes the earlier
-# corruption. We will remove this fix-up code in Bundler 1.2.
-
 module Bundler
   class LockfileParser
     attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, 
:ruby_version
@@ -124,12 +113,7 @@
           @sources << @current_source
         when GIT
           @current_source = TYPES[@type].from_lock(@opts)
-          # Strip out duplicate GIT sections
-          if @sources.include?(@current_source)
-            @current_source = @sources.find {|s| s == @current_source }
-          else
-            @sources << @current_source
-          end
+          @sources << @current_source
         when GEM
           @opts["remotes"] = Array(@opts.delete("remote")).reverse
           @current_source = TYPES[@type].from_lock(@opts)
@@ -212,9 +196,7 @@
         @current_spec = LazySpecification.new(name, version, platform)
         @current_spec.source = @current_source
 
-        # Avoid introducing multiple copies of the same spec (caused by
-        # duplicate GIT sections)
-        @specs[@current_spec.identifier] ||= @current_spec
+        @specs[@current_spec.identifier] = @current_spec
       elsif spaces.size == 6
         version = version.split(",").map(&:strip) if version
         dep = Gem::Dependency.new(name, version)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-add.1 
new/lib/bundler/man/bundle-add.1
--- old/lib/bundler/man/bundle-add.1    2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-add.1    2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-ADD" "1" "May 2021" "" ""
+.TH "BUNDLE\-ADD" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-binstubs.1 
new/lib/bundler/man/bundle-binstubs.1
--- old/lib/bundler/man/bundle-binstubs.1       2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-binstubs.1       2021-07-15 17:00:51.000000000 
+0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-BINSTUBS" "1" "May 2021" "" ""
+.TH "BUNDLE\-BINSTUBS" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-cache.1 
new/lib/bundler/man/bundle-cache.1
--- old/lib/bundler/man/bundle-cache.1  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-cache.1  2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-CACHE" "1" "May 2021" "" ""
+.TH "BUNDLE\-CACHE" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your 
application
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-check.1 
new/lib/bundler/man/bundle-check.1
--- old/lib/bundler/man/bundle-check.1  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-check.1  2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-CHECK" "1" "May 2021" "" ""
+.TH "BUNDLE\-CHECK" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-clean.1 
new/lib/bundler/man/bundle-clean.1
--- old/lib/bundler/man/bundle-clean.1  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-clean.1  2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-CLEAN" "1" "May 2021" "" ""
+.TH "BUNDLE\-CLEAN" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-config.1 
new/lib/bundler/man/bundle-config.1
--- old/lib/bundler/man/bundle-config.1 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-config.1 2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-CONFIG" "1" "May 2021" "" ""
+.TH "BUNDLE\-CONFIG" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-config\fR \- Set bundler configuration options
@@ -274,9 +274,6 @@
 \fBtimeout\fR (\fBBUNDLE_TIMEOUT\fR): The seconds allowed before timing out 
for network requests\. Defaults to \fB10\fR\.
 .
 .IP "\(bu" 4
-\fBunlock_source_unlocks_spec\fR (\fBBUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC\fR): 
Whether running \fBbundle update \-\-source NAME\fR unlocks a gem with the 
given name\. Defaults to \fBtrue\fR\.
-.
-.IP "\(bu" 4
 \fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): 
Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be 
updated, and disallow passing no options to \fBbundle update\fR\.
 .
 .IP "\(bu" 4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-config.1.ronn 
new/lib/bundler/man/bundle-config.1.ronn
--- old/lib/bundler/man/bundle-config.1.ronn    2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-config.1.ronn    2021-07-15 17:00:51.000000000 
+0200
@@ -260,9 +260,6 @@
    The location where RubyGems installs binstubs. Defaults to `Gem.bindir`.
 * `timeout` (`BUNDLE_TIMEOUT`):
    The seconds allowed before timing out for network requests. Defaults to 
`10`.
-* `unlock_source_unlocks_spec` (`BUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC`):
-   Whether running `bundle update --source NAME` unlocks a gem with the given
-   name. Defaults to `true`.
 * `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`):
    Require passing `--all` to `bundle update` when everything should be 
updated,
    and disallow passing no options to `bundle update`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-doctor.1 
new/lib/bundler/man/bundle-doctor.1
--- old/lib/bundler/man/bundle-doctor.1 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-doctor.1 2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-DOCTOR" "1" "May 2021" "" ""
+.TH "BUNDLE\-DOCTOR" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-doctor\fR \- Checks the bundle for common problems
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-exec.1 
new/lib/bundler/man/bundle-exec.1
--- old/lib/bundler/man/bundle-exec.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-exec.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-EXEC" "1" "May 2021" "" ""
+.TH "BUNDLE\-EXEC" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-exec\fR \- Execute a command in the context of the bundle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-gem.1 
new/lib/bundler/man/bundle-gem.1
--- old/lib/bundler/man/bundle-gem.1    2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-gem.1    2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-GEM" "1" "May 2021" "" ""
+.TH "BUNDLE\-GEM" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-info.1 
new/lib/bundler/man/bundle-info.1
--- old/lib/bundler/man/bundle-info.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-info.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-INFO" "1" "May 2021" "" ""
+.TH "BUNDLE\-INFO" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-info\fR \- Show information for the given gem in your bundle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-init.1 
new/lib/bundler/man/bundle-init.1
--- old/lib/bundler/man/bundle-init.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-init.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-INIT" "1" "May 2021" "" ""
+.TH "BUNDLE\-INIT" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-init\fR \- Generates a Gemfile into the current working directory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-inject.1 
new/lib/bundler/man/bundle-inject.1
--- old/lib/bundler/man/bundle-inject.1 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-inject.1 2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-INJECT" "1" "May 2021" "" ""
+.TH "BUNDLE\-INJECT" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-install.1 
new/lib/bundler/man/bundle-install.1
--- old/lib/bundler/man/bundle-install.1        2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-install.1        2021-07-15 17:00:51.000000000 
+0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-INSTALL" "1" "May 2021" "" ""
+.TH "BUNDLE\-INSTALL" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-list.1 
new/lib/bundler/man/bundle-list.1
--- old/lib/bundler/man/bundle-list.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-list.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-LIST" "1" "May 2021" "" ""
+.TH "BUNDLE\-LIST" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-list\fR \- List all the gems in the bundle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-lock.1 
new/lib/bundler/man/bundle-lock.1
--- old/lib/bundler/man/bundle-lock.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-lock.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-LOCK" "1" "May 2021" "" ""
+.TH "BUNDLE\-LOCK" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-open.1 
new/lib/bundler/man/bundle-open.1
--- old/lib/bundler/man/bundle-open.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-open.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-OPEN" "1" "May 2021" "" ""
+.TH "BUNDLE\-OPEN" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-outdated.1 
new/lib/bundler/man/bundle-outdated.1
--- old/lib/bundler/man/bundle-outdated.1       2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-outdated.1       2021-07-15 17:00:51.000000000 
+0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-OUTDATED" "1" "May 2021" "" ""
+.TH "BUNDLE\-OUTDATED" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-outdated\fR \- List installed gems with newer versions available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-platform.1 
new/lib/bundler/man/bundle-platform.1
--- old/lib/bundler/man/bundle-platform.1       2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-platform.1       2021-07-15 17:00:51.000000000 
+0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-PLATFORM" "1" "May 2021" "" ""
+.TH "BUNDLE\-PLATFORM" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-platform\fR \- Displays platform compatibility information
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-pristine.1 
new/lib/bundler/man/bundle-pristine.1
--- old/lib/bundler/man/bundle-pristine.1       2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-pristine.1       2021-07-15 17:00:51.000000000 
+0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-PRISTINE" "1" "May 2021" "" ""
+.TH "BUNDLE\-PRISTINE" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-remove.1 
new/lib/bundler/man/bundle-remove.1
--- old/lib/bundler/man/bundle-remove.1 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-remove.1 2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-REMOVE" "1" "May 2021" "" ""
+.TH "BUNDLE\-REMOVE" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-remove\fR \- Removes gems from the Gemfile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-show.1 
new/lib/bundler/man/bundle-show.1
--- old/lib/bundler/man/bundle-show.1   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-show.1   2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-SHOW" "1" "May 2021" "" ""
+.TH "BUNDLE\-SHOW" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-update.1 
new/lib/bundler/man/bundle-update.1
--- old/lib/bundler/man/bundle-update.1 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-update.1 2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-UPDATE" "1" "May 2021" "" ""
+.TH "BUNDLE\-UPDATE" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-update\fR \- Update your gems to the latest available versions
@@ -79,7 +79,7 @@
 .
 .TP
 \fB\-\-conservative\fR
-Use bundle install conservative update behavior and do not allow shared 
dependencies to be updated\.
+Use bundle install conservative update behavior and do not allow indirect 
dependencies to be updated\.
 .
 .SH "UPDATING ALL GEMS"
 If you run \fBbundle update \-\-all\fR, bundler will ignore any previously 
installed gems and resolve all dependencies again based on the latest versions 
of all gems available in the sources\.
@@ -208,13 +208,13 @@
 In short, by default, when you update a gem using \fBbundle update\fR, bundler 
will update all dependencies of that gem, including those that are also 
dependencies of another gem\.
 .
 .P
-To prevent updating shared dependencies, prior to version 1\.14 the only 
option was the \fBCONSERVATIVE UPDATING\fR behavior in bundle install(1) 
\fIbundle\-install\.1\.html\fR:
+To prevent updating indirect dependencies, prior to version 1\.14 the only 
option was the \fBCONSERVATIVE UPDATING\fR behavior in bundle install(1) 
\fIbundle\-install\.1\.html\fR:
 .
 .P
 In this scenario, updating the \fBthin\fR version manually in the Gemfile(5), 
and then running bundle install(1) \fIbundle\-install\.1\.html\fR will only 
update \fBdaemons\fR and \fBeventmachine\fR, but not \fBrack\fR\. For more 
information, see the \fBCONSERVATIVE UPDATING\fR section of bundle install(1) 
\fIbundle\-install\.1\.html\fR\.
 .
 .P
-Starting with 1\.14, specifying the \fB\-\-conservative\fR option will also 
prevent shared dependencies from being updated\.
+Starting with 1\.14, specifying the \fB\-\-conservative\fR option will also 
prevent indirect dependencies from being updated\.
 .
 .SH "PATCH LEVEL OPTIONS"
 Version 1\.14 introduced 4 patch\-level options that will influence how gem 
versions are resolved\. One of the following options can be used: 
\fB\-\-patch\fR, \fB\-\-minor\fR or \fB\-\-major\fR\. \fB\-\-strict\fR can be 
added to further influence resolution\.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-update.1.ronn 
new/lib/bundler/man/bundle-update.1.ronn
--- old/lib/bundler/man/bundle-update.1.ronn    2021-06-23 15:25:56.000000000 
+0200
+++ new/lib/bundler/man/bundle-update.1.ronn    2021-07-15 17:00:51.000000000 
+0200
@@ -80,7 +80,7 @@
   Do not allow any gem to be updated past latest `--patch` | `--minor` | 
`--major`.
 
 * `--conservative`:
-  Use bundle install conservative update behavior and do not allow shared 
dependencies to be updated.
+  Use bundle install conservative update behavior and do not allow indirect 
dependencies to be updated.
 
 ## UPDATING ALL GEMS
 
@@ -195,7 +195,7 @@
 update all dependencies of that gem, including those that are also dependencies
 of another gem.
 
-To prevent updating shared dependencies, prior to version 1.14 the only option
+To prevent updating indirect dependencies, prior to version 1.14 the only 
option
 was the `CONSERVATIVE UPDATING` behavior in [bundle 
install(1)](bundle-install.1.html):
 
 In this scenario, updating the `thin` version manually in the Gemfile(5),
@@ -203,7 +203,7 @@
 but not `rack`. For more information, see the `CONSERVATIVE UPDATING` section
 of [bundle install(1)](bundle-install.1.html).
 
-Starting with 1.14, specifying the `--conservative` option will also prevent 
shared
+Starting with 1.14, specifying the `--conservative` option will also prevent 
indirect
 dependencies from being updated.
 
 ## PATCH LEVEL OPTIONS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle-viz.1 
new/lib/bundler/man/bundle-viz.1
--- old/lib/bundler/man/bundle-viz.1    2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle-viz.1    2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE\-VIZ" "1" "May 2021" "" ""
+.TH "BUNDLE\-VIZ" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/bundle.1 new/lib/bundler/man/bundle.1
--- old/lib/bundler/man/bundle.1        2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/bundle.1        2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "BUNDLE" "1" "May 2021" "" ""
+.TH "BUNDLE" "1" "June 2021" "" ""
 .
 .SH "NAME"
 \fBbundle\fR \- Ruby Dependency Management
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/man/gemfile.5 
new/lib/bundler/man/gemfile.5
--- old/lib/bundler/man/gemfile.5       2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/man/gemfile.5       2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 .\" generated with Ronn/v0.7.3
 .\" http://github.com/rtomayko/ronn/tree/0.7.3
 .
-.TH "GEMFILE" "5" "May 2021" "" ""
+.TH "GEMFILE" "5" "June 2021" "" ""
 .
 .SH "NAME"
 \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/plugin/index.rb 
new/lib/bundler/plugin/index.rb
--- old/lib/bundler/plugin/index.rb     2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/plugin/index.rb     2021-07-15 17:00:51.000000000 +0200
@@ -74,7 +74,10 @@
       def unregister_plugin(name)
         @commands.delete_if {|_, v| v == name }
         @sources.delete_if {|_, v| v == name }
-        @hooks.each {|_, plugin_names| plugin_names.delete(name) }
+        @hooks.each do |hook, names|
+          names.delete(name)
+          @hooks.delete(hook) if names.empty?
+        end
         @plugin_paths.delete(name)
         @load_paths.delete(name)
         save_index
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/plugin/installer.rb 
new/lib/bundler/plugin/installer.rb
--- old/lib/bundler/plugin/installer.rb 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/plugin/installer.rb 2021-07-15 17:00:51.000000000 +0200
@@ -77,7 +77,7 @@
         source_list = SourceList.new
 
         source_list.add_git_source(git_source_options) if git_source_options
-        source_list.global_rubygems_source = rubygems_source if rubygems_source
+        Array(rubygems_source).each {|remote| 
source_list.add_global_rubygems_remote(remote) } if rubygems_source
 
         deps = names.map {|name| Dependency.new name, version }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/plugin.rb new/lib/bundler/plugin.rb
--- old/lib/bundler/plugin.rb   2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/plugin.rb   2021-07-15 17:00:51.000000000 +0200
@@ -309,6 +309,8 @@
     #
     # @param [String] name of the plugin
     def load_plugin(name)
+      return unless name && !name.empty?
+
       # Need to ensure before this that plugin root where the rest of gems
       # are installed to be on load path to support plugin deps. Currently not
       # done to avoid conflicts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/resolver.rb new/lib/bundler/resolver.rb
--- old/lib/bundler/resolver.rb 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/resolver.rb 2021-07-15 17:00:51.000000000 +0200
@@ -21,7 +21,7 @@
       base = SpecSet.new(base) unless base.is_a?(SpecSet)
       resolver = new(source_requirements, base, gem_version_promoter, 
additional_base_requirements, platforms)
       result = resolver.start(requirements)
-      SpecSet.new(result).for(requirements.reject{|dep| 
dep.name.end_with?("\0") })
+      SpecSet.new(SpecSet.new(result).for(requirements.reject{|dep| 
dep.name.end_with?("\0") }))
     end
 
     def initialize(source_requirements, base, gem_version_promoter, 
additional_base_requirements, platforms)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/rubygems_ext.rb 
new/lib/bundler/rubygems_ext.rb
--- old/lib/bundler/rubygems_ext.rb     2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/rubygems_ext.rb     2021-07-15 17:00:51.000000000 +0200
@@ -174,20 +174,36 @@
     end
   end
 
+  require "rubygems/platform"
+
   class Platform
     JAVA  = Gem::Platform.new("java") unless defined?(JAVA)
     MSWIN = Gem::Platform.new("mswin32") unless defined?(MSWIN)
     MSWIN64 = Gem::Platform.new("mswin64") unless defined?(MSWIN64)
     MINGW = Gem::Platform.new("x86-mingw32") unless defined?(MINGW)
     X64_MINGW = Gem::Platform.new("x64-mingw32") unless defined?(X64_MINGW)
+  end
 
-    undef_method :hash if method_defined? :hash
-    def hash
-      @cpu.hash ^ @os.hash ^ @version.hash
-    end
+  Platform.singleton_class.module_eval do
+    unless Platform.singleton_methods.include?(:match_spec?)
+      def match_spec?(spec)
+        match_gem?(spec.platform, spec.name)
+      end
 
-    undef_method :eql? if method_defined? :eql?
-    alias_method :eql?, :==
+      def match_gem?(platform, gem_name)
+        match_platforms?(platform, Gem.platforms)
+      end
+
+      private
+
+      def match_platforms?(platform, platforms)
+        platforms.any? do |local_platform|
+          platform.nil? ||
+            local_platform == platform ||
+            (local_platform != Gem::Platform::RUBY && local_platform =~ 
platform)
+        end
+      end
+    end
   end
 
   require "rubygems/util"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/runtime.rb new/lib/bundler/runtime.rb
--- old/lib/bundler/runtime.rb  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/runtime.rb  2021-07-15 17:00:51.000000000 +0200
@@ -12,12 +12,10 @@
     def setup(*groups)
       @definition.ensure_equivalent_gemfile_and_lockfile if 
Bundler.frozen_bundle?
 
-      groups.map!(&:to_sym)
-
       # Has to happen first
       clean_load_path
 
-      specs = groups.any? ? @definition.specs_for(groups) : requested_specs
+      specs = @definition.specs_for(groups)
 
       SharedHelpers.set_bundle_environment
       Bundler.rubygems.replace_entrypoints(specs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/settings.rb new/lib/bundler/settings.rb
--- old/lib/bundler/settings.rb 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/settings.rb 2021-07-15 17:00:51.000000000 +0200
@@ -44,7 +44,6 @@
       silence_deprecations
       silence_root_warning
       suppress_install_using_messages
-      unlock_source_unlocks_spec
       update_requires_all_flag
       use_gem_version_promoter_for_major_updates
     ].freeze
@@ -429,12 +428,8 @@
     def global_config_file
       if ENV["BUNDLE_CONFIG"] && !ENV["BUNDLE_CONFIG"].empty?
         Pathname.new(ENV["BUNDLE_CONFIG"])
-      else
-        begin
-          Bundler.user_bundle_path("config")
-        rescue PermissionError, GenericSystemCallError
-          nil
-        end
+      elsif Bundler.rubygems.user_home && !Bundler.rubygems.user_home.empty?
+        Pathname.new(Bundler.rubygems.user_home).join(".bundle/config")
       end
     end
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/source/rubygems.rb 
new/lib/bundler/source/rubygems.rb
--- old/lib/bundler/source/rubygems.rb  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/source/rubygems.rb  2021-07-15 17:00:51.000000000 +0200
@@ -73,7 +73,7 @@
 
       def can_lock?(spec)
         return super unless multiple_remotes?
-        spec.source.is_a?(Rubygems)
+        include?(spec.source)
       end
 
       def options
@@ -252,19 +252,6 @@
         other_remotes.map(&method(:remove_auth)) == 
@remotes.map(&method(:remove_auth))
       end
 
-      def replace_remotes(other_remotes, allow_equivalent = false)
-        return false if other_remotes == @remotes
-
-        equivalent = allow_equivalent && equivalent_remotes?(other_remotes)
-
-        @remotes = []
-        other_remotes.reverse_each do |r|
-          add_remote r.to_s
-        end
-
-        !equivalent
-      end
-
       def spec_names
         if @allow_remote && dependency_api_available?
           remote_specs.spec_names
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/source_list.rb 
new/lib/bundler/source_list.rb
--- old/lib/bundler/source_list.rb      2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/source_list.rb      2021-07-15 17:00:51.000000000 +0200
@@ -28,8 +28,9 @@
       @merged_gem_lockfile_sections
     end
 
-    def merged_gem_lockfile_sections!
+    def merged_gem_lockfile_sections!(replacement_source)
       @merged_gem_lockfile_sections = true
+      @global_rubygems_source = replacement_source
     end
 
     def aggregate_global_source?
@@ -53,18 +54,17 @@
     end
 
     def add_rubygems_source(options = {})
-      add_source_to_list Source::Rubygems.new(options), @rubygems_sources
+      new_source = Source::Rubygems.new(options)
+      return @global_rubygems_source if @global_rubygems_source == new_source
+
+      add_source_to_list new_source, @rubygems_sources
     end
 
     def add_plugin_source(source, options = {})
       add_source_to_list Plugin.source(source).new(options), @plugin_sources
     end
 
-    def global_rubygems_source=(uri)
-      @global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => 
uri, "allow_local" => true)
-    end
-
-    def add_rubygems_remote(uri)
+    def add_global_rubygems_remote(uri)
       global_rubygems_source.add_remote(uri)
       global_rubygems_source
     end
@@ -109,27 +109,26 @@
       if merged_gem_lockfile_sections?
         [combine_rubygems_sources]
       else
-        rubygems_sources.sort_by(&:to_s).uniq
+        rubygems_sources.sort_by(&:to_s)
       end
     end
 
     # Returns true if there are changes
     def replace_sources!(replacement_sources)
-      return true if replacement_sources.empty?
+      return false if replacement_sources.empty?
 
-      [path_sources, git_sources, plugin_sources].each do |source_list|
-        source_list.map! do |source|
-          replacement_sources.find {|s| s == source } || source
-        end
-      end
+      @path_sources, @git_sources, @plugin_sources = 
map_sources(replacement_sources)
+
+      different_sources?(lock_sources, replacement_sources)
+    end
 
-      replacement_rubygems = merged_gem_lockfile_sections? &&
-        replacement_sources.detect {|s| s.is_a?(Source::Rubygems) }
-      @global_rubygems_source = replacement_rubygems if replacement_rubygems
+    # Returns true if there are changes
+    def expired_sources?(replacement_sources)
+      return false if replacement_sources.empty?
 
-      return true if !equal_sources?(lock_sources, replacement_sources) && 
!equivalent_sources?(lock_sources, replacement_sources)
+      lock_sources = 
dup_with_replaced_sources(replacement_sources).lock_sources
 
-      false
+      different_sources?(lock_sources, replacement_sources)
     end
 
     def local_only!
@@ -146,6 +145,24 @@
 
     private
 
+    def dup_with_replaced_sources(replacement_sources)
+      new_source_list = dup
+      new_source_list.replace_sources!(replacement_sources)
+      new_source_list
+    end
+
+    def map_sources(replacement_sources)
+      [path_sources, git_sources, plugin_sources].map do |sources|
+        sources.map do |source|
+          replacement_sources.find {|s| s == source } || source
+        end
+      end
+    end
+
+    def different_sources?(lock_sources, replacement_sources)
+      !equal_sources?(lock_sources, replacement_sources) && 
!equivalent_sources?(lock_sources, replacement_sources)
+    end
+
     def rubygems_aggregate_class
       Source::Rubygems
     end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/spec_set.rb new/lib/bundler/spec_set.rb
--- old/lib/bundler/spec_set.rb 2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/spec_set.rb 2021-07-15 17:00:51.000000000 +0200
@@ -11,15 +11,14 @@
       @specs = specs
     end
 
-    def for(dependencies, skip = [], check = false, match_current_platform = 
false, raise_on_missing = true)
+    def for(dependencies, check = false, match_current_platform = false, 
raise_on_missing = true)
       handled = []
       deps = dependencies.dup
       specs = []
-      skip += ["bundler"]
 
       loop do
         break unless dep = deps.shift
-        next if handled.include?(dep) || skip.include?(dep.name)
+        next if handled.any?{|d| d.name == dep.name && (match_current_platform 
|| d.__platform == dep.__platform) } || dep.name == "bundler"
 
         handled << dep
 
@@ -46,11 +45,7 @@
         specs << spec
       end
 
-      check ? true : SpecSet.new(specs)
-    end
-
-    def valid_for?(deps)
-      self.for(deps, [], true)
+      check ? true : specs
     end
 
     def [](key)
@@ -77,7 +72,7 @@
     end
 
     def materialize(deps, missing_specs = nil)
-      materialized = self.for(deps, [], false, true, !missing_specs).to_a
+      materialized = self.for(deps, false, true, !missing_specs)
 
       materialized.group_by(&:source).each do |source, specs|
         next unless specs.any?{|s| s.is_a?(LazySpecification) }
@@ -199,7 +194,7 @@
     def spec_for_dependency(dep, match_current_platform)
       specs_for_platforms = lookup[dep.name]
       if match_current_platform
-        GemHelpers.select_best_platform_match(specs_for_platforms, 
Bundler.local_platform)
+        GemHelpers.select_best_platform_match(specs_for_platforms.select{|s| 
Gem::Platform.match_spec?(s) }, Bundler.local_platform)
       else
         GemHelpers.select_best_platform_match(specs_for_platforms, 
dep.__platform)
       end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler/version.rb new/lib/bundler/version.rb
--- old/lib/bundler/version.rb  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler/version.rb  2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 # frozen_string_literal: false
 
 module Bundler
-  VERSION = "2.2.21".freeze
+  VERSION = "2.2.24".freeze
 
   def self.bundler_major_version
     @bundler_major_version ||= VERSION.split(".").first.to_i
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lib/bundler.rb new/lib/bundler.rb
--- old/lib/bundler.rb  2021-06-23 15:25:56.000000000 +0200
+++ new/lib/bundler.rb  2021-07-15 17:00:51.000000000 +0200
@@ -236,8 +236,9 @@
         end
 
         if warning
-          user_home = tmp_home_path(warning)
-          Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your 
home directory temporarily.\n"
+          Bundler.ui.warn "#{warning}\n"
+          user_home = tmp_home_path
+          Bundler.ui.warn "Bundler will use `#{user_home}' as your home 
directory temporarily.\n"
           user_home
         else
           Pathname.new(home)
@@ -684,15 +685,13 @@
       Bundler.rubygems.clear_paths
     end
 
-    def tmp_home_path(warning)
+    def tmp_home_path
       Kernel.send(:require, "tmpdir")
       SharedHelpers.filesystem_access(Dir.tmpdir) do
         path = Bundler.tmp
         at_exit { Bundler.rm_rf(path) }
         path
       end
-    rescue RuntimeError => e
-      raise e.exception("#{warning}\nBundler also failed to create a temporary 
home directory':\n#{e}")
     end
 
     # @param env [Hash]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata        2021-06-23 15:25:56.000000000 +0200
+++ new/metadata        2021-07-15 17:00:51.000000000 +0200
@@ -1,7 +1,7 @@
 --- !ruby/object:Gem::Specification
 name: bundler
 version: !ruby/object:Gem::Version
-  version: 2.2.21
+  version: 2.2.24
 platform: ruby
 authors:
 - Andr?? Arko
@@ -22,7 +22,7 @@
 autorequire: 
 bindir: exe
 cert_chain: []
-date: 2021-06-23 00:00:00.000000000 Z
+date: 2021-07-15 00:00:00.000000000 Z
 dependencies: []
 description: Bundler manages an application's dependencies through its entire 
life,
   across many machines, systematically and repeatably
@@ -354,7 +354,7 @@
     - !ruby/object:Gem::Version
       version: 2.5.2
 requirements: []
-rubygems_version: 3.2.21
+rubygems_version: 3.2.24
 signing_key: 
 specification_version: 4
 summary: The best way to manage your application's dependencies

Reply via email to