rubygems-update 3.4.19 → 3.4.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +58 -0
  3. data/Manifest.txt +1 -0
  4. data/bundler/CHANGELOG.md +62 -2
  5. data/bundler/lib/bundler/build_metadata.rb +3 -3
  6. data/bundler/lib/bundler/cli/check.rb +1 -1
  7. data/bundler/lib/bundler/cli/gem.rb +1 -3
  8. data/bundler/lib/bundler/cli/info.rb +1 -1
  9. data/bundler/lib/bundler/cli/install.rb +2 -2
  10. data/bundler/lib/bundler/cli/lock.rb +26 -23
  11. data/bundler/lib/bundler/cli/open.rb +5 -7
  12. data/bundler/lib/bundler/cli/update.rb +1 -0
  13. data/bundler/lib/bundler/definition.rb +42 -25
  14. data/bundler/lib/bundler/env.rb +2 -2
  15. data/bundler/lib/bundler/fetcher/base.rb +2 -2
  16. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -5
  17. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  18. data/bundler/lib/bundler/fetcher.rb +31 -30
  19. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  20. data/bundler/lib/bundler/index.rb +62 -31
  21. data/bundler/lib/bundler/injector.rb +1 -1
  22. data/bundler/lib/bundler/installer/parallel_installer.rb +0 -26
  23. data/bundler/lib/bundler/installer/standalone.rb +15 -1
  24. data/bundler/lib/bundler/lockfile_parser.rb +32 -39
  25. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
  34. data/bundler/lib/bundler/man/bundle-exec.1.ronn +2 -3
  35. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-init.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-plugin.1 +17 -17
  47. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +5 -5
  48. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  50. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  51. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  52. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  53. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  54. data/bundler/lib/bundler/man/bundle.1 +1 -1
  55. data/bundler/lib/bundler/man/gemfile.5 +12 -1
  56. data/bundler/lib/bundler/man/gemfile.5.ronn +5 -0
  57. data/bundler/lib/bundler/plugin.rb +1 -1
  58. data/bundler/lib/bundler/resolver/package.rb +5 -0
  59. data/bundler/lib/bundler/resolver.rb +45 -10
  60. data/bundler/lib/bundler/retry.rb +1 -1
  61. data/bundler/lib/bundler/ruby_dsl.rb +23 -2
  62. data/bundler/lib/bundler/ruby_version.rb +8 -1
  63. data/bundler/lib/bundler/self_manager.rb +2 -0
  64. data/bundler/lib/bundler/settings.rb +86 -25
  65. data/bundler/lib/bundler/shared_helpers.rb +16 -1
  66. data/bundler/lib/bundler/source/git/git_proxy.rb +27 -6
  67. data/bundler/lib/bundler/source/rubygems.rb +22 -25
  68. data/bundler/lib/bundler/spec_set.rb +2 -2
  69. data/bundler/lib/bundler/stub_specification.rb +4 -2
  70. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +6 -2
  71. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +1 -1
  72. data/bundler/lib/bundler/version.rb +1 -1
  73. data/bundler/lib/bundler/yaml_serializer.rb +6 -7
  74. data/lib/rubygems/available_set.rb +1 -1
  75. data/lib/rubygems/basic_specification.rb +3 -3
  76. data/lib/rubygems/command.rb +17 -20
  77. data/lib/rubygems/command_manager.rb +1 -1
  78. data/lib/rubygems/commands/cert_command.rb +3 -3
  79. data/lib/rubygems/commands/check_command.rb +5 -1
  80. data/lib/rubygems/commands/cleanup_command.rb +1 -1
  81. data/lib/rubygems/commands/contents_command.rb +1 -1
  82. data/lib/rubygems/commands/dependency_command.rb +3 -4
  83. data/lib/rubygems/commands/help_command.rb +2 -2
  84. data/lib/rubygems/commands/open_command.rb +1 -3
  85. data/lib/rubygems/commands/owner_command.rb +9 -11
  86. data/lib/rubygems/commands/setup_command.rb +8 -8
  87. data/lib/rubygems/commands/specification_command.rb +5 -1
  88. data/lib/rubygems/commands/stale_command.rb +1 -1
  89. data/lib/rubygems/commands/uninstall_command.rb +6 -7
  90. data/lib/rubygems/commands/unpack_command.rb +4 -6
  91. data/lib/rubygems/commands/update_command.rb +3 -3
  92. data/lib/rubygems/commands/yank_command.rb +1 -1
  93. data/lib/rubygems/config_file.rb +60 -13
  94. data/lib/rubygems/core_ext/kernel_gem.rb +2 -2
  95. data/lib/rubygems/core_ext/kernel_require.rb +1 -1
  96. data/lib/rubygems/core_ext/kernel_warn.rb +4 -5
  97. data/lib/rubygems/defaults.rb +6 -2
  98. data/lib/rubygems/dependency_installer.rb +8 -12
  99. data/lib/rubygems/deprecate.rb +4 -3
  100. data/lib/rubygems/doctor.rb +1 -1
  101. data/lib/rubygems/errors.rb +1 -1
  102. data/lib/rubygems/exceptions.rb +1 -1
  103. data/lib/rubygems/ext/builder.rb +5 -4
  104. data/lib/rubygems/ext/cargo_builder.rb +2 -2
  105. data/lib/rubygems/gem_runner.rb +5 -1
  106. data/lib/rubygems/gemcutter_utilities.rb +4 -4
  107. data/lib/rubygems/indexer.rb +1 -1
  108. data/lib/rubygems/install_update_options.rb +1 -1
  109. data/lib/rubygems/installer.rb +17 -19
  110. data/lib/rubygems/name_tuple.rb +1 -1
  111. data/lib/rubygems/package/old.rb +1 -1
  112. data/lib/rubygems/package/tar_reader/entry.rb +18 -20
  113. data/lib/rubygems/package/tar_reader.rb +0 -5
  114. data/lib/rubygems/package/tar_writer.rb +1 -1
  115. data/lib/rubygems/package.rb +18 -12
  116. data/lib/rubygems/platform.rb +6 -2
  117. data/lib/rubygems/query_utils.rb +5 -5
  118. data/lib/rubygems/remote_fetcher.rb +10 -2
  119. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  120. data/lib/rubygems/request_set.rb +2 -1
  121. data/lib/rubygems/requirement.rb +1 -1
  122. data/lib/rubygems/resolver/activation_request.rb +2 -4
  123. data/lib/rubygems/resolver/api_set.rb +2 -1
  124. data/lib/rubygems/resolver/api_specification.rb +1 -1
  125. data/lib/rubygems/resolver/installed_specification.rb +1 -1
  126. data/lib/rubygems/resolver/local_specification.rb +1 -1
  127. data/lib/rubygems/s3_uri_signer.rb +1 -1
  128. data/lib/rubygems/security/signer.rb +10 -2
  129. data/lib/rubygems/security/trust_dir.rb +8 -10
  130. data/lib/rubygems/security.rb +2 -2
  131. data/lib/rubygems/security_option.rb +1 -1
  132. data/lib/rubygems/source/local.rb +34 -37
  133. data/lib/rubygems/source.rb +7 -3
  134. data/lib/rubygems/source_list.rb +2 -2
  135. data/lib/rubygems/spec_fetcher.rb +29 -33
  136. data/lib/rubygems/specification.rb +43 -36
  137. data/lib/rubygems/specification_policy.rb +36 -35
  138. data/lib/rubygems/stub_specification.rb +13 -10
  139. data/lib/rubygems/uninstaller.rb +2 -2
  140. data/lib/rubygems/update_suggestion.rb +1 -1
  141. data/lib/rubygems/user_interaction.rb +2 -2
  142. data/lib/rubygems/util/licenses.rb +115 -0
  143. data/lib/rubygems/util.rb +5 -1
  144. data/lib/rubygems/validator.rb +5 -7
  145. data/lib/rubygems/version.rb +3 -2
  146. data/lib/rubygems/yaml_serializer.rb +88 -0
  147. data/lib/rubygems.rb +8 -10
  148. data/rubygems-update.gemspec +1 -1
  149. data/setup.rb +2 -0
  150. data/test/rubygems/bundler_test_gem.rb +6 -3
  151. data/test/rubygems/helper.rb +38 -32
  152. data/test/rubygems/package/tar_test_case.rb +2 -2
  153. data/test/rubygems/test_gem.rb +55 -30
  154. data/test/rubygems/test_gem_command.rb +3 -1
  155. data/test/rubygems/test_gem_commands_build_command.rb +2 -1
  156. data/test/rubygems/test_gem_commands_cert_command.rb +22 -22
  157. data/test/rubygems/test_gem_commands_cleanup_command.rb +2 -2
  158. data/test/rubygems/test_gem_commands_environment_command.rb +2 -1
  159. data/test/rubygems/test_gem_commands_exec_command.rb +5 -1
  160. data/test/rubygems/test_gem_commands_install_command.rb +3 -3
  161. data/test/rubygems/test_gem_commands_open_command.rb +5 -2
  162. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  163. data/test/rubygems/test_gem_commands_push_command.rb +7 -6
  164. data/test/rubygems/test_gem_commands_signin_command.rb +8 -8
  165. data/test/rubygems/test_gem_commands_stale_command.rb +1 -1
  166. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  167. data/test/rubygems/test_gem_commands_unpack_command.rb +2 -2
  168. data/test/rubygems/test_gem_config_file.rb +46 -12
  169. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +28 -12
  170. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +1 -1
  171. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +16 -14
  172. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  173. data/test/rubygems/test_gem_ext_cargo_builder.rb +2 -2
  174. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  175. data/test/rubygems/test_gem_indexer.rb +1 -1
  176. data/test/rubygems/test_gem_install_update_options.rb +3 -3
  177. data/test/rubygems/test_gem_installer.rb +15 -15
  178. data/test/rubygems/test_gem_package.rb +152 -36
  179. data/test/rubygems/test_gem_package_old.rb +1 -1
  180. data/test/rubygems/test_gem_package_tar_header.rb +10 -10
  181. data/test/rubygems/test_gem_package_tar_reader.rb +4 -4
  182. data/test/rubygems/test_gem_package_tar_reader_entry.rb +53 -1
  183. data/test/rubygems/test_gem_package_tar_writer.rb +41 -41
  184. data/test/rubygems/test_gem_rdoc.rb +2 -2
  185. data/test/rubygems/test_gem_remote_fetcher.rb +34 -34
  186. data/test/rubygems/test_gem_request.rb +5 -5
  187. data/test/rubygems/test_gem_request_connection_pools.rb +2 -1
  188. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +14 -7
  189. data/test/rubygems/test_gem_requirement.rb +1 -1
  190. data/test/rubygems/test_gem_security.rb +2 -2
  191. data/test/rubygems/test_gem_security_signer.rb +2 -2
  192. data/test/rubygems/test_gem_security_trust_dir.rb +6 -6
  193. data/test/rubygems/test_gem_spec_fetcher.rb +2 -2
  194. data/test/rubygems/test_gem_specification.rb +71 -35
  195. data/test/rubygems/test_gem_update_suggestion.rb +23 -23
  196. data/test/rubygems/test_gem_util.rb +2 -2
  197. data/test/rubygems/test_gem_version.rb +4 -2
  198. data/test/rubygems/test_require.rb +4 -6
  199. data/test/rubygems/utilities.rb +4 -3
  200. metadata +4 -3
