rubygems-update 3.2.0.rc.2 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +54 -51
  3. data/Manifest.txt +32 -29
  4. data/Rakefile +3 -1
  5. data/bundler/CHANGELOG.md +35 -1
  6. data/bundler/UPGRADING.md +1 -1
  7. data/bundler/lib/bundler.rb +4 -0
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/cli.rb +5 -2
  10. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  11. data/bundler/lib/bundler/cli/exec.rb +3 -3
  12. data/bundler/lib/bundler/cli/outdated.rb +2 -4
  13. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  14. data/bundler/lib/bundler/definition.rb +4 -9
  15. data/bundler/lib/bundler/env.rb +1 -1
  16. data/bundler/lib/bundler/feature_flag.rb +0 -1
  17. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  18. data/bundler/lib/bundler/friendly_errors.rb +15 -0
  19. data/bundler/lib/bundler/index.rb +5 -1
  20. data/bundler/lib/bundler/injector.rb +9 -2
  21. data/bundler/lib/bundler/installer.rb +7 -5
  22. data/bundler/lib/bundler/lazy_specification.rb +5 -7
  23. data/bundler/lib/bundler/man/.document +1 -0
  24. data/bundler/{man → lib/bundler/man}/bundle-add.1.ronn +0 -0
  25. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1.ronn +0 -0
  26. data/bundler/{man → lib/bundler/man}/bundle-cache.1.ronn +0 -0
  27. data/bundler/{man → lib/bundler/man}/bundle-check.1.ronn +0 -0
  28. data/bundler/{man → lib/bundler/man}/bundle-clean.1.ronn +0 -0
  29. data/bundler/{man → lib/bundler/man}/bundle-config.1.ronn +1 -9
  30. data/bundler/{man → lib/bundler/man}/bundle-doctor.1.ronn +0 -0
  31. data/bundler/{man → lib/bundler/man}/bundle-exec.1.ronn +0 -0
  32. data/bundler/{man → lib/bundler/man}/bundle-gem.1.ronn +0 -0
  33. data/bundler/{man → lib/bundler/man}/bundle-info.1.ronn +0 -0
  34. data/bundler/{man → lib/bundler/man}/bundle-init.1.ronn +0 -0
  35. data/bundler/{man → lib/bundler/man}/bundle-inject.1.ronn +0 -0
  36. data/bundler/{man → lib/bundler/man}/bundle-install.1.ronn +1 -1
  37. data/bundler/{man → lib/bundler/man}/bundle-list.1.ronn +0 -0
  38. data/bundler/{man → lib/bundler/man}/bundle-lock.1.ronn +0 -0
  39. data/bundler/{man → lib/bundler/man}/bundle-open.1.ronn +0 -0
  40. data/bundler/{man → lib/bundler/man}/bundle-outdated.1.ronn +0 -0
  41. data/bundler/{man → lib/bundler/man}/bundle-platform.1.ronn +0 -0
  42. data/bundler/{man → lib/bundler/man}/bundle-pristine.1.ronn +0 -0
  43. data/bundler/{man → lib/bundler/man}/bundle-remove.1.ronn +0 -0
  44. data/bundler/{man → lib/bundler/man}/bundle-show.1.ronn +0 -0
  45. data/bundler/{man → lib/bundler/man}/bundle-update.1.ronn +0 -0
  46. data/bundler/{man → lib/bundler/man}/bundle-viz.1.ronn +0 -0
  47. data/bundler/{man → lib/bundler/man}/bundle.1.ronn +0 -0
  48. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +0 -0
  49. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  50. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  51. data/bundler/lib/bundler/resolver.rb +2 -3
  52. data/bundler/lib/bundler/rubygems_integration.rb +4 -0
  53. data/bundler/lib/bundler/settings.rb +0 -1
  54. data/bundler/lib/bundler/source/git/git_proxy.rb +1 -1
  55. data/bundler/lib/bundler/spec_set.rb +1 -0
  56. data/bundler/lib/bundler/templates/newgem/README.md.tt +0 -1
  57. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -2
  58. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -0
  59. data/bundler/lib/bundler/uri_credentials_filter.rb +2 -0
  60. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  61. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  62. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  63. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  64. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  65. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  66. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +4 -7
  67. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  68. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  69. data/bundler/lib/bundler/version.rb +1 -1
  70. data/bundler/man/bundle-add.1 +1 -1
  71. data/bundler/man/bundle-binstubs.1 +1 -1
  72. data/bundler/man/bundle-cache.1 +1 -1
  73. data/bundler/man/bundle-check.1 +1 -1
  74. data/bundler/man/bundle-clean.1 +1 -1
  75. data/bundler/man/bundle-config.1 +2 -5
  76. data/bundler/man/bundle-doctor.1 +1 -1
  77. data/bundler/man/bundle-exec.1 +1 -1
  78. data/bundler/man/bundle-gem.1 +1 -1
  79. data/bundler/man/bundle-info.1 +1 -1
  80. data/bundler/man/bundle-init.1 +1 -1
  81. data/bundler/man/bundle-inject.1 +1 -1
  82. data/bundler/man/bundle-install.1 +2 -2
  83. data/bundler/man/bundle-list.1 +1 -1
  84. data/bundler/man/bundle-lock.1 +1 -1
  85. data/bundler/man/bundle-open.1 +1 -1
  86. data/bundler/man/bundle-outdated.1 +1 -1
  87. data/bundler/man/bundle-platform.1 +1 -1
  88. data/bundler/man/bundle-pristine.1 +1 -1
  89. data/bundler/man/bundle-remove.1 +1 -1
  90. data/bundler/man/bundle-show.1 +1 -1
  91. data/bundler/man/bundle-update.1 +1 -1
  92. data/bundler/man/bundle-viz.1 +1 -1
  93. data/bundler/man/bundle.1 +1 -1
  94. data/bundler/man/gemfile.5 +1 -1
  95. data/bundler/man/index.txt +25 -0
  96. data/lib/rubygems.rb +6 -2
  97. data/lib/rubygems/available_set.rb +1 -1
  98. data/lib/rubygems/command_manager.rb +2 -2
  99. data/lib/rubygems/commands/build_command.rb +37 -20
  100. data/lib/rubygems/commands/cert_command.rb +1 -1
  101. data/lib/rubygems/commands/help_command.rb +2 -0
  102. data/lib/rubygems/commands/owner_command.rb +10 -2
  103. data/lib/rubygems/commands/pristine_command.rb +1 -1
  104. data/lib/rubygems/commands/push_command.rb +7 -3
  105. data/lib/rubygems/commands/query_command.rb +17 -0
  106. data/lib/rubygems/commands/server_command.rb +4 -0
  107. data/lib/rubygems/commands/setup_command.rb +25 -45
  108. data/lib/rubygems/commands/sources_command.rb +6 -2
  109. data/lib/rubygems/commands/specification_command.rb +6 -0
  110. data/lib/rubygems/commands/yank_command.rb +4 -4
  111. data/lib/rubygems/core_ext/kernel_require.rb +3 -0
  112. data/lib/rubygems/core_ext/kernel_warn.rb +6 -7
  113. data/lib/rubygems/defaults.rb +2 -2
  114. data/lib/rubygems/dependency.rb +1 -1
  115. data/lib/rubygems/dependency_installer.rb +4 -3
  116. data/lib/rubygems/ext/builder.rb +13 -32
  117. data/lib/rubygems/ext/cmake_builder.rb +4 -4
  118. data/lib/rubygems/ext/configure_builder.rb +4 -4
  119. data/lib/rubygems/ext/ext_conf_builder.rb +19 -14
  120. data/lib/rubygems/ext/rake_builder.rb +3 -3
  121. data/lib/rubygems/gemcutter_utilities.rb +90 -14
  122. data/lib/rubygems/indexer.rb +0 -1
  123. data/lib/rubygems/install_update_options.rb +2 -2
  124. data/lib/rubygems/installer.rb +12 -9
  125. data/lib/rubygems/installer_test_case.rb +7 -6
  126. data/lib/rubygems/name_tuple.rb +1 -1
  127. data/lib/rubygems/openssl.rb +4 -4
  128. data/lib/rubygems/package.rb +3 -2
  129. data/lib/rubygems/package/tar_header.rb +1 -1
  130. data/lib/rubygems/package/tar_test_case.rb +1 -1
  131. data/lib/rubygems/platform.rb +18 -7
  132. data/lib/rubygems/query_utils.rb +0 -9
  133. data/lib/rubygems/remote_fetcher.rb +1 -2
  134. data/lib/rubygems/request.rb +4 -3
  135. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -4
  136. data/lib/rubygems/requirement.rb +1 -1
  137. data/lib/rubygems/resolver.rb +1 -1
  138. data/lib/rubygems/resolver/activation_request.rb +9 -1
  139. data/lib/rubygems/resolver/api_specification.rb +5 -1
  140. data/lib/rubygems/resolver/conflict.rb +1 -1
  141. data/lib/rubygems/resolver/dependency_request.rb +1 -1
  142. data/lib/rubygems/resolver/index_specification.rb +11 -0
  143. data/lib/rubygems/resolver/installer_set.rb +1 -2
  144. data/lib/rubygems/resolver/lock_set.rb +1 -1
  145. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  146. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  147. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  148. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  149. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  150. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  151. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  152. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  153. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  154. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  155. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  156. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  157. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  158. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  159. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  160. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  161. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  162. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  163. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  164. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  165. data/lib/rubygems/resolver/specification.rb +1 -1
  166. data/lib/rubygems/s3_uri_signer.rb +1 -1
  167. data/lib/rubygems/security.rb +1 -2
  168. data/lib/rubygems/security/policy.rb +1 -1
  169. data/lib/rubygems/security/signer.rb +1 -1
  170. data/lib/rubygems/server.rb +1 -1
  171. data/lib/rubygems/source.rb +10 -4
  172. data/lib/rubygems/spec_fetcher.rb +1 -1
  173. data/lib/rubygems/specification.rb +8 -8
  174. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  175. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  176. data/lib/rubygems/stub_specification.rb +1 -1
  177. data/lib/rubygems/test_case.rb +13 -26
  178. data/lib/rubygems/uri_formatter.rb +2 -1
  179. data/lib/rubygems/version_option.rb +6 -0
  180. data/rubygems-update.gemspec +1 -1
  181. data/test/rubygems/test_bundled_ca.rb +9 -5
  182. data/test/rubygems/test_gem.rb +3 -3
  183. data/test/rubygems/test_gem_commands_build_command.rb +197 -5
  184. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  185. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  186. data/test/rubygems/test_gem_commands_contents_command.rb +2 -2
  187. data/test/rubygems/test_gem_commands_help_command.rb +15 -2
  188. data/test/rubygems/test_gem_commands_install_command.rb +1 -1
  189. data/test/rubygems/test_gem_commands_owner_command.rb +49 -1
  190. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  191. data/test/rubygems/test_gem_commands_push_command.rb +31 -5
  192. data/test/rubygems/test_gem_commands_query_command.rb +3 -3
  193. data/test/rubygems/test_gem_commands_setup_command.rb +13 -18
  194. data/test/rubygems/test_gem_commands_signin_command.rb +27 -3
  195. data/test/rubygems/test_gem_commands_sources_command.rb +60 -0
  196. data/test/rubygems/test_gem_commands_specification_command.rb +28 -0
  197. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  198. data/test/rubygems/test_gem_commands_yank_command.rb +31 -1
  199. data/test/rubygems/test_gem_dependency_installer.rb +36 -2
  200. data/test/rubygems/test_gem_dependency_list.rb +2 -2
  201. data/test/rubygems/test_gem_ext_builder.rb +10 -14
  202. data/test/rubygems/test_gem_ext_cmake_builder.rb +3 -9
  203. data/test/rubygems/test_gem_ext_configure_builder.rb +3 -9
  204. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -26
  205. data/test/rubygems/test_gem_ext_rake_builder.rb +5 -13
  206. data/test/rubygems/test_gem_gem_runner.rb +5 -4
  207. data/test/rubygems/test_gem_gemcutter_utilities.rb +3 -3
  208. data/test/rubygems/test_gem_install_update_options.rb +15 -3
  209. data/test/rubygems/test_gem_installer.rb +74 -11
  210. data/test/rubygems/test_gem_package.rb +8 -8
  211. data/test/rubygems/test_gem_package_old.rb +4 -4
  212. data/test/rubygems/test_gem_package_tar_writer.rb +1 -1
  213. data/test/rubygems/test_gem_platform.rb +63 -4
  214. data/test/rubygems/test_gem_remote_fetcher.rb +14 -18
  215. data/test/rubygems/test_gem_request.rb +2 -2
  216. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  217. data/test/rubygems/test_gem_resolver_api_set.rb +8 -8
  218. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  219. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -1
  220. data/test/rubygems/test_gem_security.rb +2 -2
  221. data/test/rubygems/test_gem_security_policy.rb +2 -2
  222. data/test/rubygems/test_gem_security_signer.rb +2 -2
  223. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  224. data/test/rubygems/test_gem_source.rb +5 -0
  225. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  226. data/test/rubygems/test_gem_specification.rb +5 -4
  227. data/test/rubygems/test_gem_uninstaller.rb +7 -7
  228. data/test/rubygems/test_gem_validator.rb +1 -1
  229. data/test/rubygems/test_gem_version_option.rb +1 -1
  230. data/test/rubygems/test_require.rb +50 -9
  231. metadata +35 -32
  232. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  233. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  234. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -311,4 +311,4 @@ For further reading on signing gems see `ri Gem::Security`.
