summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2022-05-17 11:26:18 +0900
committernagachika <nagachika@ruby-lang.org>2022-05-18 10:02:42 +0900
commitc7bbed299493d0fe5323916b83dab04021bc570f (patch)
tree168e627f795ccec74e46da2ec0b145f3f7088e7f /lib
parent14e4055ab127b37e48d07ead34dcb8ffa8874a65 (diff)
Merge RubyGems-3.3.13 and Bundler-2.3.13
Diffstat (limited to 'lib')
-rw-r--r--lib/bundler/definition.rb30
-rw-r--r--lib/bundler/endpoint_specification.rb5
-rw-r--r--lib/bundler/version.rb2
-rw-r--r--lib/rubygems.rb4
-rw-r--r--lib/rubygems/commands/owner_command.rb11
5 files changed, 32 insertions, 20 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index 21949bc85c..d862877c2e 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -87,10 +87,11 @@ module Bundler
@platforms = @locked_platforms.dup
@locked_bundler_version = @locked_gems.bundler_version
@locked_ruby_version = @locked_gems.ruby_version
+ @originally_locked_specs = SpecSet.new(@locked_gems.specs)
if unlock != true
@locked_deps = @locked_gems.dependencies
- @locked_specs = SpecSet.new(@locked_gems.specs)
+ @locked_specs = @originally_locked_specs
@locked_sources = @locked_gems.sources
else
@unlock = {}
@@ -255,14 +256,14 @@ module Bundler
# @return [SpecSet] resolved dependencies
def resolve
@resolve ||= begin
- last_resolve = converge_locked_specs
if Bundler.frozen_bundle?
Bundler.ui.debug "Frozen, using resolution from the lockfile"
- last_resolve
+ @locked_specs
elsif !unlocking? && nothing_changed?
Bundler.ui.debug("Found no changes, using resolution from the lockfile")
- last_resolve
+ SpecSet.new(filter_specs(@locked_specs, @dependencies.select{|dep| @locked_specs[dep].any? }))
else
+ last_resolve = converge_locked_specs
# Run a resolve against the locally available gems
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, true)
@@ -464,6 +465,10 @@ module Bundler
private
+ def filter_specs(specs, deps)
+ SpecSet.new(specs).for(expand_dependencies(deps, true), false, false)
+ end
+
def materialize(dependencies)
specs = resolve.materialize(dependencies)
missing_specs = specs.missing_specs
@@ -679,17 +684,17 @@ module Bundler
end
def converge_specs(specs)
- deps = []
converged = []
+
+ deps = @dependencies.select do |dep|
+ specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
+ end
+
specs.each do |s|
# Replace the locked dependency's source with the equivalent source from the Gemfile
dep = @dependencies.find {|d| s.satisfies?(d) }
- if dep && (!dep.source || s.source.include?(dep.source))
- deps << dep
- end
-
- s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source unless Bundler.frozen_bundle?
+ s.source = (dep && dep.source) || sources.get(s.source) || sources.default_source
next if @unlock[:sources].include?(s.source.name)
@@ -726,8 +731,7 @@ module Bundler
end
end
- resolve = SpecSet.new(converged)
- SpecSet.new(resolve.for(expand_dependencies(deps, true), false, false).reject{|s| @unlock[:gems].include?(s.name) })
+ SpecSet.new(filter_specs(converged, deps).reject{|s| @unlock[:gems].include?(s.name) })
end
def metadata_dependencies
@@ -804,7 +808,7 @@ module Bundler
def additional_base_requirements_for_resolve
return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
- converge_specs(@locked_gems.specs).map do |locked_spec|
+ converge_specs(@originally_locked_specs).map do |locked_spec|
name = locked_spec.name
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
DepProxy.get_proxy(dep, locked_spec.platform)
diff --git a/lib/bundler/endpoint_specification.rb b/lib/bundler/endpoint_specification.rb
index f3260a38e6..e9aa366b41 100644
--- a/lib/bundler/endpoint_specification.rb
+++ b/lib/bundler/endpoint_specification.rb
@@ -26,8 +26,11 @@ module Bundler
@required_ruby_version ||= _remote_specification.required_ruby_version
end
+ # A fallback is included because the original version of the specification
+ # API didn't include that field, so some marshalled specs in the index have it
+ # set to +nil+.
def required_rubygems_version
- @required_rubygems_version ||= _remote_specification.required_rubygems_version
+ @required_rubygems_version ||= _remote_specification.required_rubygems_version || Gem::Requirement.default
end
def fetch_platform
diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb
index 8c645c7a49..aa9c29199d 100644
--- a/lib/bundler/version.rb
+++ b/lib/bundler/version.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: false
module Bundler
- VERSION = "2.3.12".freeze
+ VERSION = "2.3.13".freeze
def self.bundler_major_version
@bundler_major_version ||= VERSION.split(".").first.to_i
diff --git a/lib/rubygems.rb b/lib/rubygems.rb
index 419b6e54b7..2cbb6a2410 100644
--- a/lib/rubygems.rb
+++ b/lib/rubygems.rb
@@ -8,7 +8,7 @@
require 'rbconfig'
module Gem
- VERSION = "3.3.12".freeze
+ VERSION = "3.3.13".freeze
end
# Must be first since it unloads the prelude from 1.9.2
@@ -864,7 +864,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
return @ruby_version if defined? @ruby_version
version = RUBY_VERSION.dup
- if defined?(RUBY_DESCRIPTION)
+ unless defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
if RUBY_ENGINE == "ruby"
desc = RUBY_DESCRIPTION[/\Aruby #{Regexp.quote(RUBY_VERSION)}([^ ]+) /, 1]
else
diff --git a/lib/rubygems/commands/owner_command.rb b/lib/rubygems/commands/owner_command.rb
index 0a5665228f..42b0d79135 100644
--- a/lib/rubygems/commands/owner_command.rb
+++ b/lib/rubygems/commands/owner_command.rb
@@ -12,7 +12,12 @@ class Gem::Commands::OwnerCommand < Gem::Command
def description # :nodoc:
<<-EOF
The owner command lets you add and remove owners of a gem on a push
-server (the default is https://rubygems.org).
+server (the default is https://rubygems.org). Multiple owners can be
+added or removed at the same time, if the flag is given multiple times.
+
+The supported user identifiers are dependant on the push server.
+For rubygems.org, both e-mail and handle are supported, even though the
+user identifier field is called "email".
The owner of a gem has the permission to push new versions, yank existing
versions or edit the HTML page of the gem. Be careful of who you give push
@@ -35,11 +40,11 @@ permission to.
add_otp_option
defaults.merge! :add => [], :remove => []
- add_option '-a', '--add EMAIL', 'Add an owner' do |value, options|
+ add_option '-a', '--add NEW_OWNER', 'Add an owner by user identifier' do |value, options|
options[:add] << value
end
- add_option '-r', '--remove EMAIL', 'Remove an owner' do |value, options|
+ add_option '-r', '--remove OLD_OWNER', 'Remove an owner by user identifier' do |value, options|
options[:remove] << value
end