@@ -43,6 +43,13 @@ module Bundler
43
43
  end
44
44
  end
45
45
 
46
+ class AmbiguousGitReference < GitError
47
+ def initialize(options)
48
+ msg = "Specification of branch or ref with tag is ambiguous. You specified #{options.inspect}"
49
+ super msg
50
+ end
51
+ end
52
+
46
53
  # The GitProxy is responsible to interact with git repositories.
47
54
  # All actions required by the Git source is encapsulated in this
48
55
  # object.
@@ -53,10 +60,15 @@ module Bundler
53
60
  def initialize(path, uri, options = {}, revision = nil, git = nil)
54
61
  @path = path
55
62
  @uri = uri
56
- @branch = options["branch"]
57
63
  @tag = options["tag"]
64
+ @branch = options["branch"]
58
65
  @ref = options["ref"]
59
- @explicit_ref = branch || tag || ref
66
+ if @tag
67
+ raise AmbiguousGitReference.new(options) if @branch || @ref
68
+ @explicit_ref = @tag
69
+ else
70
+ @explicit_ref = @ref || @branch
71
+ end
60
72
  @revision = revision
61
73
  @git = git
62
74
  @commit_ref = nil
@@ -118,7 +130,8 @@ module Bundler
118
130
  end
119
131
  end