311
311
  # It's simple, but is all we need
312
312
  email =~ /\A.+@.+\z/
313
313
  end
314
- end if defined?(OpenSSL::SSL)
314
+ end if Gem::HAVE_OPENSSL
@@ -332,6 +332,8 @@ platform.
332
332
  @command_manager.command_names.each do |cmd_name|
333
333
  command = @command_manager[cmd_name]
334
334
 
335
+ next if command.deprecated?
336
+
335
337
  summary =
336
338
  if command
337
339
  command.summary
@@ -53,7 +53,7 @@ permission to.
53
53
  def execute
54
54
  @host = options[:host]
55
55
 
56
- sign_in
56
+ sign_in(scope: get_owner_scope)
57
57
  name = get_one_gem_name
58
58
 
59
59
  add_owners name, options[:add]
@@ -102,10 +102,18 @@ permission to.
102
102
  private
103
103
 
104
104
  def send_owner_request(method, name, owner)
105
- rubygems_api_request method, "api/v1/gems/#{name}/owners" do |request|
105
+ rubygems_api_request method, "api/v1/gems/#{name}/owners", scope: get_owner_scope(method: method) do |request|
106
106
  request.set_form_data 'email' => owner
107
107
  request.add_field "Authorization", api_key
108
108
  request.add_field "OTP", options[:otp] if options[:otp]
