rubygems-update 3.3.21 → 3.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Manifest.txt +7 -0
  4. data/bundler/CHANGELOG.md +22 -0
  5. data/bundler/bundler.gemspec +6 -8
  6. data/bundler/lib/bundler/build_metadata.rb +2 -2
  7. data/bundler/lib/bundler/cli.rb +2 -1
  8. data/bundler/lib/bundler/current_ruby.rb +14 -5
  9. data/bundler/lib/bundler/definition.rb +5 -8
  10. data/bundler/lib/bundler/dependency.rb +18 -85
  11. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  12. data/bundler/lib/bundler/feature_flag.rb +0 -1
  13. data/bundler/lib/bundler/gem_version_promoter.rb +4 -18
  14. data/bundler/lib/bundler/injector.rb +2 -1
  15. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  16. data/bundler/lib/bundler/man/bundle-add.1 +6 -2
  17. data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
  18. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  19. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  20. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  21. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  22. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  24. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  25. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  29. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  30. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  34. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  35. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  45. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  46. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle.1 +6 -2
  48. data/bundler/lib/bundler/man/bundle.1.ronn +4 -1
  49. data/bundler/lib/bundler/man/gemfile.5 +8 -38
  50. data/bundler/lib/bundler/man/gemfile.5.ronn +9 -27
  51. data/bundler/lib/bundler/man/index.txt +3 -0
  52. data/bundler/lib/bundler/match_remote_metadata.rb +4 -1
  53. data/bundler/lib/bundler/resolver/base.rb +50 -0
  54. data/bundler/lib/bundler/resolver.rb +67 -84
  55. data/bundler/lib/bundler/rubygems_ext.rb +13 -3
  56. data/bundler/lib/bundler/settings.rb +0 -1
  57. data/bundler/lib/bundler/spec_set.rb +10 -0
  58. data/bundler/lib/bundler/version.rb +1 -1
  59. data/lib/rubygems/platform.rb +1 -1
  60. data/lib/rubygems/query_utils.rb +2 -2
  61. data/lib/rubygems.rb +1 -1
  62. data/rubygems-update.gemspec +1 -1
  63. data/test/rubygems/helper.rb +0 -2
  64. data/test/rubygems/test_gem_commands_info_command.rb +26 -0
  65. data/test/rubygems/test_gem_platform.rb +32 -0
  66. metadata +10 -3
@@ -3,12 +3,11 @@
3
3
  module Bundler
4
4
  class Resolver
5
5
  require_relative "vendored_molinillo"
6
+ require_relative "resolver/base"
6
7
  require_relative "resolver/spec_group"
7
8
 
8
9
  include GemHelpers
9
10
 
10
- attr_writer :platforms
11
-
12
11
  # Figures out the best possible configuration of gems that satisfies
13
12
  # the list of passed dependencies and any child dependencies without
14
13
  # causing any gem activation errors.
@@ -27,15 +26,13 @@ module Bundler
27
26
 
28
27
  def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
29
28
  @source_requirements = source_requirements
30
- @base = base
29
+ @base = Resolver::Base.new(base, additional_base_requirements)
31
30
  @resolver = Molinillo::Resolver.new(self, self)
32
31
  @results_for = {}
33
32
  @search_for = {}
34
- @additional_base_requirements = additional_base_requirements
35
33
  @platforms = platforms
36
34
  @resolving_only_for_ruby = platforms == [Gem::Platform::RUBY]
37
35
  @gem_version_promoter = gem_version_promoter
38
- @use_gvp = Bundler.feature_flag.use_gem_version_promoter_for_major_updates? || !@gem_version_promoter.major?
39
36
  end
40
37
 
41
38
  def start(requirements, exclude_specs: [])
@@ -45,18 +42,11 @@ module Bundler
45
42
  remove_from_candidates(spec)
46
43
  end
47
44
 