120
132
 
121
- git "fetch", "--force", "--quiet", *extra_fetch_args, :dir => destination if @commit_ref
133
+ ref = @commit_ref || (locked_to_full_sha? && @revision)
134
+ git "fetch", "--force", "--quiet", *extra_fetch_args(ref), :dir => destination if ref
122
135
 
123
136
  git "reset", "--hard", @revision, :dir => destination
124
137
 
@@ -235,7 +248,15 @@ module Bundler
235
248
  end
236
249
 
237
250
  def pinned_to_full_sha?
238
- ref =~ /\A\h{40}\z/
251
+ full_sha_revision?(ref)
252
+ end
253
+
254
+ def locked_to_full_sha?
255
+ full_sha_revision?(@revision)
256
+ end
257
+
258
+ def full_sha_revision?(ref)
259
+ ref&.match?(/\A\h{40}\z/)
239
260
  end
240
261
 
241
262
  def git_null(*command, dir: nil)
@@ -399,9 +420,9 @@ module Bundler
399
420
  ["--depth", depth.to_s]
400
421
  end
401
422
 
402
- def extra_fetch_args
423
+ def extra_fetch_args(ref)
403
424
  extra_args = [path.to_s, *depth_args]
404
- extra_args.push(@commit_ref)
425
+ extra_args.push(ref)
405
426
  extra_args
406
427
  end
407
428
 
@@ -88,6 +88,7 @@ module Bundler
88
88
  end
89
89
 
90
90
  def self.from_lock(options)