109
109
  end
110
110
  end
111
+
112
+ def get_owner_scope(method: nil)
113
+ if method == :post || options.any? && options[:add].any?
114
+ :add_owner
115
+ elsif method == :delete || options.any? && options[:remove].any?
116
+ :remove_owner
117
+ end
118
+ end
111
119
  end
@@ -170,7 +170,7 @@ extensions will be restored.
170
170
  :install_dir => spec.base_dir,
171
171
  :env_shebang => env_shebang,
172
172
  :build_args => spec.build_args,
173
- :bin_dir => bin_dir
173
+ :bin_dir => bin_dir,
174
174
  }
175
175
 
176
176
  if options[:only_executables]
@@ -61,7 +61,7 @@ The push command will use ~/.gem/credentials to authenticate to a server, but yo
61
61
  options[:host]
62
62
  end
63
63
 
64
- sign_in @host
64
+ sign_in @host, scope: get_push_scope
65
65
 
66
66
  send_gem(gem_name)
67
67
  end
@@ -86,7 +86,7 @@ The push command will use ~/.gem/credentials to authenticate to a server, but yo
86
86
  private
87
87
 
88
88
  def send_push_request(name, args)
89
- rubygems_api_request(*args) do |request|
89
+ rubygems_api_request(*args, scope: get_push_scope) do |request|
90
90
  request.body = Gem.read_binary name
