rubygems-update 3.5.0 → 3.5.2

Sign up to get free protection for your applications and to get access to all the features.
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