91
+ options["remotes"] = Array(options.delete("remote")).reverse
91
92
  new(options)
92
93
  end
93
94
 
@@ -128,12 +129,12 @@ module Bundler
128
129
  def specs
129
130
  @specs ||= begin
130
131
  # remote_specs usually generates a way larger Index than the other
131
- # sources, and large_idx.use small_idx is way faster than
132
- # small_idx.use large_idx.
133
- idx = @allow_remote ? remote_specs.dup : Index.new
134
- idx.use(cached_specs, :override_dupes) if @allow_cached || @allow_remote
135
- idx.use(installed_specs, :override_dupes) if @allow_local
136
- idx
132
+ # sources, and large_idx.merge! small_idx is way faster than
133
+ # small_idx.merge! large_idx.
134
+ index = @allow_remote ? remote_specs.dup : Index.new
135
+ index.merge!(cached_specs) if @allow_cached || @allow_remote
136
+ index.merge!(installed_specs) if @allow_local
137
+ index
137
138
  end
138
139
  end
139
140
 
@@ -237,7 +238,7 @@ module Bundler
237
238
  end
238
239
 
239
240
  def spec_names
240
- if @allow_remote && dependency_api_available?
241
+ if dependency_api_available?
241
242
  remote_specs.spec_names
242
243
  else
243
244
  []
@@ -245,7 +246,7 @@ module Bundler
245
246
  end
246
247
 
247
248
  def unmet_deps
248
- if @allow_remote && dependency_api_available?
249
+ if dependency_api_available?
249
250
  remote_specs.unmet_dependency_names
250
251
  else
251
252
  []
@@ -260,7 +261,6 @@ module Bundler
260
261
  end
261
262
 
262
263
  def double_check_for(unmet_dependency_names)
263
- return unless @allow_remote
264
264
  return unless dependency_api_available?
265
265
 
266
266
  unmet_dependency_names = unmet_dependency_names.call
@@ -275,7 +275,9 @@ module Bundler
275
275
 
276
276
  Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"
277
277
 
278
- fetch_names(api_fetchers, unmet_dependency_names, specs, false)
278
+ fetch_names(api_fetchers, unmet_dependency_names, remote_specs)
279
+
280
+ specs.use remote_specs
279
281
  end
280
282
 
281
283
  def dependency_names_to_double_check
@@ -379,7 +381,7 @@ module Bundler
379
381
 
380
382
  def cached_specs
381
383
  @cached_specs ||= begin
382
- idx = @allow_local ? installed_specs.dup : Index.new
384
+ idx = Index.new
383
385
 
384
386
  Dir["#{cache_path}/*.gem"].each do |gemfile|
385
387
  s ||= Bundler.rubygems.spec_from_gem(gemfile)
@@ -392,35 +394,30 @@ module Bundler
392
394
  end
393
395
 
394
396
  def api_fetchers
395
- fetchers.select {|f| f.use_api && f.fetchers.first.api_fetcher? }
397
+ fetchers.select(&:api_fetcher?)
396
398
  end
397
399
 
398
400
  def remote_specs
399
401
  @remote_specs ||= Index.build do |idx|
400
402
  index_fetchers = fetchers - api_fetchers
401
403
 
402
- # gather lists from non-api sites
403
- fetch_names(index_fetchers, nil, idx, false)
404
-
405
- # legacy multi-remote sources need special logic to figure out
406
- # dependency names and that logic can be very costly if one remote
407
- # uses the dependency API but others don't. So use full indexes
408
- # consistently in that particular case.
409
- allow_api = !multiple_remotes?
410
-
411
- fetch_names(api_fetchers, allow_api && dependency_names, idx, false)
404
+ if index_fetchers.empty?
405
+ fetch_names(api_fetchers, dependency_names, idx)
406
+ else
407
+ fetch_names(fetchers, nil, idx)
408
+ end
412
409
  end
413
410
  end
414
411
 
415
- def fetch_names(fetchers, dependency_names, index, override_dupes)
412
+ def fetch_names(fetchers, dependency_names, index)
416
413
  fetchers.each do |f|
417
414
  if dependency_names
418
415
  Bundler.ui.info "Fetching gem metadata from #{URICredentialsFilter.credential_filtered_uri(f.uri)}", Bundler.ui.debug?
419
- index.use f.specs_with_retry(dependency_names, self), override_dupes
416
+ index.use f.specs_with_retry(dependency_names, self)
420
417
  Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
421
418
  else
422
419
  Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
423
- index.use f.specs_with_retry(nil, self), override_dupes
420
+ index.use f.specs_with_retry(nil, self)
424
421
  end
425
422
  end
426
423
  end
@@ -100,12 +100,12 @@ module Bundler
100
100
  end
101
101
  end
102
102
 
103
- def incomplete_ruby_specs?(deps)
103
+ def incomplete_for_platform?(deps, platform)
104
104
  return false if @specs.empty?