48
- @base_dg = Molinillo::DependencyGraph.new
49
- @base.each do |ls|
50
- dep = Dependency.new(ls.name, ls.version)
51
- @base_dg.add_vertex(ls.name, DepProxy.get_proxy(dep, ls.platform), true)
52
- end
53
- @additional_base_requirements.each {|d| @base_dg.add_vertex(d.name, d) }
54
-
55
45
  @gem_version_promoter.prerelease_specified = @prerelease_specified = {}
56
46
  requirements.each {|dep| @prerelease_specified[dep.name] ||= dep.prerelease? }
57
47
 
58
48
  verify_gemfile_dependencies_are_found!(requirements)
59
- result = @resolver.resolve(requirements, @base_dg).
49
+ result = @resolver.resolve(requirements).
60
50
  map(&:payload).
61
51
  reject {|sg| sg.name.end_with?("\0") }.
62
52
  map(&:to_specs).
@@ -64,8 +54,20 @@ module Bundler
64
54
 
65
55
  SpecSet.new(SpecSet.new(result).for(regular_requirements, false, @platforms))
66
56
  rescue Molinillo::VersionConflict => e
57
+ conflicts = e.conflicts
58
+
59
+ deps_to_unlock = conflicts.values.inject([]) do |deps, conflict|
60
+ deps |= conflict.requirement_trees.flatten.map {|req| base_requirements[req.name] }.compact
61
+ end
62
+
63
+ if deps_to_unlock.any?
64
+ @base.unlock_deps(deps_to_unlock)
65
+ reset_spec_cache
66
+ retry
67
+ end
68
+
67
69
  message = version_conflict_message(e)
68
- raise VersionConflict.new(e.conflicts.keys.uniq, message)
70
+ raise VersionConflict.new(conflicts.keys.uniq, message)
69
71
  rescue Molinillo::CircularDependencyError => e
70
72
  names = e.dependencies.sort_by(&:name).map {|d| "gem '#{d.name}'" }
71
73
  raise CyclicDependencyError, "Your bundle requires gems that depend" \
@@ -120,31 +122,22 @@ module Bundler
120
122
  dependency = dependency_proxy.dep
121
123
  name = dependency.name
122
124
  @search_for[dependency_proxy] ||= begin
123
- results = results_for(dependency) + @base[name].select {|spec| requirement_satisfied_by?(dependency, nil, spec) }
124
-
125
- if vertex = @base_dg.vertex_named(name)
126
- locked_requirement = vertex.payload.requirement
127
- end
125
+ locked_results = @base[name].select {|spec| requirement_satisfied_by?(dependency, nil, spec) }
126
+ locked_requirement = base_requirements[name]
127
+ results = results_for(dependency) + locked_results
128
+ results = results.select {|spec| requirement_satisfied_by?(locked_requirement, nil, spec) } if locked_requirement
128
129
 
129
- if !@prerelease_specified[name] && (!@use_gvp || locked_requirement.nil?)
130
+ if !@prerelease_specified[name] && locked_results.empty?
130
131
  # Move prereleases to the beginning of the list, so they're considered
131
132
  # last during resolution.
132
133
  pre, results = results.partition {|spec| spec.version.prerelease? }
133
134
  results = pre + results
134
135
  end
135
136
 
136
- spec_groups = if results.any?
137
- nested = []
138
- results.each do |spec|
139
- version, specs = nested.last
140
- if version == spec.version
141
- specs << spec
142
- else
143
- nested << [spec.version, [spec]]
144
- end
145
- end
146
- nested.reduce([]) do |groups, (version, specs)|
147
- next groups if locked_requirement && !locked_requirement.satisfied_by?(version)
137
+ if results.any?
138
+ results = @gem_version_promoter.sort_versions(dependency, results)
139
+
140
+ results.group_by(&:version).reduce([]) do |groups, (_, specs)|
148
141
  next groups unless specs.any? {|spec| spec.match_platform(platform) }
149
142
 