91
91
  request.add_field "Content-Length", request.body.size
92
92
  request.add_field "Content-Type", "application/octet-stream"
@@ -100,7 +100,11 @@ The push command will use ~/.gem/credentials to authenticate to a server, but yo
100
100
 
101
101
  [
102
102
  gem_metadata["default_gem_server"],
103
- gem_metadata["allowed_push_host"]
103
+ gem_metadata["allowed_push_host"],
104
104
  ]
105
105
  end
106
+
107
+ def get_push_scope
108
+ :push_rubygem
109
+ end
106
110
  end
@@ -9,6 +9,14 @@ class Gem::Commands::QueryCommand < Gem::Command
9
9
 
10
10
  include Gem::QueryUtils
11
11
 
12
+ alias warning_without_suggested_alternatives deprecation_warning
13
+ def deprecation_warning
14
+ warning_without_suggested_alternatives
15
+
16
+ message = "It is recommended that you use `gem search` or `gem list` instead.\n"
17
+ alert_warning message unless Gem::Deprecate.skip
18
+ end
19
+
12
20
  def initialize(name = 'query',
13
21
  summary = 'Query gem information in local or remote repositories')
14
22
  super name, summary,
@@ -23,4 +31,13 @@ class Gem::Commands::QueryCommand < Gem::Command
23
31
 
24
32
  add_query_options
25
33
  end