105
105
 
106
106
  @incomplete_specs = []
107
107
 
108
- self.for(deps, true, [Gem::Platform::RUBY])
108
+ self.for(deps, true, [platform])
109
109
 
110
110
  @incomplete_specs.any?
111
111
  end
@@ -16,7 +16,8 @@ module Bundler
16
16
  # Stub has no concept of source, which means that extension_dir may be wrong
17
17
  # This is the case for git-based gems. So, instead manually assign the extension dir
18
18
  return unless source.respond_to?(:extension_dir_name)
19
- path = File.join(stub.extensions_dir, source.extension_dir_name)
19
+ unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
20
+ path = File.join(stub.extensions_dir, unique_extension_dir)
20
21
  stub.extension_dir = File.expand_path(path)
21
22
  end
22
23
 
@@ -56,7 +57,7 @@ module Bundler
56
57
  end
57
58
 
58
59
  def gem_build_complete_path
59
- File.join(extension_dir, "gem.build_complete")
60
+ stub.gem_build_complete_path
60
61
  end
61
62
 
62
63
  def default_gem?
@@ -108,6 +109,7 @@ module Bundler
108
109
  end
109
110
 
110
111
  rs.source = source
112
+ rs.base_dir = stub.base_dir
111
113
 
112
114
  rs
113
115
  end
@@ -46,7 +46,9 @@ require "rb_sys/extensiontask"
46
46
 
47
47
  task build: :compile
48
48
 
49
- RbSys::ExtensionTask.new(<%= config[:name].inspect %>) do |ext|
49
+ GEMSPEC = Gem::Specification.load("<%= config[:underscored_name] %>.gemspec")
50
+
51
+ RbSys::ExtensionTask.new(<%= config[:name].inspect %>, GEMSPEC) do |ext|
50
52
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
51
53
  end
52
54
  <% else -%>
@@ -54,7 +56,9 @@ require "rake/extensiontask"
54
56
 
55
57
  task build: :compile
56
58
 
57
- Rake::ExtensionTask.new("<%= config[:underscored_name] %>") do |ext|
59
+ GEMSPEC = Gem::Specification.load("<%= config[:underscored_name] %>.gemspec")
60
+
61
+ Rake::ExtensionTask.new("<%= config[:underscored_name] %>", GEMSPEC) do |ext|
58
62
  ext.lib_dir = "lib/<%= config[:namespaced_path] %>"
59
63
  end
60
64
  <% end -%>
@@ -17,7 +17,7 @@ jobs:
17
17
  - '<%= RUBY_VERSION %>'
18
18
 
19
19
  steps:
20
- - uses: actions/checkout@v3
20
+ - uses: actions/checkout@v4
21
21
  <%- if config[:ext] == 'rust' -%>
22
22
  - name: Set up Ruby & Rust
23
23
  uses: oxidize-rb/actions/setup-ruby-and-rust@v1
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.4.19".freeze
4
+ VERSION = "2.4.21".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -54,8 +54,8 @@ module Bundler
54
54
  str.split(/\r?\n/).each do |line|
55
55
  if match = HASH_REGEX.match(line)
56
56
  indent, key, quote, val = match.captures
57
- key = convert_to_backward_compatible_key(key)
58
- depth = indent.scan(/ /).length
57
+ convert_to_backward_compatible_key!(key)
58
+ depth = indent.size / 2
59
59
  if quote.empty? && val.empty?
60
60
  new_hash = {}
61
61
  stack[depth][key] = new_hash
@@ -76,14 +76,13 @@ module Bundler
76
76
  end
77
77
 
78
78
  # for settings' keys
79
- def convert_to_backward_compatible_key(key)
80
- key = "#{key}/" if key =~ /https?:/i && key !~ %r{/\Z}
81
- key = key.gsub(".", "__") if key.include?(".")
82
- key
79
+ def convert_to_backward_compatible_key!(key)
80
+ key << "/" if /https?:/i.match?(key) && !%r{/\Z}.match?(key)
81
+ key.gsub!(".", "__")
83
82
  end
84
83
 
85
84
  class << self
86
- private :dump_hash, :convert_to_backward_compatible_key
85
+ private :dump_hash, :convert_to_backward_compatible_key!
87
86
  end
88
87
  end
89
88
  end
@@ -27,7 +27,7 @@ class Gem::AvailableSet
27
27
  s = o.set
28
28
  when Array
29
29
  s = o.map do |sp,so|
30
- if !sp.kind_of?(Gem::Specification) || !so.kind_of?(Gem::Source)
30
+ if !sp.is_a?(Gem::Specification) || !so.is_a?(Gem::Source)
31
31
  raise TypeError, "Array must be in [[spec, source], ...] form"
32
32
  end
33
33
 
