Skip to content

Commit 33a3e16

Browse files
committed
Merge RubyGems/Bundler 4.0.10
1 parent 82cfd53 commit 33a3e16

34 files changed

Lines changed: 371 additions & 71 deletions

lib/bundler/injector.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,10 @@ def remove(gemfile_path, lockfile_path)
8080
def conservative_version(spec)
8181
version = spec.version
8282
return ">= 0" if version.nil?
83-
segments = version.segments
8483
seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2
8584

8685
prerelease_suffix = version.to_s.delete_prefix(version.release.to_s) if version.prerelease?
87-
"#{version_prefix}#{segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
86+
"#{version_prefix}#{version.segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
8887
end
8988

9089
def version_prefix

lib/bundler/resolver.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,27 @@ def raise_not_found!(package)
353353
message << "\n#{other_specs_matching_message(specs, matching_part)}"
354354
end
355355

356+
if specs_matching_requirement.any? && (hint = platform_mismatch_hint)
357+
message << "\n\n#{hint}"
358+
end
359+
356360
raise GemNotFound, message
357361
end
358362

363+
def platform_mismatch_hint
364+
locked_platforms = Bundler.locked_gems&.platforms
365+
return unless locked_platforms
366+
367+
local_platform = Bundler.local_platform
368+
return if locked_platforms.include?(local_platform)
369+
return if locked_platforms.any? {|p| p == Gem::Platform::RUBY }
370+
371+
"Your current platform (#{local_platform}) is not included in the lockfile's platforms (#{locked_platforms.join(", ")}). " \
372+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
373+
rescue GemfileNotFound
374+
nil
375+
end
376+
359377
def filtered_versions_for(package)
360378
@gem_version_promoter.filter_versions(package, @all_versions[package])
361379
end

lib/bundler/resolver/strategy.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ class Resolver
55
class Strategy
66
def initialize(source)
77
@source = source
8+
@package_priority_cache = {}
89
end
910

1011
def next_package_and_version(unsatisfied)
@@ -17,10 +18,12 @@ def next_package_and_version(unsatisfied)
1718

1819
def next_term_to_try_from(unsatisfied)
1920
unsatisfied.min_by do |package, range|
20-
matching_versions = @source.versions_for(package, range)
21-
higher_versions = @source.versions_for(package, range.upper_invert)
21+
@package_priority_cache[[package, range]] ||= begin
22+
matching_versions = @source.versions_for(package, range)
23+
higher_versions = @source.versions_for(package, range.upper_invert)
2224

23-
[matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
25+
[matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
26+
end
2427
end
2528
end
2629

lib/bundler/settings.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class Settings
5959
bin
6060
cache_path
6161
console
62+
default_cli_command
6263
gem.ci
6364
gem.github_username
6465
gem.linter

lib/bundler/settings/validator.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,13 @@ def self.validate!(key, value, settings)
7474
fail!(key, value, "`#{other_key}` is current set to #{other_setting.inspect}", "the `#{conflicting.join("`, `")}` groups conflict")
7575
end
7676
end
77+
78+
rule %w[default_cli_command], "default_cli_command must be either 'install' or 'cli_help'" do |key, value, _settings|
79+
valid_values = %w[install cli_help]
80+
if !value.nil? && !valid_values.include?(value.to_s)
81+
fail!(key, value, "must be one of: #{valid_values.join(", ")}")
82+
end
83+
end
7784
end
7885
end
7986
end

lib/bundler/stub_specification.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def manually_installed?
5252

5353
# This is defined directly to avoid having to loading the full spec
5454
def missing_extensions?
55+
return false if RUBY_ENGINE == "jruby"
5556
return false if default_gem?
5657
return false if extensions.empty?
5758
return false if File.exist? gem_build_complete_path

lib/bundler/templates/newgem/newgem.gemspec.tt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ Gem::Specification.new do |spec|
4040

4141
# Uncomment to register a new dependency of your gem
4242
# spec.add_dependency "example-gem", "~> 1.0"
43+
<%- if config[:ext] == 'rust' -%>
44+
spec.add_dependency "rb_sys", "~> 0.9.91"
45+
<%- end -%>
4346
<%- if config[:ext] == 'go' -%>
4447
spec.add_dependency "go_gem", "~> 0.2"
4548
<%- end -%>

lib/bundler/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: false
22

33
module Bundler
4-
VERSION = "4.0.9".freeze
4+
VERSION = "4.0.10".freeze
55

66
def self.bundler_major_version
77
@bundler_major_version ||= gem_version.segments.first

lib/rubygems.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
require "rbconfig"
1010

1111
module Gem
12-
VERSION = "4.0.9"
12+
VERSION = "4.0.10"
1313
end
1414

1515
require_relative "rubygems/defaults"
@@ -192,8 +192,9 @@ def self.try_activate(path)
192192
begin
193193
spec.activate
194194
rescue Gem::LoadError => e # this could fail due to gem dep collisions, go lax
195+
name = spec.name
195196
spec = Gem::Specification.find_unloaded_by_path(path)
196-
spec ||= Gem::Specification.find_by_name(spec.name)
197+
spec ||= Gem::Specification.find_by_name(name)
197198
if spec.nil?
198199
raise e
199200
else
@@ -1284,10 +1285,17 @@ def register_default_spec(spec)
12841285
prefix_pattern = /^(#{prefix_group})/
12851286
end
12861287

1288+
native_extension_suffixes = Gem.dynamic_library_suffixes.reject(&:empty?)
1289+
12871290
spec.files.each do |file|
12881291
if new_format
12891292
file = file.sub(prefix_pattern, "")
1290-
next unless $~
1293+
unless $~
1294+
# Also register native extension files (e.g. date_core.bundle)
1295+
# that are listed without require path prefix in the gemspec
1296+
next if file.include?("/")
1297+
next unless file.end_with?(*native_extension_suffixes)
1298+
end
12911299
end
12921300

12931301
spec.activate if already_loaded?(file)

lib/rubygems/commands/pristine_command.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ def execute
132132
specs = specs.select {|spec| spec.platform == RUBY_ENGINE || Gem::Platform.local === spec.platform || spec.platform == Gem::Platform::RUBY }
133133

134134
if specs.to_a.empty?
135+
if options[:only_missing_extensions]
136+
say "No gems with missing extensions to restore"
137+
return
138+
end
139+
135140
raise Gem::Exception,
136141
"Failed to find gems #{options[:args]} #{options[:version]}"
137142
end

0 commit comments

Comments
 (0)