rubygems-update 3.5.0 → 3.5.2

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/Manifest.txt +12 -1
  4. data/bundler/CHANGELOG.md +22 -0
  5. data/bundler/lib/bundler/build_metadata.rb +2 -2
  6. data/bundler/lib/bundler/checksum.rb +42 -33
  7. data/bundler/lib/bundler/definition.rb +19 -11
  8. data/bundler/lib/bundler/dsl.rb +3 -5
  9. data/bundler/lib/bundler/lazy_specification.rb +2 -0
  10. data/bundler/lib/bundler/remote_specification.rb +4 -0
  11. data/bundler/lib/bundler/self_manager.rb +1 -1
  12. data/bundler/lib/bundler/spec_set.rb +35 -7
  13. data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
  14. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  15. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  16. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  17. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  18. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  19. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +0 -3
  20. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -3
  21. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  22. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  23. data/bundler/lib/bundler/version.rb +1 -1
  24. data/bundler/lib/bundler.rb +3 -5
  25. data/lib/rubygems/basic_specification.rb +7 -1
  26. data/lib/rubygems/net-http/.document +1 -0
  27. data/lib/rubygems/net-protocol/.document +1 -0
  28. data/lib/rubygems/package.rb +12 -2
  29. data/lib/rubygems/request.rb +4 -4
  30. data/lib/rubygems/resolv/.document +1 -0
  31. data/lib/rubygems/resolver/molinillo/.document +1 -0
  32. data/lib/rubygems/timeout/.document +1 -0
  33. data/lib/rubygems.rb +8 -1
  34. data/rubygems-update.gemspec +1 -1
  35. metadata +15 -4
  36. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +0 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9fce6526c315ddb27b7225aa753bc8ed4989c4b3e0f21475a6d89f056621244f
4
- data.tar.gz: abbf90a8a960cbf76fa0535675235fff405899bf536030904ca3558b86d90834
3
+ metadata.gz: 516ff3035710aec51c55a79b9d0634c6900796ff1a0ed176db0eed96ea9fdc83
4
+ data.tar.gz: 3a7c9ba6ba6c93e8c78ece390b1d14c7b9aa5876c7580fa53a85b0eb18e83311
5
5
  SHA512:
6
- metadata.gz: 94e46fe63d6d1be72ef7284b3a74a947564ab3c1bad56005d3093de37cd17c2113ed250b28989b868b1529d4577b2255a789995dda7426cbe58b540c9dadae0b
7
- data.tar.gz: 8210df7d8682222d674c84ed34d06df6deb86be7982d98d5f7df6fd54ba41f37a95dc5366754d42c39d96fa21a0cfc1b4d3712a93deded075f36bf0fbd64f321
6
+ metadata.gz: 14bde13965cae368e5b5c812fb6e4e45cdec3bd7fe116b1eff897e3a2b7131ca555fbe3dff6da0d847854c81cc886bfb5f8835d13e7e60fa4a569432149f4684
7
+ data.tar.gz: d50b039fa4f0b3ed8a66019f522a6c8b64679a69e05a31b31a82a7e6e2c97d2fffab43593076729b3bf98da795f345f252a678a33e55d50209d3f15b1e74ef9f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ # 3.5.2 / 2023-12-21
2
+
3
+ ## Enhancements:
4
+
5
+ * Support dynamic library loading with extension .so or .o. Pull request
6
+ [#7241](https://github.com/rubygems/rubygems/pull/7241) by hogelog
7
+ * Installs bundler 2.5.2 as a default gem.
8
+
9
+ ## Performance:
10
+
11
+ * Replace `object_id` comparison with identity Hash. Pull request
12
+ [#7303](https://github.com/rubygems/rubygems/pull/7303) by amomchilov
13
+ * Use IO.copy_stream when reading, writing. Pull request
14
+ [#6958](https://github.com/rubygems/rubygems/pull/6958) by martinemde
15
+
16
+ # 3.5.1 / 2023-12-15
17
+
18
+ ## Enhancements:
19
+
20
+ * Installs bundler 2.5.1 as a default gem.
21
+
1
22
  # 3.5.0 / 2023-12-15
2
23
 
3
24
  ## Security:
data/Manifest.txt CHANGED
@@ -248,18 +248,22 @@ bundler/lib/bundler/ui/silent.rb
248
248
  bundler/lib/bundler/uri_credentials_filter.rb
249
249
  bundler/lib/bundler/uri_normalizer.rb
250
250
  bundler/lib/bundler/vendor/.document
251
+ bundler/lib/bundler/vendor/connection_pool/.document
251
252
  bundler/lib/bundler/vendor/connection_pool/LICENSE
252
253
  bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb
253
254
  bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb
254
255
  bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb
255
256
  bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb
257
+ bundler/lib/bundler/vendor/fileutils/.document
256
258
  bundler/lib/bundler/vendor/fileutils/LICENSE.txt
257
259
  bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb
260
+ bundler/lib/bundler/vendor/net-http-persistent/.document
258
261
  bundler/lib/bundler/vendor/net-http-persistent/README.rdoc
259
262
  bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
260
263
  bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb
261
264
  bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
262
265
  bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb
266
+ bundler/lib/bundler/vendor/pub_grub/.document
263
267
  bundler/lib/bundler/vendor/pub_grub/LICENSE.txt
264
268
  bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb
265
269
  bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb
@@ -277,6 +281,7 @@ bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb
277
281
  bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb
278
282
  bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb
279
283
  bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb
284
+ bundler/lib/bundler/vendor/thor/.document
280
285
  bundler/lib/bundler/vendor/thor/LICENSE.md
281
286
  bundler/lib/bundler/vendor/thor/lib/thor.rb
282
287
  bundler/lib/bundler/vendor/thor/lib/thor/actions.rb
@@ -308,14 +313,15 @@ bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
308
313
  bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb
309
314
  bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb
310
315
  bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb
311
- bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb
312
316
  bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb
313
317
  bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb
314
318
  bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb
315
319
  bundler/lib/bundler/vendor/thor/lib/thor/util.rb
316
320
  bundler/lib/bundler/vendor/thor/lib/thor/version.rb
321
+ bundler/lib/bundler/vendor/tsort/.document
317
322
  bundler/lib/bundler/vendor/tsort/LICENSE.txt
318
323
  bundler/lib/bundler/vendor/tsort/lib/tsort.rb
324
+ bundler/lib/bundler/vendor/uri/.document
319
325
  bundler/lib/bundler/vendor/uri/LICENSE.txt
320
326
  bundler/lib/bundler/vendor/uri/lib/uri.rb
321
327
  bundler/lib/bundler/vendor/uri/lib/uri/common.rb
@@ -425,6 +431,7 @@ lib/rubygems/installer.rb
425
431
  lib/rubygems/installer_uninstaller_utils.rb
426
432
  lib/rubygems/local_remote_options.rb
427
433
  lib/rubygems/name_tuple.rb
434
+ lib/rubygems/net-http/.document
428
435
  lib/rubygems/net-http/LICENSE.txt
429
436
  lib/rubygems/net-http/lib/net/http.rb
430
437
  lib/rubygems/net-http/lib/net/http/backward.rb
@@ -438,6 +445,7 @@ lib/rubygems/net-http/lib/net/http/response.rb
438
445
  lib/rubygems/net-http/lib/net/http/responses.rb
439
446
  lib/rubygems/net-http/lib/net/http/status.rb
440
447
  lib/rubygems/net-http/lib/net/https.rb
448
+ lib/rubygems/net-protocol/.document
441
449
  lib/rubygems/net-protocol/LICENSE.txt
442
450
  lib/rubygems/net-protocol/lib/net/protocol.rb
443
451
  lib/rubygems/net/http.rb
@@ -481,6 +489,7 @@ lib/rubygems/request_set/lockfile.rb
481
489
  lib/rubygems/request_set/lockfile/parser.rb
482
490
  lib/rubygems/request_set/lockfile/tokenizer.rb
483
491
  lib/rubygems/requirement.rb
492
+ lib/rubygems/resolv/.document
484
493
  lib/rubygems/resolv/LICENSE.txt
485
494
  lib/rubygems/resolv/lib/resolv.rb
486
495
  lib/rubygems/resolver.rb
@@ -503,6 +512,7 @@ lib/rubygems/resolver/local_specification.rb
503
512
  lib/rubygems/resolver/lock_set.rb
504
513
  lib/rubygems/resolver/lock_specification.rb
505
514
  lib/rubygems/resolver/molinillo.rb
515
+ lib/rubygems/resolver/molinillo/.document
506
516
  lib/rubygems/resolver/molinillo/LICENSE
507
517
  lib/rubygems/resolver/molinillo/lib/molinillo.rb
508
518
  lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb
@@ -564,6 +574,7 @@ lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem
564
574
  lib/rubygems/stub_specification.rb
565
575
  lib/rubygems/text.rb
566
576
  lib/rubygems/timeout.rb
577
+ lib/rubygems/timeout/.document
567
578
  lib/rubygems/timeout/LICENSE.txt
568
579
  lib/rubygems/timeout/lib/timeout.rb
569
580
  lib/rubygems/tsort.rb
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ # 2.5.2 (December 21, 2023)
2
+
3
+ ## Enhancements:
4
+
5
+ - Avoid vendored thor gem polluting the global namespace [#7305](https://github.com/rubygems/rubygems/pull/7305)
6
+
7
+ ## Bug fixes:
8
+
9
+ - Fix `bundle update --bundler` when latest version does not support current ruby [#7310](https://github.com/rubygems/rubygems/pull/7310)
10
+ - Fix incorrect lockfiles being generated in some situations [#7307](https://github.com/rubygems/rubygems/pull/7307)
11
+ - Fix incorrect re-resolve messages [#7306](https://github.com/rubygems/rubygems/pull/7306)
12
+
13
+ # 2.5.1 (December 15, 2023)
14
+
15
+ ## Bug fixes:
16
+
17
+ - Fix `ruby` Gemfile DSL with `file:` parameter no longer working [#7288](https://github.com/rubygems/rubygems/pull/7288)
18
+
19
+ ## Performance:
20
+
21
+ - Save array allocation for every dependency in Gemfile [#7270](https://github.com/rubygems/rubygems/pull/7270)
22
+
1
23
  # 2.5.0 (December 15, 2023)
2
24
 
3
25
  ## Breaking changes:
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2023-12-15".freeze
8
- @git_commit_sha = "58fdbff35a".freeze
7
+ @built_at = "2023-12-21".freeze
8
+ @git_commit_sha = "00351925e4".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -30,6 +30,7 @@ module Bundler
30
30
 
31
31
  def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
32
32
  return if Bundler.settings[:disable_checksum_validation]
33
+
33
34
  Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
34
35
  end
35
36
 
@@ -41,11 +42,13 @@ module Bundler
41
42
  def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
42
43
  return digest unless algo == DEFAULT_ALGORITHM
43
44
  return digest if digest.match?(/\A[0-9a-f]{64}\z/i)
45
+
44
46
  if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
45
47
  digest = digest.tr("-_", "+/") # fix urlsafe base64
46
- return digest.unpack1("m0").unpack1("H*")
48
+ digest.unpack1("m0").unpack1("H*")
49
+ else
50
+ raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
47
51
  end
48
- raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
49
52
  end
50
53
  end
51
54
 
@@ -63,6 +66,10 @@ module Bundler
63
66
 
64
67
  alias_method :eql?, :==
65
68
 
69
+ def same_source?(other)
70
+ sources.include?(other.sources.first)
71
+ end
72
+
66
73
  def match?(other)
67
74
  other.is_a?(self.class) && other.digest == digest && other.algo == algo
68
75
  end
@@ -81,6 +88,7 @@ module Bundler
81
88
 
82
89
  def merge!(other)
83
90
  return nil unless match?(other)
91
+
84
92
  @sources.concat(other.sources).uniq!
85
93
  self
86
94
  end
@@ -161,26 +169,17 @@ module Bundler
161
169
 
162
170
  def initialize
163
171
  @store = {}
164
- end
165
-
166
- def initialize_copy(other)
167
- @store = {}
168
- other.store.each do |lock_name, checksums|
169
- store[lock_name] = checksums.dup
170
- end
172
+ @store_mutex = Mutex.new
171
173
  end
172
174
 
173
175
  def inspect
174
176
  "#<#{self.class}:#{object_id} size=#{store.size}>"
175
177
  end
176
178
 
177
- def fetch(spec, algo = DEFAULT_ALGORITHM)
178
- store[spec.name_tuple.lock_name]&.fetch(algo, nil)
179
- end
180
-
181
179
  # Replace when the new checksum is from the same source.
182
- # The primary purpose of this registering checksums from gems where there are
180
+ # The primary purpose is registering checksums from gems where there are
183
181
  # duplicates of the same gem (according to full_name) in the index.
182
+ #
184
183
  # In particular, this is when 2 gems have two similar platforms, e.g.
185
184
  # "darwin20" and "darwin-20", both of which resolve to darwin-20.
186
185
  # In the Index, the later gem replaces the former, so we do that here.
@@ -192,19 +191,19 @@ module Bundler
192
191
  return unless checksum
193
192
 
194
193
  lock_name = spec.name_tuple.lock_name
195
- checksums = (store[lock_name] ||= {})
196
- existing = checksums[checksum.algo]
197
-
198
- # we assume only one source because this is used while building the index
199
- if !existing || existing.sources.first == checksum.sources.first
200
- checksums[checksum.algo] = checksum
201
- else
202
- register_checksum(lock_name, checksum)
194
+ @store_mutex.synchronize do
195
+ existing = fetch_checksum(lock_name, checksum.algo)
196
+ if !existing || existing.same_source?(checksum)
197
+ store_checksum(lock_name, checksum)
198
+ else
199
+ merge_checksum(lock_name, checksum, existing)
200
+ end
203
201
  end
204
202
  end
205
203
 
206
204
  def register(spec, checksum)
207
205
  return unless checksum
206
+
208
207
  register_checksum(spec.name_tuple.lock_name, checksum)
209
208
  end
210
209
 
@@ -218,7 +217,8 @@ module Bundler
218
217
 
219
218
  def to_lock(spec)
220
219
  lock_name = spec.name_tuple.lock_name
221
- if checksums = store[lock_name]
220
+ checksums = @store[lock_name]
221
+ if checksums
222
222
  "#{lock_name} #{checksums.values.map(&:to_lock).sort.join(",")}"
223
223
  else
224
224
  lock_name
@@ -228,18 +228,27 @@ module Bundler
228
228
  private
229
229
 
230
230
  def register_checksum(lock_name, checksum)
231
- return unless checksum
232
- checksums = (store[lock_name] ||= {})
233
- existing = checksums[checksum.algo]
234
-
235
- if !existing
236
- checksums[checksum.algo] = checksum
237
- elsif existing.merge!(checksum)
238
- checksum
239
- else
240
- raise ChecksumMismatchError.new(lock_name, existing, checksum)
231
+ @store_mutex.synchronize do
232
+ existing = fetch_checksum(lock_name, checksum.algo)
233
+ if existing
234
+ merge_checksum(lock_name, checksum, existing)
235
+ else
236
+ store_checksum(lock_name, checksum)
237
+ end
241
238
  end
242
239
  end
240
+
241
+ def merge_checksum(lock_name, checksum, existing)
242
+ existing.merge!(checksum) || raise(ChecksumMismatchError.new(lock_name, existing, checksum))
243
+ end
244
+
245
+ def store_checksum(lock_name, checksum)
246
+ (@store[lock_name] ||= {})[checksum.algo] = checksum
247
+ end
248
+
249
+ def fetch_checksum(lock_name, algo)
250
+ @store[lock_name]&.fetch(algo, nil)
251
+ end
243
252
  end
244
253
  end
245
254
  end
@@ -496,7 +496,15 @@ module Bundler
496
496
  private :sources
497
497
 
498
498
  def nothing_changed?
499
- !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@missing_lockfile_dep && !@unlocking_bundler && !@invalid_lockfile_dep
499
+ !@source_changes &&
500
+ !@dependency_changes &&
501
+ !@new_platform &&
502
+ !@path_changes &&
503
+ !@local_changes &&
504
+ !@missing_lockfile_dep &&
505
+ !@unlocking_bundler &&
506
+ !@locked_spec_with_missing_deps &&
507
+ !@locked_spec_with_invalid_deps
500
508
  end
501
509
 
502
510
  def no_resolve_needed?
@@ -653,7 +661,8 @@ module Bundler
653
661
  [@local_changes, "the gemspecs for git local gems changed"],
654
662
  [@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
655
663
  [@unlocking_bundler, "an update to the version of Bundler itself was requested"],
656
- [@invalid_lockfile_dep, "your lock file has an invalid dependency \"#{@invalid_lockfile_dep}\""],
664
+ [@locked_spec_with_missing_deps, "your lock file includes \"#{@locked_spec_with_missing_deps}\" but not some of its dependencies"],
665
+ [@locked_spec_with_invalid_deps, "your lockfile does not satisfy dependencies of \"#{@locked_spec_with_invalid_deps}\""],
657
666
  ].select(&:first).map(&:last).join(", ")
658
667
  end
659
668
 
@@ -708,26 +717,25 @@ module Bundler
708
717
  end
709
718
 
710
719
  def check_lockfile
711
- @invalid_lockfile_dep = nil
712
720
  @missing_lockfile_dep = nil
713
721
 
714
- locked_names = @locked_specs.map(&:name)
722
+ @locked_spec_with_invalid_deps = nil
723
+ @locked_spec_with_missing_deps = nil
724
+
715
725
  missing = []
716
726
  invalid = []
717
727
 
718
728
  @locked_specs.each do |s|
719
- s.dependencies.each do |dep|
720
- next if dep.name == "bundler"
729
+ validation = @locked_specs.validate_deps(s)
721
730
 
722
- missing << s unless locked_names.include?(dep.name)
723
- invalid << s if @locked_specs.none? {|spec| dep.matches_spec?(spec) }
724
- end
731
+ missing << s if validation == :missing
732
+ invalid << s if validation == :invalid
725
733
  end
726
734
 
727
735
  if missing.any?
728
736
  @locked_specs.delete(missing)
729
737
 
730
- @missing_lockfile_dep = missing.first.name
738
+ @locked_spec_with_missing_deps = missing.first.name
731
739
  elsif !@dependency_changes
732
740
  @missing_lockfile_dep = current_dependencies.find do |d|
733
741
  @locked_specs[d.name].empty? && d.name != "bundler"
@@ -737,7 +745,7 @@ module Bundler
737
745
  if invalid.any?
738
746
  @locked_specs.delete(invalid)
739
747
 
740
- @invalid_lockfile_dep = invalid.first.name
748
+ @locked_spec_with_invalid_deps = invalid.first.name
741
749
  end
742
750
  end
743
751
 
@@ -20,7 +20,7 @@ module Bundler
20
20
 
21
21
  GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
22
22
 
23
- attr_reader :gemspecs
23
+ attr_reader :gemspecs, :gemfile
24
24
  attr_accessor :dependencies
25
25
 
26
26
  def initialize
@@ -404,13 +404,11 @@ module Bundler
404
404
  end
405
405
 
406
406
  def validate_keys(command, opts, valid_keys)
407
- invalid_keys = opts.keys - valid_keys
408
-
409
- git_source = opts.keys & @git_sources.keys.map(&:to_s)
410
- if opts["branch"] && !(opts["git"] || opts["github"] || git_source.any?)
407
+ if opts["branch"] && !(opts["git"] || opts["github"] || (opts.keys & @git_sources.keys.map(&:to_s)).any?)
411
408
  raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
412
409
  end
413
410
 
411
+ invalid_keys = opts.keys - valid_keys
414
412
  return true unless invalid_keys.any?
415
413
 
416
414
  message = String.new
@@ -10,6 +10,8 @@ module Bundler
10
10
  attr_reader :name, :version, :platform
11
11
  attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version
12
12
 
13
+ alias_method :runtime_dependencies, :dependencies
14
+
13
15
  def self.from_spec(s)
14
16
  lazy_spec = new(s.name, s.version, s.platform, s.source)
15
17
  lazy_spec.dependencies = s.dependencies
@@ -88,6 +88,10 @@ module Bundler
88
88
  end
89
89
  end
90
90
 
91
+ def runtime_dependencies
92
+ dependencies.select(&:runtime?)
93
+ end
94
+
91
95
  def git_version
92
96
  return unless loaded_from && source.is_a?(Bundler::Source::Git)
93
97
  " #{source.revision[0..6]}"
@@ -121,7 +121,7 @@ module Bundler
121
121
  source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
122
122
  source.remote!
123
123
  source.add_dependency_names("bundler")
124
- source.specs
124
+ source.specs.select(&:matches_current_metadata?)
125
125
  end
126
126
  end
127
127
 
@@ -37,7 +37,7 @@ module Bundler
37
37
 
38
38
  specs_for_dep.first.dependencies.each do |d|
39
39
  next if d.type == :development
40
- incomplete = true if d.name != "bundler" && lookup[d.name].empty?
40
+ incomplete = true if d.name != "bundler" && lookup[d.name].nil?
41
41
  deps << [d, dep[1]]
42
42
  end
43
43
  else
@@ -45,7 +45,7 @@ module Bundler
45
45
  end
46
46
 
47
47
  if incomplete && check
48
- @incomplete_specs += lookup[name].any? ? lookup[name] : [LazySpecification.new(name, nil, nil)]
48
+ @incomplete_specs += lookup[name] || [LazySpecification.new(name, nil, nil)]
49
49
  end
50
50
  end
51
51
 
@@ -64,7 +64,9 @@ module Bundler
64
64
  valid_platform = lookup.all? do |_, specs|
65
65
  spec = specs.first
66
66
  matching_specs = spec.source.specs.search([spec.name, spec.version])
67
- platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find(&:matches_current_metadata?)
67
+ platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find do |s|
68
+ s.matches_current_metadata? && valid_dependencies?(s)
69
+ end
68
70
 
69
71
  if platform_spec
70
72
  new_specs << LazySpecification.from_spec(platform_spec)
@@ -90,9 +92,20 @@ module Bundler
90
92
  platforms
91
93
  end
92
94
 
95
+ def validate_deps(s)
96
+ s.runtime_dependencies.each do |dep|
97
+ next if dep.name == "bundler"
98
+
99
+ return :missing unless names.include?(dep.name)
100
+ return :invalid if none? {|spec| dep.matches_spec?(spec) }
101
+ end
102
+
103
+ :valid
104
+ end
105
+
93
106
  def [](key)
94
107
  key = key.name if key.respond_to?(:name)
95
- lookup[key].reverse
108
+ lookup[key]&.reverse || []
96
109
  end
97
110
 
98
111
  def []=(key, value)
@@ -167,7 +180,7 @@ module Bundler
167
180
  end
168
181
 
169
182
  def what_required(spec)
170
- unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
183
+ unless req = find {|s| s.runtime_dependencies.any? {|d| d.name == spec.name } }
171
184
  return [spec]
172
185
  end
173
186
  what_required(req) << spec
@@ -193,8 +206,16 @@ module Bundler
193
206
  sorted.each(&b)
194
207
  end
195
208
 
209
+ def names
210
+ lookup.keys
211
+ end
212
+
196
213
  private
197
214
 
215
+ def valid_dependencies?(s)
216
+ validate_deps(s) == :valid
217
+ end
218
+
198
219
  def sorted
199
220
  rake = @specs.find {|s| s.name == "rake" }
200
221
  begin
@@ -213,8 +234,9 @@ module Bundler
213
234
 
214
235
  def lookup
215
236
  @lookup ||= begin
216
- lookup = Hash.new {|h, k| h[k] = [] }
237
+ lookup = {}
217
238
  @specs.each do |s|
239
+ lookup[s.name] ||= []
218
240
  lookup[s.name] << s
219
241
  end
220
242
  lookup
@@ -228,6 +250,8 @@ module Bundler
228
250
 
229
251
  def specs_for_dependency(dep, platform)
230
252
  specs_for_name = lookup[dep.name]
253
+ return [] unless specs_for_name
254
+
231
255
  matching_specs = if dep.force_ruby_platform
232
256
  GemHelpers.force_ruby_platform(specs_for_name)
233
257
  else
@@ -240,7 +264,11 @@ module Bundler
240
264
  def tsort_each_child(s)
241
265
  s.dependencies.sort_by(&:name).each do |d|
242
266
  next if d.type == :development
243
- lookup[d.name].each {|s2| yield s2 }
267
+
268
+ specs_for_name = lookup[d.name]
269
+ next unless specs_for_name
270
+
271
+ specs_for_name.each {|s2| yield s2 }
244
272
  end
245
273
  end
246
274
  end
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -20,7 +20,7 @@ autoload :OpenSSL, 'openssl'
20
20
  #
21
21
  # Example:
22
22
  #
23
- # require 'bundler/vendor/net-http/lib/net/http/persistent'
23
+ # require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
24
24
  #
25
25
  # uri = Bundler::URI 'http://example.com/awesome/web/service'
26
26
  #
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -1,5 +1,4 @@
1
1
  require_relative "basic"
2
- require_relative "lcs_diff"
3
2
 
4
3
  class Bundler::Thor
5
4
  module Shell
@@ -7,8 +6,6 @@ class Bundler::Thor
7
6
  # Bundler::Thor::Shell::Basic to see all available methods.
8
7
  #
9
8
  class Color < Basic
10
- include LCSDiff
11
-
12
9
  # Embed in a String to clear all previous ANSI sequences.
13
10
  CLEAR = "\e[0m"
14
11
  # The start of an ANSI bold sequence.
@@ -1,5 +1,4 @@
1
1
  require_relative "basic"
2
- require_relative "lcs_diff"
3
2
 
4
3
  class Bundler::Thor
5
4
  module Shell
@@ -7,8 +6,6 @@ class Bundler::Thor
7
6
  # Bundler::Thor::Shell::Basic to see all available methods.
8
7
  #
9
8
  class HTML < Basic
10
- include LCSDiff
11
-
12
9
  # The start of an HTML bold sequence.
13
10
  BOLD = "font-weight: bold"
14
11
 
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.5.0".freeze
4
+ VERSION = "2.5.2".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -100,9 +100,7 @@ module Bundler
100
100
  end
101
101
 
102
102
  def create_bundle_path
103
- SharedHelpers.filesystem_access(bundle_path.to_s) do |p|
104
- mkdir_p(p)
105
- end unless bundle_path.exist?
103
+ mkdir_p(bundle_path) unless bundle_path.exist?
106
104
 
107
105
  @bundle_path = bundle_path.realpath
108
106
  rescue Errno::EEXIST
@@ -119,7 +117,7 @@ module Bundler
119
117
  @bin_path ||= begin
120
118
  path = settings[:bin] || "bin"
121
119
  path = Pathname.new(path).expand_path(root).expand_path
122
- SharedHelpers.filesystem_access(path) {|p| FileUtils.mkdir_p(p) }
120
+ mkdir_p(path)
123
121
  path
124
122
  end
125
123
  end
@@ -483,7 +481,7 @@ module Bundler
483
481
  configured_bundle_path.use_system_gems?
484
482
  end
485
483
 
486
- def mkdir_p(path, options = {})
484
+ def mkdir_p(path)
487
485
  SharedHelpers.filesystem_access(path, :write) do |p|
488
486
  FileUtils.mkdir_p(p)
489
487
  end
@@ -84,7 +84,13 @@ class Gem::BasicSpecification
84
84
  return false
85
85
  end
86
86
 
87
- have_file? file, Gem.suffixes
87
+ is_soext = file.end_with?(".so", ".o")
88
+
89
+ if is_soext
90
+ have_file? file.delete_suffix(File.extname(file)), Gem.dynamic_library_suffixes
91
+ else
92
+ have_file? file, Gem.suffixes
93
+ end
88
94
  end
89
95
 
90
96
  def default_gem?
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -268,7 +268,7 @@ class Gem::Package
268
268
 
269
269
  tar.add_file_simple file, stat.mode, stat.size do |dst_io|
270
270
  File.open file, "rb" do |src_io|
271
- dst_io.write src_io.read 16_384 until src_io.eof?
271
+ copy_stream(src_io, dst_io)
272
272
  end
273
273
  end
274
274
  end
@@ -453,7 +453,7 @@ EOM
453
453
  end
454
454
 
455
455
  if entry.file?
456
- File.open(destination, "wb") {|out| out.write entry.read }
456
+ File.open(destination, "wb") {|out| copy_stream(entry, out) }
457
457
  FileUtils.chmod file_mode(entry.header.mode), destination
458
458
  end
459
459
 
@@ -714,6 +714,16 @@ EOM
714
714
  rescue Zlib::GzipFile::Error => e
715
715
  raise Gem::Package::FormatError.new(e.message, entry.full_name)
716
716
  end
717
+
718
+ if RUBY_ENGINE == "truffleruby"
719
+ def copy_stream(src, dst) # :nodoc:
720
+ dst.write src.read
721
+ end
722
+ else
723
+ def copy_stream(src, dst) # :nodoc:
724
+ IO.copy_stream(src, dst)
725
+ end
726
+ end
717
727
  end
718
728
 
719
729
  require_relative "package/digest_io"
@@ -30,7 +30,7 @@ class Gem::Request
30
30
  @uri = uri
31
31
  @request_class = request_class
32
32
  @last_modified = last_modified
33
- @requests = Hash.new 0
33
+ @requests = Hash.new(0).compare_by_identity
34
34
  @user_agent = user_agent
35
35
 
36
36
  @connection_pool = pool
@@ -196,7 +196,7 @@ class Gem::Request
196
196
  bad_response = false
197
197
 
198
198
  begin
199
- @requests[connection.object_id] += 1
199
+ @requests[connection] += 1
200
200
 
201
201
  verbose "#{request.method} #{Gem::Uri.redact(@uri)}"
202
202
 
@@ -247,7 +247,7 @@ class Gem::Request
247
247
  rescue EOFError, Gem::Timeout::Error,
248
248
  Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE
249
249
 
250
- requests = @requests[connection.object_id]
250
+ requests = @requests[connection]
251
251
  verbose "connection reset after #{requests} requests, retrying"
252
252
 
253
253
  raise Gem::RemoteFetcher::FetchError.new("too many connection resets", @uri) if retried
@@ -267,7 +267,7 @@ class Gem::Request
267
267
  # Resets HTTP connection +connection+.
268
268
 
269
269
  def reset(connection)
270
- @requests.delete connection.object_id
270
+ @requests.delete connection
271
271
 
272
272
  connection.finish
273
273
  connection.start
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
data/lib/rubygems.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  require "rbconfig"
10
10
 
11
11
  module Gem
12
- VERSION = "3.5.0"
12
+ VERSION = "3.5.2"
13
13
  end
14
14
 
15
15
  # Must be first since it unloads the prelude from 1.9.2
@@ -942,6 +942,13 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
942
942
  end].compact.uniq
943
943
  end
944
944
 
945
+ ##
946
+ # Suffixes for dynamic library require-able paths.
947
+
948
+ def self.dynamic_library_suffixes
949
+ @dynamic_library_suffixes ||= suffixes - [".rb"]
950
+ end
951
+
945
952
  ##
946
953
  # Prints the amount of time the supplied block takes to run using the debug
947
954
  # UI output.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.5.0"
5
+ s.version = "3.5.2"
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
 
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.5.0
4
+ version: 3.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Weirich
@@ -16,7 +16,7 @@ authors:
16
16
  autorequire:
17
17
  bindir: exe
18
18
  cert_chain: []
19
- date: 2023-12-15 00:00:00.000000000 Z
19
+ date: 2023-12-21 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
@@ -330,18 +330,22 @@ files:
330
330
  - bundler/lib/bundler/uri_credentials_filter.rb
331
331
  - bundler/lib/bundler/uri_normalizer.rb
332
332
  - bundler/lib/bundler/vendor/.document
333
+ - bundler/lib/bundler/vendor/connection_pool/.document
333
334
  - bundler/lib/bundler/vendor/connection_pool/LICENSE
334
335
  - bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb
335
336
  - bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb
336
337
  - bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb
337
338
  - bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb
339
+ - bundler/lib/bundler/vendor/fileutils/.document
338
340
  - bundler/lib/bundler/vendor/fileutils/LICENSE.txt
339
341
  - bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb
342
+ - bundler/lib/bundler/vendor/net-http-persistent/.document
340
343
  - bundler/lib/bundler/vendor/net-http-persistent/README.rdoc
341
344
  - bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
342
345
  - bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb
343
346
  - bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
344
347
  - bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb
348
+ - bundler/lib/bundler/vendor/pub_grub/.document
345
349
  - bundler/lib/bundler/vendor/pub_grub/LICENSE.txt
346
350
  - bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb
347
351
  - bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb
@@ -359,6 +363,7 @@ files:
359
363
  - bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb
360
364
  - bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb
361
365
  - bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb
366
+ - bundler/lib/bundler/vendor/thor/.document
362
367
  - bundler/lib/bundler/vendor/thor/LICENSE.md
363
368
  - bundler/lib/bundler/vendor/thor/lib/thor.rb
364
369
  - bundler/lib/bundler/vendor/thor/lib/thor/actions.rb
@@ -390,14 +395,15 @@ files:
390
395
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb
391
396
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb
392
397
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb
393
- - bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb
394
398
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb
395
399
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb
396
400
  - bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb
397
401
  - bundler/lib/bundler/vendor/thor/lib/thor/util.rb
398
402
  - bundler/lib/bundler/vendor/thor/lib/thor/version.rb
403
+ - bundler/lib/bundler/vendor/tsort/.document
399
404
  - bundler/lib/bundler/vendor/tsort/LICENSE.txt
400
405
  - bundler/lib/bundler/vendor/tsort/lib/tsort.rb
406
+ - bundler/lib/bundler/vendor/uri/.document
401
407
  - bundler/lib/bundler/vendor/uri/LICENSE.txt
402
408
  - bundler/lib/bundler/vendor/uri/lib/uri.rb
403
409
  - bundler/lib/bundler/vendor/uri/lib/uri/common.rb
@@ -507,6 +513,7 @@ files:
507
513
  - lib/rubygems/installer_uninstaller_utils.rb
508
514
  - lib/rubygems/local_remote_options.rb
509
515
  - lib/rubygems/name_tuple.rb
516
+ - lib/rubygems/net-http/.document
510
517
  - lib/rubygems/net-http/LICENSE.txt
511
518
  - lib/rubygems/net-http/lib/net/http.rb
512
519
  - lib/rubygems/net-http/lib/net/http/backward.rb
@@ -520,6 +527,7 @@ files:
520
527
  - lib/rubygems/net-http/lib/net/http/responses.rb
521
528
  - lib/rubygems/net-http/lib/net/http/status.rb
522
529
  - lib/rubygems/net-http/lib/net/https.rb
530
+ - lib/rubygems/net-protocol/.document
523
531
  - lib/rubygems/net-protocol/LICENSE.txt
524
532
  - lib/rubygems/net-protocol/lib/net/protocol.rb
525
533
  - lib/rubygems/net/http.rb
@@ -563,6 +571,7 @@ files:
563
571
  - lib/rubygems/request_set/lockfile/parser.rb
564
572
  - lib/rubygems/request_set/lockfile/tokenizer.rb
565
573
  - lib/rubygems/requirement.rb
574
+ - lib/rubygems/resolv/.document
566
575
  - lib/rubygems/resolv/LICENSE.txt
567
576
  - lib/rubygems/resolv/lib/resolv.rb
568
577
  - lib/rubygems/resolver.rb
@@ -585,6 +594,7 @@ files:
585
594
  - lib/rubygems/resolver/lock_set.rb
586
595
  - lib/rubygems/resolver/lock_specification.rb
587
596
  - lib/rubygems/resolver/molinillo.rb
597
+ - lib/rubygems/resolver/molinillo/.document
588
598
  - lib/rubygems/resolver/molinillo/LICENSE
589
599
  - lib/rubygems/resolver/molinillo/lib/molinillo.rb
590
600
  - lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb
@@ -646,6 +656,7 @@ files:
646
656
  - lib/rubygems/stub_specification.rb
647
657
  - lib/rubygems/text.rb
648
658
  - lib/rubygems/timeout.rb
659
+ - lib/rubygems/timeout/.document
649
660
  - lib/rubygems/timeout/LICENSE.txt
650
661
  - lib/rubygems/timeout/lib/timeout.rb
651
662
  - lib/rubygems/tsort.rb
@@ -691,7 +702,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
691
702
  - !ruby/object:Gem::Version
692
703
  version: '0'
693
704
  requirements: []
694
- rubygems_version: 3.5.0
705
+ rubygems_version: 3.5.2
695
706
  signing_key:
696
707
  specification_version: 4
697
708
  summary: RubyGems is a package management framework for Ruby. This gem is downloaded
@@ -1,49 +0,0 @@
1
- module LCSDiff
2
- protected
3
-
4
- # Overwrite show_diff to show diff with colors if Diff::LCS is
5
- # available.
6
- def show_diff(destination, content) #:nodoc:
7
- if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
8
- actual = File.binread(destination).to_s.split("\n")
9
- content = content.to_s.split("\n")
10
-
11
- Diff::LCS.sdiff(actual, content).each do |diff|
12
- output_diff_line(diff)
13
- end
14
- else
15
- super
16
- end
17
- end
18
-
19
- private
20
-
21
- def output_diff_line(diff) #:nodoc:
22
- case diff.action
23
- when "-"
24
- say "- #{diff.old_element.chomp}", :red, true
25
- when "+"
26
- say "+ #{diff.new_element.chomp}", :green, true
27
- when "!"
28
- say "- #{diff.old_element.chomp}", :red, true
29
- say "+ #{diff.new_element.chomp}", :green, true
30
- else
31
- say " #{diff.old_element.chomp}", nil, true
32
- end
33
- end
34
-
35
- # Check if Diff::LCS is loaded. If it is, use it to create pretty output
36
- # for diff.
37
- def diff_lcs_loaded? #:nodoc:
38
- return true if defined?(Diff::LCS)
39
- return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
40
-
41
- @diff_lcs_loaded = begin
42
- require "diff/lcs"
43
- true
44
- rescue LoadError
45
- false
46
- end
47
- end
48
-
49
- end