@@ -133,9 +133,9 @@ class Gem::BasicSpecification
133
133
 
134
134
  def full_name
135
135
  if platform == Gem::Platform::RUBY || platform.nil?
136
- "#{name}-#{version}".dup.tap(&Gem::UNTAINT)
136
+ (+"#{name}-#{version}").tap(&Gem::UNTAINT)
137
137
  else
138
- "#{name}-#{version}-#{platform}".dup.tap(&Gem::UNTAINT)
138
+ (+"#{name}-#{version}-#{platform}").tap(&Gem::UNTAINT)
139
139
  end
140
140
  end
141
141
 
@@ -291,7 +291,7 @@ class Gem::BasicSpecification
291
291
  def lib_dirs_glob
292
292
  dirs = if self.raw_require_paths
293
293
  if self.raw_require_paths.size > 1
294
- "{#{self.raw_require_paths.join(',')}}"
294
+ "{#{self.raw_require_paths.join(",")}}"
295
295
  else
296
296
  self.raw_require_paths.first
297
297
  end
@@ -94,7 +94,7 @@ class Gem::Command
94
94
  # array or a string to be split on white space.
95
95
 
96
96
  def self.add_specific_extra_args(cmd,args)
97
- args = args.split(/\s+/) if args.kind_of? String
97
+ args = args.split(/\s+/) if args.is_a? String
98
98
  specific_extra_args_hash[cmd] = args
99
99
  end
100
100
 
@@ -228,7 +228,7 @@ class Gem::Command
228
228
 
229
229
  if args.size > 1
230
230
  raise Gem::CommandLineError,
231
- "Too many gem names (#{args.join(', ')}); please specify only one"
231
+ "Too many gem names (#{args.join(", ")}); please specify only one"
232
232
  end
233
233
 
234
234
  args.first
@@ -398,22 +398,21 @@ class Gem::Command
398
398
 
399
399
  def check_deprecated_options(options)
400
400
  options.each do |option|
401
- if option_is_deprecated?(option)
402
- deprecation = @deprecated_options[command][option]
403
- version_to_expire = deprecation["rg_version_to_expire"]
401
+ next unless option_is_deprecated?(option)
402
+ deprecation = @deprecated_options[command][option]
403
+ version_to_expire = deprecation["rg_version_to_expire"]
404
404
 
405
- deprecate_option_msg = if version_to_expire
406
- "The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}."
407
- else
408
- "The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems."
409
- end
405
+ deprecate_option_msg = if version_to_expire
406
+ "The \"#{option}\" option has been deprecated and will be removed in Rubygems #{version_to_expire}."
407
+ else
408
+ "The \"#{option}\" option has been deprecated and will be removed in future versions of Rubygems."
409
+ end
410
410
 
411
- extra_msg = deprecation["extra_msg"]
411
+ extra_msg = deprecation["extra_msg"]
412
412
 
413
- deprecate_option_msg += " #{extra_msg}" if extra_msg
413
+ deprecate_option_msg += " #{extra_msg}" if extra_msg
414
414
 
415
- alert_warning(deprecate_option_msg)
416
- end
415
+ alert_warning(deprecate_option_msg)
417
416
  end
418
417
  end
419
418
 
@@ -430,12 +429,10 @@ class Gem::Command
430
429
  # True if the command handles the given argument list.
431
430
 
432
431
  def handles?(args)
433
- begin
434
- parser.parse!(args.dup)
435
- return true
436
- rescue
437
- return false
438
- end
432
+ parser.parse!(args.dup)
433
+ return true
434
+ rescue StandardError
435
+ return false
439
436
  end
440
437
 
441
438
  ##
@@ -201,7 +201,7 @@ class Gem::CommandManager
201
201
 
202
202
  if possibilities.size > 1
203
203
  raise Gem::CommandLineError,
204
- "Ambiguous command #{cmd_name} matches [#{possibilities.join(', ')}]"
204
+ "Ambiguous command #{cmd_name} matches [#{possibilities.join(", ")}]"
205
205
  elsif possibilities.empty?
206
206
  raise Gem::UnknownCommandError.new(cmd_name)
207
207
  end
@@ -136,7 +136,7 @@ class Gem::Commands::CertCommand < Gem::Command
136
136
  end
137
137
 
138
138
  def build(email)
139
- if !valid_email?(email)
139
+ unless valid_email?(email)
140
140
  raise Gem::CommandLineError, "Invalid email address #{email}"
141
141
  end
142
142
 
@@ -178,7 +178,7 @@ class Gem::Commands::CertCommand < Gem::Command
178
178
 
179
179
  algorithm = options[:key_algorithm] || Gem::Security::DEFAULT_KEY_ALGORITHM
180
180
  key = Gem::Security.create_key(algorithm)