34
+
35
+ def description # :nodoc:
36
+ <<-EOF
37
+ The query command is the basis for the list and search commands.
38
+
39
+ You should really use the list and search commands instead. This command
40
+ is too hard to use.
41
+ EOF
42
+ end
26
43
  end
@@ -1,8 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/command'
3
3
  require 'rubygems/server'
4
+ require 'rubygems/deprecate'
4
5
 
5
6
  class Gem::Commands::ServerCommand < Gem::Command
7
+ extend Gem::Deprecate
8
+ rubygems_deprecate_command
9
+
6
10
  def initialize
7
11
  super 'server', 'Documentation and gem repository HTTP server',
8
12
  :port => 8808, :gemdir => [], :daemon => false
@@ -322,13 +322,10 @@ By default, this RubyGems will install gem as:
322
322
  libs.each do |tool, path|
323
323
  say "Installing #{tool}" if @verbose
324
324
 
325
- lib_files = rb_files_in path
326
- lib_files.concat(bundler_template_files) if tool == 'Bundler'
327
-
328
- pem_files = pem_files_in path
325
+ lib_files = files_in path
329
326
 
330
327
  Dir.chdir path do
331
- install_file_list(lib_files + pem_files, lib_dir)
328
+ install_file_list(lib_files, lib_dir)
332
329
  end
333
330
  end
334
331
  end
@@ -394,10 +391,6 @@ By default, this RubyGems will install gem as:
394
391
  specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
395
392
  mkdir_p specs_dir, :mode => 0755
396
393
 
397
- # Workaround for non-git environment.
398
- gemspec = File.open('bundler/bundler.gemspec', 'rb'){|f| f.read.gsub(/`git ls-files -z`/, "''") }
399
- File.open('bundler/bundler.gemspec', 'w'){|f| f.write gemspec }
400
-
401
394
  bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
402
395
  bundler_spec.files = Dir.chdir("bundler") { Dir["{*.md,{lib,exe,man}/**/*}"] }
403
396
  bundler_spec.executables -= %w[bundler bundle_ruby]
@@ -518,44 +511,24 @@ By default, this RubyGems will install gem as:
518
511
  [lib_dir, bin_dir]
519
512
  end
520
513
 
521
- def pem_files_in(dir)
522
- Dir.chdir dir do
523
- Dir[File.join('**', '*pem')]
524
- end
525
- end
526
-
527
- def rb_files_in(dir)
514
+ def files_in(dir)
528
515
  Dir.chdir dir do
529
- Dir[File.join('**', '*rb')]
516
+ Dir.glob(File.join('**', '*'), File::FNM_DOTMATCH).
517
+ select{|f| !File.directory?(f) }
530
518
  end
531
519
  end
532
520
 
533
521
  # for installation of bundler as default gems
534
522
  def bundler_man1_files_in(dir)
535
523
  Dir.chdir dir do
536
- Dir['bundle*.1{,.txt,.ronn}']
524
+ Dir['bundle*.1']
537
525
  end
538
526
  end
539
527
 
540
528
  # for installation of bundler as default gems
541
529
  def bundler_man5_files_in(dir)
542
530
  Dir.chdir dir do
543
- Dir['gemfile.5{,.txt,.ronn}']
544
- end
545
- end
546
-
547
- def bundler_template_files
548
- Dir.chdir "bundler/lib" do
549
- Dir.glob(File.join('bundler', 'templates', '**', '*'), File::FNM_DOTMATCH).
550
- select{|f| !File.directory?(f) }
551
- end
552
- end
553
-
554
- # for cleanup old bundler files
555
- def template_files_in(dir)
556
- Dir.chdir dir do
557
- Dir.glob(File.join('templates', '**', '*'), File::FNM_DOTMATCH).
558
- select{|f| !File.directory?(f) }
531
+ Dir['gemfile.5']
559
532
  end
560
533
  end
561
534
 
@@ -595,11 +568,9 @@ abort "#{deprecation_message}"
595
568
  lib_dirs = { File.join(lib_dir, 'rubygems') => 'lib/rubygems' }
596
569
  lib_dirs[File.join(lib_dir, 'bundler')] = 'bundler/lib/bundler'
597
570
  lib_dirs.each do |old_lib_dir, new_lib_dir|
598
- lib_files = rb_files_in(new_lib_dir)
599
- lib_files.concat(template_files_in(new_lib_dir)) if new_lib_dir =~ /bundler/
571
+ lib_files = files_in(new_lib_dir)
600
572
 