150
143
  specs_by_platform = Hash.new do |current_specs, current_platform|
@@ -167,13 +160,6 @@ module Bundler
167
160
  else
168
161
  []
169
162
  end
170
- # GVP handles major itself, but it's still a bit risky to trust it with it
171
- # until we get it settled with new behavior. For 2.x it can take over all cases.
172
- if !@use_gvp
173
- spec_groups
174
- else
175
- @gem_version_promoter.sort_versions(dependency, spec_groups)
176
- end
177
163
  end
178
164
  end
179
165
 
@@ -199,12 +185,6 @@ module Bundler
199
185
  "Gemfile"
200
186
  end
201
187
 
202
- def name_for_locking_dependency_source
203
- Bundler.default_lockfile.basename.to_s
204
- rescue StandardError
205
- "Gemfile.lock"
206
- end
207
-
208
188
  def requirement_satisfied_by?(requirement, activated, spec)
209
189
  requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
210
190
  end
@@ -218,7 +198,7 @@ module Bundler
218
198
  name = name_for(dependency)
219
199
  vertex = activated.vertex_named(name)
220
200
  [
221
- @base_dg.vertex_named(name) ? 0 : 1,
201
+ @base[name].any? ? 0 : 1,
222
202
  vertex.payload ? 0 : 1,
223
203
  vertex.root? ? 0 : 1,
224
204
  amount_constrained(dependency),
@@ -237,9 +217,12 @@ module Bundler
237
217
 
238
218
  private
239
219
 
220
+ def base_requirements
221
+ @base.base_requirements
222
+ end
223
+
240
224
  def remove_from_candidates(spec)
241
225
  @base.delete(spec)
242
- @gem_version_promoter.reset
243
226
 
244
227
  @results_for.keys.each do |dep|
245
228
  next unless dep.name == spec.name
@@ -247,7 +230,12 @@ module Bundler
247
230
  @results_for[dep].reject {|s| s.name == spec.name && s.version == spec.version }
248
231
  end
249
232
 
233
+ reset_spec_cache
234
+ end
235
+
236
+ def reset_spec_cache
250
237
  @search_for = {}
238
+ @gem_version_promoter.reset
251
239
  end
252
240
 
253
241
  # returns an integer \in (-\infty, 0]
@@ -339,18 +327,6 @@ module Bundler
339
327
 
340
328
  e.message_with_trees(
341
329
  :full_message_for_conflict => lambda do |name, conflict|
342
- o = if name.end_with?("\0")
343
- String.new("Bundler found conflicting requirements for the #{name} version:")
344
- else
345
- String.new("Bundler could not find compatible versions for gem \"#{name}\":")
346
- end
347
- o << %(\n)
348
- if conflict.locked_requirement
349
- o << %( In snapshot (#{name_for_locking_dependency_source}):\n)
350
- o << %( #{SharedHelpers.pretty_dependency(conflict.locked_requirement)}\n)
351
- o << %(\n)
352
- end
353
- o << %( In #{name_for_explicit_dependency_source}:\n)
354
330
  trees = conflict.requirement_trees
355
331
 
356
332
  # called first, because we want to reduce the amount of work required to find maximal empty sets
@@ -369,30 +345,41 @@ module Bundler
369
345
  trees.sort_by! {|t| t.reverse.map(&:name) }
370
346
  end
371
347
 
372
- o << trees.map do |tree|
373
- t = "".dup
374
- depth = 2
348
+ if trees.size > 1 || name == "bundler"
349
+ o = if name.end_with?("\0")
350
+ String.new("Bundler found conflicting requirements for the #{name} version:")
351
+ else
352
+ String.new("Bundler could not find compatible versions for gem \"#{name}\":")
353
+ end
354
+ o << %(\n)
355
+ o << %( In #{name_for_explicit_dependency_source}:\n)
356
+ o << trees.map do |tree|
357
+ t = "".dup
358
+ depth = 2
375
359
 
376
- base_tree = tree.first
377
- base_tree_name = base_tree.name
360
+ base_tree = tree.first
361
+ base_tree_name = base_tree.name
378
362
 
379
- if base_tree_name.end_with?("\0")
380
- t = nil
381
- else
382
- tree.each do |req|
383
- t << " " * depth << SharedHelpers.pretty_dependency(req)
384
- unless tree.last == req
385
- if spec = conflict.activated_by_name[req.name]
386
- t << %( was resolved to #{spec.version}, which)
363
+ if base_tree_name.end_with?("\0")
364
+ t = nil
365
+ else
366
+ tree.each do |req|
367
+ t << " " * depth << SharedHelpers.pretty_dependency(req)
368
+ unless tree.last == req
369
+ if spec = conflict.activated_by_name[req.name]
370
+ t << %( was resolved to #{spec.version}, which)
371
+ end
372
+ t << %( depends on)
387
373
  end
388
- t << %( depends on)
374
+ t << %(\n)
375
+ depth += 1
389
376
  end
390
- t << %(\n)
391
- depth += 1
392
377
  end
393
- end
394
- t
395
- end.compact.join("\n")
378
+ t
379
+ end.compact.join("\n")
380
+ else
381
+ o = String.new
382
+ end
396
383
 
397
384
  if name == "bundler"
398
385
  o << %(\n Current Bundler version:\n bundler (#{Bundler::VERSION}))
@@ -416,17 +403,13 @@ module Bundler
416
403
  end
417
404
  elsif name.end_with?("\0")
418
405
  o << %(\n Current #{name} version:\n #{SharedHelpers.pretty_dependency(@metadata_requirements.find {|req| req.name == name })}\n\n)
419
- elsif conflict.locked_requirement
420
- o << "\n"
421
- o << %(Deleting your #{name_for_locking_dependency_source} file and running `bundle install` will rebuild your snapshot from scratch, using only\n)
422
- o << %(the gems in your Gemfile, which may resolve the conflict.\n)
423
406
  elsif !conflict.existing
424
407
  o << "\n"
425
408
 
426
409
  relevant_source = conflict.requirement.source || source_for(name)
427
410
 
428
- extra_message = if conflict.requirement_trees.first.size > 1
429
- ", which is required by gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
411
+ extra_message = if trees.first.size > 1
412
+ ", which is required by gem '#{SharedHelpers.pretty_dependency(trees.first[-2])}',"
430
413
  else
431
414
  ""
432
415
  end
@@ -237,8 +237,11 @@ module Gem
237
237
  MINGW = Gem::Platform.new("x86-mingw32")
238
238
  X64_MINGW = [Gem::Platform.new("x64-mingw32"),
239
239
  Gem::Platform.new("x64-mingw-ucrt")].freeze
240
+ WINDOWS = [MSWIN, MSWIN64, MINGW, X64_MINGW].flatten.freeze
241
+ X64_LINUX = Gem::Platform.new("x86_64-linux")
242
+ X64_LINUX_MUSL = Gem::Platform.new("x86_64-linux-musl")
240
243
 
241
- if Gem::Platform.new("x86_64-linux-musl") === Gem::Platform.new("x86_64-linux")
244
+ if X64_LINUX === X64_LINUX_MUSL
242
245
  remove_method :===
243
246
 
244
247
  def ===(other)
@@ -258,7 +261,7 @@ module Gem
258
261
  # version
259
262
  (
260
263
  (@os != "linux" && (@version.nil? || other.version.nil?)) ||
261
- (@os == "linux" && ((@version.nil? && ["gnu", "musl"].include?(other.version)) || (@version == "gnu" && other.version.nil?))) ||
264
+ (@os == "linux" && (other.version == "gnu#{@version}" || other.version == "musl#{@version}" || @version == "gnu#{other.version}")) ||
262
265
  @version == other.version
263
266
  )
264
267
  end
@@ -274,14 +277,21 @@ module Gem
274
277
  def match_gem?(platform, gem_name)
275
278
  match_platforms?(platform, Gem.platforms)
276
279
  end
280
+ end
281
+
282
+ match_platforms_defined = Gem::Platform.respond_to?(:match_platforms?, true)
283
+
284
+ if !match_platforms_defined || Gem::Platform.send(:match_platforms?, Gem::Platform::X64_LINUX_MUSL, [Gem::Platform::X64_LINUX])
277
285
 
278
286
  private
279
287
 
288
+ remove_method :match_platforms? if match_platforms_defined
289
+
280
290
  def match_platforms?(platform, platforms)
281
291
  platforms.any? do |local_platform|
282
292
  platform.nil? ||
283
293
  local_platform == platform ||
284
- (local_platform != Gem::Platform::RUBY && local_platform =~ platform)
294
+ (local_platform != Gem::Platform::RUBY && platform =~ local_platform)
285
295
  end
286
296
  end
287
297
  end
@@ -45,7 +45,6 @@ module Bundler
45
45
  silence_root_warning
46
46
  suppress_install_using_messages
47
47
  update_requires_all_flag
48
- use_gem_version_promoter_for_major_updates
49
48
  ].freeze
50
49
 
51
50
  NUMBER_KEYS = %w[
@@ -114,10 +114,20 @@ module Bundler
114
114
  SpecSet.new(arr)
115
115
  end
116
116
 
117
+ def -(other)
118
+ SpecSet.new(to_a - other.to_a)
119
+ end
120
+
117
121
  def find_by_name_and_platform(name, platform)
118
122
  @specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
119
123
  end
120
124
 
125
+ def delete_by_name_and_version(name, version)
126
+ @specs.reject! {|spec| spec.name == name && spec.version == version }
127
+ @lookup = nil
128
+ @sorted = nil
129
+ end
130
+
121
131
  def what_required(spec)
122
132
  unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
123
133
  return [spec]
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.3.21".freeze
4
+ VERSION = "2.3.22".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -180,7 +180,7 @@ class Gem::Platform
180
180
  # version
181
181
  (
182
182
  (@os != "linux" && (@version.nil? || other.version.nil?)) ||
183
- (@os == "linux" && ((@version.nil? && ["gnu", "musl"].include?(other.version)) || (@version == "gnu" && other.version.nil?))) ||
183
+ (@os == "linux" && (other.version == "gnu#{@version}" || other.version == "musl#{@version}" || @version == "gnu#{other.version}")) ||
184
184
  @version == other.version
185
185
  )
186
186
  end
@@ -151,7 +151,7 @@ module Gem::QueryUtils
151
151
  fetcher.detect(specs_type) { true }
152
152
  else
153
153
  fetcher.detect(specs_type) do |name_tuple|
154
- name === name_tuple.name
154
+ name === name_tuple.name && options[:version].satisfied_by?(name_tuple.version)
155
155
  end
156
156
  end
157
157
 
@@ -159,7 +159,7 @@ module Gem::QueryUtils
159
159
  end
160
160
 
161
161
  def specs_type
162
- if options[:all]
162
+ if options[:all] || options[:version].specific?
163
163
  if options[:prerelease]
164
164
  :complete
165
165
  else
data/lib/rubygems.rb CHANGED
@@ -8,7 +8,7 @@
8
8
  require "rbconfig"
9
9
 
10
10
  module Gem
11
- VERSION = "3.3.21".freeze
11
+ VERSION = "3.3.22".freeze
12
12
  end
13
13
 
14
14
  # Must be first since it unloads the prelude from 1.9.2
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.3.21"
5
+ s.version = "3.3.22"
6
6
  s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
7
7
  s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
8
8
 
@@ -334,8 +334,6 @@ class Gem::TestCase < Test::Unit::TestCase
334
334
  # capture output
335
335
  Gem::DefaultUserInteraction.ui = Gem::MockGemUi.new
336
336
 
337
- ENV["TMPDIR"] = @tempdir
338
-
339
337
  @orig_SYSTEM_WIDE_CONFIG_FILE = Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE
340
338
  Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
341
339
  Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
@@ -40,4 +40,30 @@ class TestGemCommandsInfoCommand < Gem::TestCase
40
40
  assert_match %r{#{@gem.summary}\n}, @ui.output
41
41
  assert_match "", @ui.error
42
42
  end
43
+
44
+ def test_execute_with_version_flag
45
+ spec_fetcher do |fetcher|
46
+ fetcher.spec "coolgem", "1.0"
47
+ fetcher.spec "coolgem", "2.0"
48
+ end
49
+
50
+ @cmd.handle_options %w[coolgem --remote --version 1.0]
51
+
52
+ use_ui @ui do
53
+ @cmd.execute
54
+ end
55
+
56
+ expected = <<-EOF
57
+
58
+ *** REMOTE GEMS ***
59
+
60
+ coolgem (1.0)
61
+ Author: A User
62
+ Homepage: http://example.com
63
+
64
+ this is a summary
65
+ EOF
66
+
67
+ assert_equal expected, @ui.output
68
+ end
43
69
  end
@@ -138,6 +138,10 @@ class TestGemPlatform < Gem::TestCase
138
138
  "x86_64-linux-gnu" => ["x86_64", "linux", "gnu"],
139
139
  "x86_64-linux-musl" => ["x86_64", "linux", "musl"],
140
140
  "x86_64-linux-uclibc" => ["x86_64", "linux", "uclibc"],
141
+ "arm-linux-eabi" => ["arm", "linux", "eabi"],
142
+ "arm-linux-gnueabi" => ["arm", "linux", "gnueabi"],
143
+ "arm-linux-musleabi" => ["arm", "linux", "musleabi"],
144
+ "arm-linux-uclibceabi" => ["arm", "linux", "uclibceabi"],
141
145
  "x86_64-openbsd3.9" => ["x86_64", "openbsd", "3.9"],
142
146
  "x86_64-openbsd4.0" => ["x86_64", "openbsd", "4.0"],
143
147
  "x86_64-openbsd" => ["x86_64", "openbsd", nil],
@@ -301,6 +305,34 @@ class TestGemPlatform < Gem::TestCase
301
305
  refute(x86_linux_uclibc === x86_linux, "linux-uclibc =~ linux")
302
306
  end
303
307
 
308
+ def test_eabi_version_is_stricter_for_linux_os
309
+ arm_linux_eabi = Gem::Platform.new "arm-linux-eabi"
310
+ arm_linux_gnueabi = Gem::Platform.new "arm-linux-gnueabi"
311
+ arm_linux_musleabi = Gem::Platform.new "arm-linux-musleabi"
312
+ arm_linux_uclibceabi = Gem::Platform.new "arm-linux-uclibceabi"
313
+
314
+ # a naked linux runtime is implicit gnu, as it represents the common glibc-linked runtime
315
+ assert(arm_linux_eabi === arm_linux_gnueabi, "linux-eabi =~ linux-gnueabi")
316
+ assert(arm_linux_gnueabi === arm_linux_eabi, "linux-gnueabi =~ linux-eabi")
317
+
318
+ # musl and explicit gnu should differ
319
+ refute(arm_linux_gnueabi === arm_linux_musleabi, "linux-gnueabi =~ linux-musleabi")
320
+ refute(arm_linux_musleabi === arm_linux_gnueabi, "linux-musleabi =~ linux-gnueabi")
321
+
322
+ # explicit libc differ
323
+ refute(arm_linux_uclibceabi === arm_linux_musleabi, "linux-uclibceabi =~ linux-musleabi")
324
+ refute(arm_linux_musleabi === arm_linux_uclibceabi, "linux-musleabi =~ linux-uclibceabi")
325
+
326
+ # musl host runtime accepts libc-generic or statically linked gems...
327
+ assert(arm_linux_eabi === arm_linux_musleabi, "linux-eabi =~ linux-musleabi")
328
+ # ...but implicit gnu runtime generally does not accept musl-specific gems
329
+ refute(arm_linux_musleabi === arm_linux_eabi, "linux-musleabi =~ linux-eabi")
330
+
331
+ # other libc are not glibc compatible
332
+ refute(arm_linux_eabi === arm_linux_uclibceabi, "linux-eabi =~ linux-uclibceabi")
333
+ refute(arm_linux_uclibceabi === arm_linux_eabi, "linux-uclibceabi =~ linux-eabi")
334
+ end
335
+
304
336
  def test_equals3_cpu_arm
305
337
  arm = Gem::Platform.new "arm-linux"
306
338
  armv5 = Gem::Platform.new "armv5-linux"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubygems-update
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.21
4
+ version: 3.3.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
- date: 2022-08-24 00:00:00.000000000 Z
19
+ date: 2022-09-07 00:00:00.000000000 Z
20
20
  dependencies: []
21
21
  description: |-
22
22
  A package (also known as a library) contains a set of functionality
@@ -159,12 +159,16 @@ files:
159
159
  - bundler/lib/bundler/man/bundle-clean.1.ronn
160
160
  - bundler/lib/bundler/man/bundle-config.1
161
161
  - bundler/lib/bundler/man/bundle-config.1.ronn
162
+ - bundler/lib/bundler/man/bundle-console.1
163
+ - bundler/lib/bundler/man/bundle-console.1.ronn
162
164
  - bundler/lib/bundler/man/bundle-doctor.1
163
165
  - bundler/lib/bundler/man/bundle-doctor.1.ronn
164
166
  - bundler/lib/bundler/man/bundle-exec.1
165
167
  - bundler/lib/bundler/man/bundle-exec.1.ronn
166
168
  - bundler/lib/bundler/man/bundle-gem.1
167
169
  - bundler/lib/bundler/man/bundle-gem.1.ronn
170
+ - bundler/lib/bundler/man/bundle-help.1
171
+ - bundler/lib/bundler/man/bundle-help.1.ronn
168
172
  - bundler/lib/bundler/man/bundle-info.1
169
173
  - bundler/lib/bundler/man/bundle-info.1.ronn
170
174
  - bundler/lib/bundler/man/bundle-init.1
@@ -193,6 +197,8 @@ files:
193
197
  - bundler/lib/bundler/man/bundle-show.1.ronn
194
198
  - bundler/lib/bundler/man/bundle-update.1
195
199
  - bundler/lib/bundler/man/bundle-update.1.ronn
200
+ - bundler/lib/bundler/man/bundle-version.1
201
+ - bundler/lib/bundler/man/bundle-version.1.ronn
196
202
  - bundler/lib/bundler/man/bundle-viz.1
197
203
  - bundler/lib/bundler/man/bundle-viz.1.ronn
198
204
  - bundler/lib/bundler/man/bundle.1
@@ -217,6 +223,7 @@ files:
217
223
  - bundler/lib/bundler/process_lock.rb
218
224
  - bundler/lib/bundler/remote_specification.rb
219
225
  - bundler/lib/bundler/resolver.rb
226
+ - bundler/lib/bundler/resolver/base.rb
220
227
  - bundler/lib/bundler/resolver/spec_group.rb
221
228
  - bundler/lib/bundler/retry.rb
222
229
  - bundler/lib/bundler/ruby_dsl.rb
@@ -824,7 +831,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
824
831
  - !ruby/object:Gem::Version
825
832
  version: '0'
826
833
  requirements: []
827
- rubygems_version: 3.3.21
834
+ rubygems_version: 3.4.0.dev
828
835
  signing_key:
829
836
  specification_version: 4
830
837
  summary: RubyGems is a package management framework for Ruby.