181
- key_path = Gem::Security.write key, "gem-private_key.pem", 0600, passphrase
181
+ key_path = Gem::Security.write key, "gem-private_key.pem", 0o600, passphrase
182
182
 
183
183
  return key, key_path
184
184
  end
@@ -292,7 +292,7 @@ For further reading on signing gems see `ri Gem::Security`.
292
292
  cert = File.read cert_file
293
293
  cert = OpenSSL::X509::Certificate.new cert
294
294
 
295
- permissions = File.stat(cert_file).mode & 0777
295
+ permissions = File.stat(cert_file).mode & 0o777
296
296
 
297
297
  issuer_cert = options[:issuer_cert]
298
298
  issuer_key = options[:key]
@@ -41,7 +41,11 @@ class Gem::Commands::CheckCommand < Gem::Command
41
41
  def check_gems
42
42
  say "Checking gems..."
43
43
  say
44
- gems = get_all_gem_names rescue []
44
+ gems = begin
45
+ get_all_gem_names
46
+ rescue StandardError
47
+ []
48
+ end
45
49
 
46
50
  Gem::Validator.new.alien(gems).sort.each do |key, val|
47
51
  unless val.empty?
@@ -90,7 +90,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
90
90
  verbose do
91
91
  skipped = @default_gems.map {|spec| spec.full_name }
92
92
 
93
- "Skipped default gems: #{skipped.join ', '}"
93
+ "Skipped default gems: #{skipped.join ", "}"
94
94
  end
95
95
  end
96
96
 
@@ -92,7 +92,7 @@ prefix or only the files that are requireable.
92
92
 
93
93
  def files_in_gem(spec)
94
94
  gem_path = spec.full_gem_path
95
- extra = "/{#{spec.require_paths.join ','}}" if options[:lib_only]
95
+ extra = "/{#{spec.require_paths.join ","}}" if options[:lib_only]
96
96
  glob = "#{gem_path}#{extra}/**/*"
97
97
  prefix_re = /#{Regexp.escape(gem_path)}\//
98
98
 
@@ -91,10 +91,9 @@ use with other commands.
91
91
 
92
92
  def display_pipe(specs) # :nodoc:
93
93
  specs.each do |spec|
94
- unless spec.dependencies.empty?
95
- spec.dependencies.sort_by {|dep| dep.name }.each do |dep|
96
- say "#{dep.name} --version '#{dep.requirement}'"
97
- end
94
+ next if spec.dependencies.empty?
95
+ spec.dependencies.sort_by {|dep| dep.name }.each do |dep|
96
+ say "#{dep.name} --version '#{dep.requirement}'"
98
97
  end
99
98
  end
100
99
  end
@@ -328,7 +328,7 @@ platform.
328
328
 
329
329
  summary_width = 80 - margin_width - desc_width
330
330
  wrap_indent = " " * (margin_width + desc_width)
331
- format = "#{' ' * margin_width}%-#{desc_width}s%s"
331
+ format = "#{" " * margin_width}%-#{desc_width}s%s"
332
332
 
333
333
  @command_manager.command_names.each do |cmd_name|
334
334
  command = @command_manager[cmd_name]
@@ -367,7 +367,7 @@ platform.
367
367
  command = @command_manager[possibilities.first]
368
368
  command.invoke("--help")
369
369
  elsif possibilities.size > 1
370
- alert_warning "Ambiguous command #{command_name} (#{possibilities.join(', ')})"
370
+ alert_warning "Ambiguous command #{command_name} (#{possibilities.join(", ")})"
371
371
  else
372
372
  alert_warning "Unknown command #{command_name}. Try: gem help commands"
373
373
  end
@@ -70,9 +70,7 @@ class Gem::Commands::OpenCommand < Gem::Command
70
70
  end
71
71
 
72
72
  def open_editor(path)
73
- Dir.chdir(path) do
74
- system(*@editor.split(/\s+/) + [path])
75
- end
73
+ system(*@editor.split(/\s+/) + [path], { :chdir => path })
76
74
  end
77
75
 
78
76
  def spec_for(name)
@@ -79,7 +79,7 @@ permission to.
79
79
 
80
80
  say "Owners for gem: #{name}"
81
81
  owners.each do |owner|
82
- say "- #{owner['email'] || owner['handle'] || owner['id']}"
82
+ say "- #{owner["email"] || owner["handle"] || owner["id"]}"
83
83
  end
84
84
  end
85
85
  end
@@ -94,16 +94,14 @@ permission to.
94
94
 
95
95
  def manage_owners(method, name, owners)
96
96
  owners.each do |owner|