601
- old_lib_files = rb_files_in(old_lib_dir)
602
- old_lib_files.concat(template_files_in(old_lib_dir)) if old_lib_dir =~ /bundler/
573
+ old_lib_files = files_in(old_lib_dir)
603
574
 
604
575
  to_remove = old_lib_files - lib_files
605
576
 
@@ -617,16 +588,25 @@ abort "#{deprecation_message}"
617
588
  def remove_old_man_files(man_dir)
618
589
  man_dirs = { man_dir => "bundler/man" }
619
590
  man_dirs.each do |old_man_dir, new_man_dir|
620
- ["1", "5"].each do |section|
621
- man_files = send(:"bundler_man#{section}_files_in", new_man_dir)
591
+ man1_files = bundler_man1_files_in(new_man_dir)
622
592
 
623
- old_man_dir_with_section = "#{old_man_dir}/man#{section}"
624
- old_man_files = send(:"bundler_man#{section}_files_in", old_man_dir_with_section)
593
+ old_man1_dir = "#{old_man_dir}/man1"
594
+ old_man1_files = bundler_man1_files_in(old_man1_dir)
595
+ old_man1_files += Dir.chdir(old_man1_dir) { Dir["bundle*.1.{txt,ronn}"] }
625
596
 
626
- man_to_remove = old_man_files - man_files
597
+ man1_to_remove = old_man1_files - man1_files
627
598
 
628
- remove_file_list(man_to_remove, old_man_dir_with_section)
629
- end
599
+ remove_file_list(man1_to_remove, old_man1_dir)
600
+
601
+ man5_files = bundler_man5_files_in(new_man_dir)
602
+
603
+ old_man5_dir = "#{old_man_dir}/man5"
604
+ old_man5_files = bundler_man5_files_in(old_man5_dir)
605
+ old_man5_files += Dir.chdir(old_man5_dir) { Dir["gemfile.5.{txt,ronn}"] }
606
+
607
+ man5_to_remove = old_man5_files - man5_files
608
+
609
+ remove_file_list(man5_to_remove, old_man5_dir)
630
610
  end
631
611
  end
632
612
 
@@ -34,6 +34,10 @@ class Gem::Commands::SourcesCommand < Gem::Command
34
34
  options[:update] = value
35
35
  end
36
36
 
37
+ add_option '-f', '--[no-]force', "Do not show any confirmation prompts and behave as if 'yes' was always answered" do |value, options|
38
+ options[:force] = value
39
+ end
40
+
37
41
  add_proxy_option
38
42
  end
39
43
 
@@ -71,7 +75,7 @@ class Gem::Commands::SourcesCommand < Gem::Command
71
75
  Do you want to add this source?
72
76
  QUESTION
73
77
 
74
- terminate_interaction 1 unless ask_yes_no question
78
+ terminate_interaction 1 unless options[:force] || ask_yes_no(question)
75
79
  end
76
80
  end
77
81
 
@@ -86,7 +90,7 @@ https://rubygems.org is recommended for security over #{uri}
86
90
  Do you want to add this insecure source?
87
91
  QUESTION
88
92
 
89
- terminate_interaction 1 unless ask_yes_no question
93
+ terminate_interaction 1 unless options[:force] || ask_yes_no(question)
90
94
  end
91
95
  end
92
96
 
@@ -126,6 +126,12 @@ Specific fields in the specification can be extracted in YAML format:
126
126
  terminate_interaction 1
127
127
  end
128
128
 
129
+ platform = get_platform_from_requirements(options)
130
+
131
+ if platform
132
+ specs = specs.select{|s| s.platform.to_s == platform }
133
+ end
134
+
129
135
  unless options[:all]
130
136
  specs = [specs.max_by {|s| s.version }]
131
137
  end
@@ -47,7 +47,7 @@ data you will need to change them immediately and yank your gem.
47
47
  def execute
48
48
  @host = options[:host]
49
49
 
50
- sign_in @host
50
+ sign_in @host, scope: get_yank_scope
51
51
 
52
52
  version = get_version_from_requirements(options[:version])
53
53
  platform = get_platform_from_requirements(options)
@@ -72,7 +72,7 @@ data you will need to change them immediately and yank your gem.
72
72
 
73
73
  def yank_api_request(method, version, platform, api)
74
74
  name = get_one_gem_name
75
- response = rubygems_api_request(method, api, host) do |request|
75
+ response = rubygems_api_request(method, api, host, scope: get_yank_scope) do |request|
76
76
  request.add_field("Authorization", api_key)
77
77
  request.add_field("OTP", options[:otp]) if options[:otp]
78
78
 
@@ -93,7 +93,7 @@ data you will need to change them immediately and yank your gem.
93
93
  nil
94
94
  end
95
95
 
96
- def get_platform_from_requirements(requirements)
97
- Gem.platforms[1].to_s if requirements.key? :added_platform
96
+ def get_yank_scope
97
+ :yank_rubygem
98
98
  end
99
99
  end
@@ -17,6 +17,8 @@ module Kernel
17
17
  private :gem_original_require
18
18
  end
19
19
 
20
+ file = Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES ? "<internal:#{__FILE__}>" : __FILE__
21
+ module_eval <<'RUBY', file, __LINE__ + 1
20
22
  ##
21
23
  # When RubyGems is required, Kernel#require is replaced with our own which
22
24
  # is capable of loading gems on demand.
@@ -166,6 +168,7 @@ module Kernel
166
168
  end
167
169
  end
168
170
  end
171
+ RUBY
169
172
 
170
173
  private :require
171
174
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # `uplevel` keyword argument of Kernel#warn is available since ruby 2.5.
4
- if RUBY_VERSION >= "2.5"
4
+ if RUBY_VERSION >= "2.5" && !Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES
5
5
 
6
6
  module Kernel
7
7
  rubygems_path = "#{__dir__}/" # Frames to be skipped start with this path.
8
8
 
9
- original_warn = method(:warn)
9
+ original_warn = instance_method(:warn)
10
10
 
11
11
  remove_method :warn
12
12
 
@@ -17,9 +17,9 @@ if RUBY_VERSION >= "2.5"
17
17
  module_function define_method(:warn) {|*messages, **kw|
18
18
  unless uplevel = kw[:uplevel]
19
19
  if Gem.java_platform?
20
- return original_warn.call(*messages)
20
+ return original_warn.bind(self).call(*messages)
21
21
  else
22
- return original_warn.call(*messages, **kw)
22
+ return original_warn.bind(self).call(*messages, **kw)
23
23
  end
24
24
  end
25
25
 
@@ -45,11 +45,10 @@ if RUBY_VERSION >= "2.5"
45
45
  end
46
46
  end
47
47
  end
48
- uplevel = start
48
+ kw[:uplevel] = start
49
49
  end
50
50
 
51
- kw[:uplevel] = uplevel
52
- original_warn.call(*messages, **kw)
51
+ original_warn.bind(self).call(*messages, **kw)
53
52
  }
54
53
  end
55
54
  end
@@ -38,13 +38,13 @@ module Gem
38
38
  [
39
39
  File.dirname(RbConfig::CONFIG['sitedir']),
40
40
  'Gems',
41
- RbConfig::CONFIG['ruby_version']
41
+ RbConfig::CONFIG['ruby_version'],
42
42
  ]
43
43
  else
44
44
  [
45
45
  RbConfig::CONFIG['rubylibprefix'],
46
46
  'gems',
47
- RbConfig::CONFIG['ruby_version']
47
+ RbConfig::CONFIG['ruby_version'],
48
48
  ]
49
49
  end
50
50
 
@@ -281,7 +281,7 @@ class Gem::Dependency
281
281
 
282
282
  if platform_only
283
283
  matches.reject! do |spec|
284
- spec.nil? || !Gem::Platform.match(spec.platform)
284
+ spec.nil? || !Gem::Platform.match_spec?(spec)
285
285
  end
286
286
  end
287
287
 
@@ -27,7 +27,7 @@ class Gem::DependencyInstaller
27
27
  :wrappers => true,
28
28
  :build_args => nil,
29
29
  :build_docs_in_background => false,
30
- :install_as_default => false
30
+ :install_as_default => false,
31
31
  }.freeze
32
32
 
33
33
  ##
@@ -283,10 +283,9 @@ class Gem::DependencyInstaller
283
283
  request_set.development_shallow = @dev_shallow
284
284
  request_set.soft_missing = @force
285
285
  request_set.prerelease = @prerelease
286
- request_set.remote = false unless consider_remote?
287
286
 
288
287
  installer_set = Gem::Resolver::InstallerSet.new @domain
289
- installer_set.ignore_installed = @only_install_dir
288
+ installer_set.ignore_installed = (@minimal_deps == false) || @only_install_dir
290
289
 
291
290
  if consider_local?