97
- begin
98
- response = send_owner_request(method, name, owner)
99
- action = method == :delete ? "Removing" : "Adding"
100
-
101
- with_response response, "#{action} #{owner}"
102
- rescue Gem::WebauthnVerificationError => e
103
- raise e
104
- rescue StandardError
105
- # ignore early exits to allow for completing the iteration of all owners
106
- end
97
+ response = send_owner_request(method, name, owner)
98
+ action = method == :delete ? "Removing" : "Adding"
99
+
100
+ with_response response, "#{action} #{owner}"
101
+ rescue Gem::WebauthnVerificationError => e
102
+ raise e
103
+ rescue StandardError
104
+ # ignore early exits to allow for completing the iteration of all owners
107
105
  end
108
106
  end
109
107
 
@@ -134,7 +134,7 @@ prefix and suffix. If ruby was installed as `ruby18`, gem will be
134
134
  installed as `gem18`.
135
135
 
136
136
  By default, this RubyGems will install gem as:
137
- #{Gem.default_exec_format % 'gem'}
137
+ #{Gem.default_exec_format % "gem"}
138
138
  EOF
139
139
  end
140
140
 
@@ -243,7 +243,7 @@ By default, this RubyGems will install gem as:
243
243
  end
244
244
 
245
245
  def install_executables(bin_dir)
246
- prog_mode = options[:prog_mode] || 0755
246
+ prog_mode = options[:prog_mode] || 0o755
247
247
 
248
248
  executables = { "gem" => "exe" }
249
249
  executables.each do |tool, path|
@@ -369,7 +369,7 @@ By default, this RubyGems will install gem as:
369
369
  File.dirname(loaded_from)
370
370
  else
371
371
  target_specs_dir = File.join(default_dir, "specifications", "default")
372
- mkdir_p target_specs_dir, :mode => 0755
372
+ mkdir_p target_specs_dir, :mode => 0o755
373
373
  target_specs_dir
374
374
  end
375
375
 
@@ -393,7 +393,7 @@ By default, this RubyGems will install gem as:
393
393
  end
394
394
 
395
395
  bundler_bin_dir = bundler_spec.bin_dir
396
- mkdir_p bundler_bin_dir, :mode => 0755
396
+ mkdir_p bundler_bin_dir, :mode => 0o755
397
397
  bundler_spec.executables.each do |e|
398
398
  cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_bin_dir, e)
399
399
  end
@@ -430,8 +430,8 @@ By default, this RubyGems will install gem as:
430
430
  lib_dir, bin_dir = generate_default_dirs
431
431
  end
432
432
 
433
- mkdir_p lib_dir, :mode => 0755
434
- mkdir_p bin_dir, :mode => 0755
433
+ mkdir_p lib_dir, :mode => 0o755
434
+ mkdir_p bin_dir, :mode => 0o755
435
435
 
436
436
  return lib_dir, bin_dir
437
437
  end
@@ -639,10 +639,10 @@ abort "#{deprecation_message}"
639
639
  dest_file = File.join dest_dir, file
640
640
  dest_dir = File.dirname dest_file
641
641
  unless File.directory? dest_dir
642
- mkdir_p dest_dir, :mode => 0755
642
+ mkdir_p dest_dir, :mode => 0o755
643
643
  end
644
644
 
645
- install file, dest_file, :mode => options[:data_mode] || 0644
645
+ install file, dest_file, :mode => options[:data_mode] || 0o644
646
646
  end
647
647
 
648
648
  def remove_file_list(files, dir)
@@ -107,7 +107,11 @@ Specific fields in the specification can be extracted in YAML format:
107
107
 
108
108
  if local?
109
109
  if File.exist? gem
110
- specs << Gem::Package.new(gem).spec rescue nil
110
+ begin
111
+ specs << Gem::Package.new(gem).spec
112
+ rescue StandardError
113
+ nil
114
+ end
111
115
  end
112
116
 
113
117
  if specs.empty?
@@ -34,7 +34,7 @@ longer using.
34
34
  end
35
35
 
36
36
  gem_to_atime.sort_by {|_, atime| atime }.each do |name, atime|
37
- say "#{name} at #{atime.strftime '%c'}"
37
+ say "#{name} at #{atime.strftime "%c"}"
38
38
  end
39
39
  end
40
40
  end
@@ -169,15 +169,14 @@ that is a dependency of an existing gem. You can use the
169
169
  gems_to_uninstall = {}
170
170
 
171
171
  deps.each do |dep|
172
- unless gems_to_uninstall[dep.name]
173
- gems_to_uninstall[dep.name] = true
172
+ next if gems_to_uninstall[dep.name]
173
+ gems_to_uninstall[dep.name] = true
174
174
 
175
- unless original_gem_version[dep.name] == Gem::Requirement.default
176
- options[:version] = dep.version
177
- end
178
-
179
- uninstall_gem(dep.name)
175
+ unless original_gem_version[dep.name] == Gem::Requirement.default
176
+ options[:version] = dep.version
180
177
  end
178
+
179
+ uninstall_gem(dep.name)
181
180
  end
182
181
  end
183
182