292
291
  if dep_or_name =~ /\.gem$/ and File.file? dep_or_name
@@ -307,6 +306,7 @@ class Gem::DependencyInstaller
307
306
 
308
307
  dependency =
309
308
  if spec = installer_set.local?(dep_or_name)
309
+ installer_set.remote = nil if spec.dependencies.none?
310
310
  Gem::Dependency.new spec.name, version
311
311
  elsif String === dep_or_name
312
312
  Gem::Dependency.new dep_or_name, version
@@ -321,6 +321,7 @@ class Gem::DependencyInstaller
321
321
  installer_set.add_always_install dependency
322
322
 
323
323
  request_set.always_install = installer_set.always_install
324
+ request_set.remote = installer_set.consider_remote?
324
325
 
325
326
  if @ignore_dependencies
326
327
  installer_set.ignore_dependencies = true
@@ -10,14 +10,6 @@ require_relative '../user_interaction'
10
10
  class Gem::Ext::Builder
11
11
  include Gem::UserInteraction
12
12
 
13
- ##
14
- # The builder shells-out to run various commands after changing the
15
- # directory. This means multiple installations cannot be allowed to build
16
- # extensions in parallel as they may change each other's directories leading
17
- # to broken extensions or failed installations.
18
-
19
- CHDIR_MUTEX = Mutex.new # :nodoc:
20
-
21
13
  attr_accessor :build_args # :nodoc:
22
14
 
23
15
  def self.class_name
@@ -25,8 +17,8 @@ class Gem::Ext::Builder
25
17
  $1.downcase
26
18
  end
27
19
 
28
- def self.make(dest_path, results)
29
- unless File.exist? 'Makefile'
20
+ def self.make(dest_path, results, make_dir = Dir.pwd)
21
+ unless File.exist? File.join(make_dir, 'Makefile')
30
22
  raise Gem::InstallError, 'Makefile not found'
31
23
  end
32
24
 
@@ -44,32 +36,32 @@ class Gem::Ext::Builder
44
36
  cmd = [
45
37
  make_program,
46
38
  destdir,
47
- target
39
+ target,
48
40
  ].join(' ').rstrip
49
41
  begin
50
- run(cmd, results, "make #{target}".rstrip)
42
+ run(cmd, results, "make #{target}".rstrip, make_dir)
51
43
  rescue Gem::InstallError
52
44
  raise unless target == 'clean' # ignore clean failure
53
45
  end
54
46
  end
55
47
  end
56
48
 
57
- def self.run(command, results, command_name = nil)
49
+ def self.run(command, results, command_name = nil, dir = Dir.pwd)
58
50
  verbose = Gem.configuration.really_verbose
59
51
 
60
52
  begin
61
53
  rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], nil
62
54
  if verbose
63
- puts("current directory: #{Dir.pwd}")
55
+ puts("current directory: #{dir}")
64
56
  p(command)
65
57
  end
66
- results << "current directory: #{Dir.pwd}"
58
+ results << "current directory: #{dir}"
67
59
  results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
68
60
 
69
61
  require "open3"
70
62
  # Set $SOURCE_DATE_EPOCH for the subprocess.
71
63
  env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
72
- output, status = Open3.capture2e(env, *command)
64
+ output, status = Open3.capture2e(env, *command, :chdir => dir)
73
65
  if verbose
74
66
  puts output
75
67
  else
@@ -161,22 +153,10 @@ EOF
161
153
  begin
162
154
  FileUtils.mkdir_p dest_path
163
155
 
164
- CHDIR_MUTEX.synchronize do
165
- pwd = Dir.getwd
166
- Dir.chdir extension_dir
167
- begin
168
- results = builder.build(extension, dest_path,
169
- results, @build_args, lib_dir)
170
-
171
- verbose { results.join("\n") }
172
- ensure
173
- begin
174
- Dir.chdir pwd
175
- rescue SystemCallError
176
- Dir.chdir dest_path
177
- end
178
- end
179
- end
156
+ results = builder.build(extension, dest_path,
157
+ results, @build_args, lib_dir, extension_dir)
158
+
159
+ verbose { results.join("\n") }
180
160
 
181
161
  write_gem_make_out results.join "\n"
182
162
  rescue => e
@@ -201,6 +181,7 @@ EOF
201
181
 
202
182
  dest_path = @spec.extension_dir
203
183
 
184
+ require "fileutils"
204
185
  FileUtils.rm_f @spec.gem_build_complete_path
205
186
 
206
187
  @spec.extensions.each do |extension|