rubygems-update 3.2.0.rc.2 → 3.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +520 -501
  3. data/Manifest.txt +62 -55
  4. data/POLICIES.md +4 -3
  5. data/Rakefile +23 -7
  6. data/bundler/CHANGELOG.md +84 -19
  7. data/bundler/UPGRADING.md +1 -1
  8. data/bundler/bundler.gemspec +1 -1
  9. data/bundler/lib/bundler.rb +11 -0
  10. data/bundler/lib/bundler/build_metadata.rb +2 -2
  11. data/bundler/lib/bundler/cli.rb +5 -5
  12. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  13. data/bundler/lib/bundler/cli/exec.rb +3 -3
  14. data/bundler/lib/bundler/cli/install.rb +14 -5
  15. data/bundler/lib/bundler/cli/outdated.rb +0 -2
  16. data/bundler/lib/bundler/cli/update.rb +1 -1
  17. data/bundler/lib/bundler/compact_index_client/cache.rb +5 -13
  18. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  19. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  20. data/bundler/lib/bundler/definition.rb +23 -25
  21. data/bundler/lib/bundler/dependency.rb +3 -1
  22. data/bundler/lib/bundler/env.rb +1 -1
  23. data/bundler/lib/bundler/feature_flag.rb +0 -1
  24. data/bundler/lib/bundler/fetcher/index.rb +2 -3
  25. data/bundler/lib/bundler/friendly_errors.rb +15 -0
  26. data/bundler/lib/bundler/gem_helpers.rb +30 -24
  27. data/bundler/lib/bundler/index.rb +5 -1
  28. data/bundler/lib/bundler/injector.rb +9 -2
  29. data/bundler/lib/bundler/installer.rb +7 -5
  30. data/bundler/lib/bundler/lazy_specification.rb +20 -9
  31. data/bundler/lib/bundler/man/.document +1 -0
  32. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  33. data/bundler/{man → lib/bundler/man}/bundle-add.1.ronn +0 -0
  34. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
  35. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1.ronn +0 -0
  36. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  37. data/bundler/{man → lib/bundler/man}/bundle-cache.1.ronn +0 -0
  38. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  39. data/bundler/{man → lib/bundler/man}/bundle-check.1.ronn +0 -0
  40. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  41. data/bundler/{man → lib/bundler/man}/bundle-clean.1.ronn +0 -0
  42. data/bundler/{man → lib/bundler/man}/bundle-config.1 +2 -5
  43. data/bundler/{man → lib/bundler/man}/bundle-config.1.ronn +1 -9
  44. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  45. data/bundler/{man → lib/bundler/man}/bundle-doctor.1.ronn +0 -0
  46. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  47. data/bundler/{man → lib/bundler/man}/bundle-exec.1.ronn +0 -0
  48. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +1 -1
  49. data/bundler/{man → lib/bundler/man}/bundle-gem.1.ronn +0 -0
  50. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  51. data/bundler/{man → lib/bundler/man}/bundle-info.1.ronn +0 -0
  52. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  53. data/bundler/{man → lib/bundler/man}/bundle-init.1.ronn +0 -0
  54. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  55. data/bundler/{man → lib/bundler/man}/bundle-inject.1.ronn +0 -0
  56. data/bundler/{man → lib/bundler/man}/bundle-install.1 +2 -2
  57. data/bundler/{man → lib/bundler/man}/bundle-install.1.ronn +1 -1
  58. data/bundler/{man → lib/bundler/man}/bundle-list.1 +1 -1
  59. data/bundler/{man → lib/bundler/man}/bundle-list.1.ronn +0 -0
  60. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  61. data/bundler/{man → lib/bundler/man}/bundle-lock.1.ronn +0 -0
  62. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  63. data/bundler/{man → lib/bundler/man}/bundle-open.1.ronn +0 -0
  64. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  65. data/bundler/{man → lib/bundler/man}/bundle-outdated.1.ronn +0 -0
  66. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  67. data/bundler/{man → lib/bundler/man}/bundle-platform.1.ronn +0 -0
  68. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  69. data/bundler/{man → lib/bundler/man}/bundle-pristine.1.ronn +0 -0
  70. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  71. data/bundler/{man → lib/bundler/man}/bundle-remove.1.ronn +0 -0
  72. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  73. data/bundler/{man → lib/bundler/man}/bundle-show.1.ronn +0 -0
  74. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  75. data/bundler/{man → lib/bundler/man}/bundle-update.1.ronn +0 -0
  76. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  77. data/bundler/{man → lib/bundler/man}/bundle-viz.1.ronn +0 -0
  78. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  79. data/bundler/{man → lib/bundler/man}/bundle.1.ronn +0 -0
  80. data/bundler/{man → lib/bundler/man}/gemfile.5 +1 -1
  81. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +0 -0
  82. data/bundler/lib/bundler/man/index.txt +25 -0
  83. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  84. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  85. data/bundler/lib/bundler/resolver.rb +25 -29
  86. data/bundler/lib/bundler/resolver/spec_group.rb +19 -25
  87. data/bundler/lib/bundler/rubygems_integration.rb +4 -6
  88. data/bundler/lib/bundler/settings.rb +0 -1
  89. data/bundler/lib/bundler/source/git/git_proxy.rb +28 -41
  90. data/bundler/lib/bundler/spec_set.rb +6 -8
  91. data/bundler/lib/bundler/stub_specification.rb +0 -2
  92. data/bundler/lib/bundler/templates/newgem/README.md.tt +0 -1
  93. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -2
  94. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -0
  95. data/bundler/lib/bundler/uri_credentials_filter.rb +2 -0
  96. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  97. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  98. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  99. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  100. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  101. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  102. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +12 -8
  103. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  104. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  105. data/bundler/lib/bundler/version.rb +1 -1
  106. data/lib/rubygems.rb +6 -2
  107. data/lib/rubygems/available_set.rb +1 -1
  108. data/lib/rubygems/command_manager.rb +2 -2
  109. data/lib/rubygems/commands/build_command.rb +37 -20
  110. data/lib/rubygems/commands/cert_command.rb +1 -1
  111. data/lib/rubygems/commands/help_command.rb +2 -0
  112. data/lib/rubygems/commands/owner_command.rb +10 -3
  113. data/lib/rubygems/commands/pristine_command.rb +1 -1
  114. data/lib/rubygems/commands/push_command.rb +7 -4
  115. data/lib/rubygems/commands/query_command.rb +17 -0
  116. data/lib/rubygems/commands/server_command.rb +4 -0
  117. data/lib/rubygems/commands/setup_command.rb +26 -90
  118. data/lib/rubygems/commands/sources_command.rb +6 -2
  119. data/lib/rubygems/commands/specification_command.rb +6 -0
  120. data/lib/rubygems/commands/yank_command.rb +4 -5
  121. data/lib/rubygems/core_ext/kernel_require.rb +3 -0
  122. data/lib/rubygems/core_ext/kernel_warn.rb +6 -7
  123. data/lib/rubygems/defaults.rb +2 -2
  124. data/lib/rubygems/dependency.rb +1 -1
  125. data/lib/rubygems/dependency_installer.rb +5 -3
  126. data/lib/rubygems/ext/builder.rb +16 -35
  127. data/lib/rubygems/ext/cmake_builder.rb +5 -6
  128. data/lib/rubygems/ext/configure_builder.rb +5 -6
  129. data/lib/rubygems/ext/ext_conf_builder.rb +19 -14
  130. data/lib/rubygems/ext/rake_builder.rb +4 -4
  131. data/lib/rubygems/gemcutter_utilities.rb +101 -20
  132. data/lib/rubygems/indexer.rb +0 -1
  133. data/lib/rubygems/install_update_options.rb +2 -2
  134. data/lib/rubygems/installer.rb +12 -32
  135. data/lib/rubygems/installer_test_case.rb +7 -6
  136. data/lib/rubygems/name_tuple.rb +1 -1
  137. data/lib/rubygems/openssl.rb +4 -4
  138. data/lib/rubygems/package.rb +3 -2
  139. data/lib/rubygems/package/tar_header.rb +1 -1
  140. data/lib/rubygems/package/tar_test_case.rb +1 -1
  141. data/lib/rubygems/platform.rb +18 -7
  142. data/lib/rubygems/query_utils.rb +0 -9
  143. data/lib/rubygems/remote_fetcher.rb +5 -4
  144. data/lib/rubygems/request.rb +4 -3
  145. data/lib/rubygems/request_set.rb +2 -13
  146. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -4
  147. data/lib/rubygems/requirement.rb +1 -1
  148. data/lib/rubygems/resolver.rb +7 -2
  149. data/lib/rubygems/resolver/activation_request.rb +9 -1
  150. data/lib/rubygems/resolver/api_set.rb +29 -20
  151. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  152. data/lib/rubygems/resolver/api_specification.rb +8 -3
  153. data/lib/rubygems/resolver/best_set.rb +2 -2
  154. data/lib/rubygems/resolver/conflict.rb +1 -1
  155. data/lib/rubygems/resolver/dependency_request.rb +1 -1
  156. data/lib/rubygems/resolver/index_specification.rb +29 -0
  157. data/lib/rubygems/resolver/installer_set.rb +58 -9
  158. data/lib/rubygems/resolver/lock_set.rb +1 -1
  159. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  160. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  161. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  162. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  163. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  164. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  165. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  166. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  167. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  168. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  169. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  170. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  171. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  172. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  173. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  174. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  175. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  176. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  177. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  178. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  179. data/lib/rubygems/resolver/spec_specification.rb +14 -0
  180. data/lib/rubygems/resolver/specification.rb +13 -1
  181. data/lib/rubygems/s3_uri_signer.rb +1 -1
  182. data/lib/rubygems/security.rb +1 -2
  183. data/lib/rubygems/security/policy.rb +1 -1
  184. data/lib/rubygems/security/signer.rb +1 -1
  185. data/lib/rubygems/server.rb +7 -2
  186. data/lib/rubygems/source.rb +20 -9
  187. data/lib/rubygems/spec_fetcher.rb +1 -1
  188. data/lib/rubygems/specification.rb +8 -8
  189. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  190. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  191. data/lib/rubygems/stub_specification.rb +1 -1
  192. data/lib/rubygems/test_case.rb +14 -27
  193. data/lib/rubygems/test_utilities.rb +6 -5
  194. data/lib/rubygems/uri_formatter.rb +2 -1
  195. data/lib/rubygems/version_option.rb +6 -0
  196. data/rubygems-update.gemspec +2 -2
  197. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  198. data/test/rubygems/test_bundled_ca.rb +9 -5
  199. data/test/rubygems/test_gem.rb +3 -3
  200. data/test/rubygems/test_gem_commands_build_command.rb +197 -5
  201. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  202. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  203. data/test/rubygems/test_gem_commands_contents_command.rb +2 -2
  204. data/test/rubygems/test_gem_commands_help_command.rb +15 -2
  205. data/test/rubygems/test_gem_commands_install_command.rb +132 -1
  206. data/test/rubygems/test_gem_commands_owner_command.rb +49 -1
  207. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  208. data/test/rubygems/test_gem_commands_push_command.rb +70 -5
  209. data/test/rubygems/test_gem_commands_query_command.rb +3 -3
  210. data/test/rubygems/test_gem_commands_setup_command.rb +20 -48
  211. data/test/rubygems/test_gem_commands_signin_command.rb +27 -3
  212. data/test/rubygems/test_gem_commands_sources_command.rb +60 -0
  213. data/test/rubygems/test_gem_commands_specification_command.rb +28 -0
  214. data/test/rubygems/test_gem_commands_update_command.rb +2 -2
  215. data/test/rubygems/test_gem_commands_yank_command.rb +31 -1
  216. data/test/rubygems/test_gem_dependency_installer.rb +63 -49
  217. data/test/rubygems/test_gem_dependency_list.rb +2 -2
  218. data/test/rubygems/test_gem_ext_builder.rb +16 -20
  219. data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -13
  220. data/test/rubygems/test_gem_ext_configure_builder.rb +5 -11
  221. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -26
  222. data/test/rubygems/test_gem_ext_rake_builder.rb +30 -13
  223. data/test/rubygems/test_gem_gem_runner.rb +5 -4
  224. data/test/rubygems/test_gem_gemcutter_utilities.rb +3 -3
  225. data/test/rubygems/test_gem_install_update_options.rb +15 -3
  226. data/test/rubygems/test_gem_installer.rb +80 -71
  227. data/test/rubygems/test_gem_package.rb +8 -8
  228. data/test/rubygems/test_gem_package_old.rb +4 -4
  229. data/test/rubygems/test_gem_package_tar_writer.rb +1 -1
  230. data/test/rubygems/test_gem_platform.rb +63 -4
  231. data/test/rubygems/test_gem_remote_fetcher.rb +15 -19
  232. data/test/rubygems/test_gem_request.rb +2 -2
  233. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  234. data/test/rubygems/test_gem_resolver_api_set.rb +58 -55
  235. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -3
  236. data/test/rubygems/test_gem_resolver_best_set.rb +26 -3
  237. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  238. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -1
  239. data/test/rubygems/test_gem_security.rb +2 -2
  240. data/test/rubygems/test_gem_security_policy.rb +2 -2
  241. data/test/rubygems/test_gem_security_signer.rb +2 -2
  242. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  243. data/test/rubygems/test_gem_source.rb +7 -2
  244. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  245. data/test/rubygems/test_gem_specification.rb +6 -7
  246. data/test/rubygems/test_gem_uninstaller.rb +7 -7
  247. data/test/rubygems/test_gem_validator.rb +1 -1
  248. data/test/rubygems/test_gem_version_option.rb +1 -1
  249. data/test/rubygems/test_require.rb +50 -9
  250. data/test/test_changelog_generator.rb +17 -0
  251. metadata +69 -86
  252. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  253. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  254. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -18,9 +18,7 @@ class TestGemExtRakeBuilder < Gem::TestCase
18
18
  output = []
19
19
 
20
20
  build_rake_in do |rake|
21
- Dir.chdir @ext do
22
- Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output
23
- end
21
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, [], nil, @ext
24
22
 
25
23
  output = output.join "\n"
26
24
 
@@ -38,10 +36,8 @@ class TestGemExtRakeBuilder < Gem::TestCase
38
36
  output = []
39
37
 
40
38
  build_rake_in do |rake|
41
- Dir.chdir @ext do
42
- non_empty_args_list = ['']
43
- Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, non_empty_args_list
44
- end
39
+ non_empty_args_list = ['']
40
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, non_empty_args_list, nil, @ext
45
41
 
46
42
  output = output.join "\n"
47
43
 
@@ -51,13 +47,36 @@ class TestGemExtRakeBuilder < Gem::TestCase
51
47
  end
52
48
  end
53
49
 
50
+ def test_class_no_openssl_override
51
+ create_temp_mkrf_file('task :default')
52
+
53
+ rake = util_spec 'rake' do |s|
54
+ s.executables = %w[rake]
55
+ s.files = %w[bin/rake]
56
+ end
57
+
58
+ output = []
59
+
60
+ write_file File.join(@tempdir, 'bin', 'rake') do |fp|
61
+ fp.puts "#!/usr/bin/ruby"
62
+ fp.puts "require 'openssl'; puts OpenSSL"
63
+ end
64
+
65
+ install_gem rake
66
+
67
+ Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', @dest_path, output, [''], nil, @ext
68
+
69
+ output = output.join "\n"
70
+
71
+ assert_match "OpenSSL", output
72
+ assert_match %r{^#{Regexp.escape Gem.ruby} mkrf_conf\.rb}, output
73
+ end
74
+
54
75
  def test_class_build_no_mkrf_passes_args
55
76
  output = []
56
77
 
57
78
  build_rake_in do |rake|
58
- Dir.chdir @ext do
59
- Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"]
60
- end
79
+ Gem::Ext::RakeBuilder.build "ext/Rakefile", @dest_path, output, ["test1", "test2"], nil, @ext
61
80
 
62
81
  output = output.join "\n"
63
82
 
@@ -72,9 +91,7 @@ class TestGemExtRakeBuilder < Gem::TestCase
72
91
 
73
92
  build_rake_in(false) do |rake|
74
93
  error = assert_raises Gem::InstallError do
75
- Dir.chdir @ext do
76
- Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output
77
- end
94
+ Gem::Ext::RakeBuilder.build "mkrf_conf.rb", @dest_path, output, [], nil, @ext
78
95
  end
79
96
 
80
97
  assert_match %r{^rake failed}, error.message
@@ -74,17 +74,18 @@ class TestGemGemRunner < Gem::TestCase
74
74
  args = %w[query]
75
75
 
76
76
  use_ui @ui do
77
- assert_nil @runner.run(args)
77
+ @runner.run(args)
78
78
  end
79
79
 
80
80
  assert_match(/WARNING: query command is deprecated. It will be removed in Rubygems [0-9]+/, @ui.error)
81
+ assert_match(/WARNING: It is recommended that you use `gem search` or `gem list` instead/, @ui.error)
81
82
  end
82
83
 
83
84
  def test_info_succeeds
84
85
  args = %w[info]
85
86
 
86
87
  use_ui @ui do
87
- assert_nil @runner.run(args)
88
+ @runner.run(args)
88
89
  end
89
90
 
90
91
  assert_empty @ui.error
@@ -94,7 +95,7 @@ class TestGemGemRunner < Gem::TestCase
94
95
  args = %w[list]
95
96
 
96
97
  use_ui @ui do
97
- assert_nil @runner.run(args)
98
+ @runner.run(args)
98
99
  end
99
100
 
100
101
  assert_empty @ui.error
@@ -104,7 +105,7 @@ class TestGemGemRunner < Gem::TestCase
104
105
  args = %w[search]
105
106
 
106
107
  use_ui @ui do
107
- assert_nil @runner.run(args)
108
+ @runner.run(args)
108
109
  end
109
110
 
110
111
  assert_empty @ui.error
@@ -32,7 +32,7 @@ class TestGemGemcutterUtilities < Gem::TestCase
32
32
  def test_alternate_key_alternate_host
33
33
  keys = {
34
34
  :rubygems_api_key => 'KEY',
35
- "http://rubygems.engineyard.com" => "EYKEY"
35
+ "http://rubygems.engineyard.com" => "EYKEY",
36
36
  }
37
37
 
38
38
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -202,7 +202,7 @@ class TestGemGemcutterUtilities < Gem::TestCase
202
202
 
203
203
  assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @sign_in_ui.output
204
204
  assert_match 'Code: ', @sign_in_ui.output
205
- assert_match 'Signed in.', @sign_in_ui.output
205
+ assert_match 'Signed in with API key:', @sign_in_ui.output
206
206
  assert_equal '111111', @fetcher.last_request['OTP']
207
207
  end
208
208
 
@@ -233,7 +233,7 @@ class TestGemGemcutterUtilities < Gem::TestCase
233
233
  @fetcher.data["#{host}/api/v1/api_key"] = response
234
234
  Gem::RemoteFetcher.fetcher = @fetcher
235
235
 
236
- @sign_in_ui = Gem::MockGemUi.new("#{email}\n#{password}\n" + extra_input)
236
+ @sign_in_ui = Gem::MockGemUi.new("#{email}\n#{password}\n\n\n\n\n\n\n\n\n" + extra_input)
237
237
 
238
238
  use_ui @sign_in_ui do
239
239
  if args.length > 0
@@ -30,7 +30,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
30
30
 
31
31
  args.concat %w[--vendor] unless Gem.java_platform?
32
32
 
33
- args.concat %w[-P HighSecurity] if defined?(OpenSSL::SSL)
33
+ args.concat %w[-P HighSecurity] if Gem::HAVE_OPENSSL
34
34
 
35
35
  assert @cmd.handles?(args)
36
36
  end
@@ -92,7 +92,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
92
92
  end
93
93
 
94
94
  def test_security_policy
95
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
95
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
96
96
 
97
97
  @cmd.handle_options %w[-P HighSecurity]
98
98
 
@@ -100,7 +100,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
100
100
  end
101
101
 
102
102
  def test_security_policy_unknown
103
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
103
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
104
104
 
105
105
  @cmd.add_install_update_options
106
106
 
@@ -192,4 +192,16 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
192
192
 
193
193
  assert_equal true, @cmd.options[:post_install_message]
194
194
  end
195
+
196
+ def test_minimal_deps_no
197
+ @cmd.handle_options %w[--no-minimal-deps]
198
+
199
+ assert_equal false, @cmd.options[:minimal_deps]
200
+ end
201
+
202
+ def test_minimal_deps
203
+ @cmd.handle_options %w[--minimal-deps]
204
+
205
+ assert_equal true, @cmd.options[:minimal_deps]
206
+ end
195
207
  end
@@ -83,7 +83,7 @@ end
83
83
  end
84
84
 
85
85
  def test_check_executable_overwrite_default_bin_dir
86
- installer = setup_base_installer
86
+ installer = setup_base_installer(false)
87
87
 
88
88
  bindir(Gem.bindir) do
89
89
  util_conflict_executable false
@@ -143,7 +143,7 @@ gem 'other', version
143
143
  end
144
144
 
145
145
  def test_check_executable_overwrite_other_gem
146
- installer = setup_base_installer
146
+ installer = setup_base_installer(false)
147
147
 
148
148
  util_conflict_executable true
149
149
 
@@ -287,7 +287,7 @@ gem 'other', version
287
287
  end
288
288
 
289
289
  def test_ensure_loadable_spec_security_policy
290
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
290
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
291
291
 
292
292
  _, a_gem = util_gem 'a', 2 do |s|
293
293
  s.add_dependency 'garbage ~> 5'
@@ -345,7 +345,7 @@ gem 'other', version
345
345
 
346
346
  options = {
347
347
  :bin_dir => bin_dir,
348
- :install_dir => "/non/existent"
348
+ :install_dir => "/non/existent",
349
349
  }
350
350
 
351
351
  inst = Gem::Installer.at '', options
@@ -794,10 +794,35 @@ gem 'other', version
794
794
 
795
795
  assert_equal spec, installer.install
796
796
 
797
- assert !File.exist?(system_path), 'plugin not written to user plugins_dir'
797
+ assert !File.exist?(system_path), 'plugin incorrectly written to system plugins_dir'
798
798
  assert File.exist?(user_path), 'plugin not written to user plugins_dir'
799
799
  end
800
800
 
801
+ def test_generate_plugins_with_build_root
802
+ spec = quick_gem 'a' do |s|
803
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
804
+ io.write "puts __FILE__"
805
+ end
806
+
807
+ s.files += %w[lib/rubygems_plugin.rb]
808
+ end
809
+
810
+ util_build_gem spec
811
+
812
+ File.chmod(0555, Gem.plugindir)
813
+ system_path = File.join(Gem.plugindir, 'a_plugin.rb')
814
+
815
+ build_root = File.join(@tempdir, 'build_root')
816
+ build_root_path = File.join(build_root, Gem.plugindir.gsub(/^[a-zA-Z]:/, ''), 'a_plugin.rb')
817
+
818
+ installer = Gem::Installer.at spec.cache_file, :build_root => build_root
819
+
820
+ assert_equal spec, installer.install
821
+
822
+ assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir'
823
+ assert File.exist?(build_root_path), 'plugin not written to build_root'
824
+ end
825
+
801
826
  def test_keeps_plugins_up_to_date
802
827
  # NOTE: version a-2 is already installed by setup hooks
803
828
 
@@ -1134,7 +1159,7 @@ gem 'other', version
1134
1159
  Gem::Package.build @spec
1135
1160
  end
1136
1161
  end
1137
- installer = Gem::Installer.at @gem
1162
+ installer = Gem::Installer.at @gem, :force => true
1138
1163
  build_rake_in do
1139
1164
  use_ui @ui do
1140
1165
  assert_equal @spec, installer.install
@@ -1147,15 +1172,28 @@ gem 'other', version
1147
1172
  end
1148
1173
 
1149
1174
  def test_install_force
1175
+ _, missing_dep_gem = util_gem 'missing_dep', '1' do |s|
1176
+ s.add_dependency 'doesnt_exist', '1'
1177
+ end
1178
+
1150
1179
  use_ui @ui do
1151
- installer = Gem::Installer.at old_ruby_required('= 1.4.6'), :force => true
1180
+ installer = Gem::Installer.at missing_dep_gem, :force => true
1152
1181
  installer.install
1153
1182
  end
1154
1183
 
1155
- gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
1184
+ gem_dir = File.join(@gemhome, 'gems', 'missing_dep-1')
1156
1185
  assert_path_exists gem_dir
1157
1186
  end
1158
1187
 
1188
+ def test_install_build_root
1189
+ build_root = File.join(@tempdir, 'build_root')
1190
+
1191
+ @gem = setup_base_gem
1192
+ installer = Gem::Installer.at @gem, :build_root => build_root
1193
+
1194
+ assert_equal @spec, installer.install
1195
+ end
1196
+
1159
1197
  def test_install_missing_dirs
1160
1198
  installer = setup_base_installer
1161
1199
 
@@ -1337,7 +1375,7 @@ gem 'other', version
1337
1375
 
1338
1376
  # reinstall the gem, this is also the same as pristine
1339
1377
  use_ui @ui do
1340
- installer = Gem::Installer.at path
1378
+ installer = Gem::Installer.at path, :force => true
1341
1379
  installer.install
1342
1380
  end
1343
1381
 
@@ -1537,6 +1575,7 @@ gem 'other', version
1537
1575
  installer = setup_base_installer
1538
1576
  @spec.add_dependency 'b', '> 5'
1539
1577
  installer = util_setup_gem
1578
+ installer.force = false
1540
1579
 
1541
1580
  use_ui @ui do
1542
1581
  assert_raises Gem::InstallError do
@@ -1585,54 +1624,6 @@ gem 'other', version
1585
1624
  end
1586
1625
  end
1587
1626
 
1588
- def test_pre_install_checks_ruby_version
1589
- use_ui @ui do
1590
- installer = Gem::Installer.at old_ruby_required('= 1.4.6')
1591
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1592
- installer.pre_install_checks
1593
- end
1594
- rv = Gem.ruby_version
1595
- assert_equal "old_ruby_required requires Ruby version = 1.4.6. The current ruby version is #{rv}.",
1596
- e.message
1597
- end
1598
- end
1599
-
1600
- def test_pre_install_checks_ruby_version_with_prereleases
1601
- util_set_RUBY_VERSION '2.6.0', -1, '63539', 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1602
-
1603
- installer = Gem::Installer.at old_ruby_required('>= 2.6.0.preview2')
1604
- assert installer.pre_install_checks
1605
-
1606
- installer = Gem::Installer.at old_ruby_required('> 2.6.0.preview2')
1607
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1608
- assert installer.pre_install_checks
1609
- end
1610
- assert_equal "old_ruby_required requires Ruby version > 2.6.0.preview2. The current ruby version is 2.6.0.preview2.",
1611
- e.message
1612
- ensure
1613
- util_restore_RUBY_VERSION
1614
- end
1615
-
1616
- def test_pre_install_checks_wrong_rubygems_version
1617
- spec = util_spec 'old_rubygems_required', '1' do |s|
1618
- s.required_rubygems_version = '< 0'
1619
- end
1620
-
1621
- util_build_gem spec
1622
-
1623
- gem = File.join(@gemhome, 'cache', spec.file_name)
1624
-
1625
- use_ui @ui do
1626
- installer = Gem::Installer.at gem
1627
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1628
- installer.pre_install_checks
1629
- end
1630
- rgv = Gem::VERSION
1631
- assert_equal "old_rubygems_required requires RubyGems version < 0. The current RubyGems version is #{rgv}. " +
1632
- "Try 'gem update --system' to update RubyGems itself.", e.message
1633
- end
1634
- end
1635
-
1636
1627
  def test_pre_install_checks_malicious_name
1637
1628
  spec = util_spec '../malicious', '1'
1638
1629
  def spec.full_name # so the spec is buildable
@@ -1781,13 +1772,24 @@ gem 'other', version
1781
1772
 
1782
1773
  def test_process_options_build_root
1783
1774
  build_root = File.join @tempdir, 'build_root'
1775
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1776
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1777
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1784
1778
 
1785
1779
  @gem = setup_base_gem
1786
- installer = Gem::Installer.at @gem, :build_root => build_root
1780
+ installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
1781
+
1782
+ assert_equal build_root, installer.build_root
1783
+ assert_equal bin_dir, installer.bin_dir
1784
+ assert_equal gem_home, installer.gem_home
1787
1785
 
1788
- assert_equal Pathname(build_root), installer.build_root
1789
- assert_equal File.join(build_root, @gemhome, 'bin'), installer.bin_dir
1790
- assert_equal File.join(build_root, @gemhome), installer.gem_home
1786
+ errors = @ui.error.split("\n")
1787
+
1788
+ assert_equal "WARNING: You build with buildroot.", errors.shift
1789
+ assert_equal " Build root: #{build_root}", errors.shift
1790
+ assert_equal " Bin dir: #{bin_dir}", errors.shift
1791
+ assert_equal " Gem home: #{gem_home}", errors.shift
1792
+ assert_equal " Plugins dir: #{plugins_dir}", errors.shift
1791
1793
  end
1792
1794
 
1793
1795
  def test_shebang_arguments
@@ -2169,6 +2171,23 @@ gem 'other', version
2169
2171
  assert_equal ['exe/executable'], default_spec.files
2170
2172
  end
2171
2173
 
2174
+ def test_default_gem_to_specific_install_dir
2175
+ @gem = setup_base_gem
2176
+ installer = util_installer @spec, "#{@gemhome}2"
2177
+ installer.options[:install_as_default] = true
2178
+
2179
+ use_ui @ui do
2180
+ installer.install
2181
+ end
2182
+
2183
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2184
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
2185
+
2186
+ default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2187
+ assert_equal Gem::Version.new("2"), default_spec.version
2188
+ assert_equal ['bin/executable'], default_spec.files
2189
+ end
2190
+
2172
2191
  def test_package_attribute
2173
2192
  gem = quick_gem 'c' do |spec|
2174
2193
  util_make_exec spec, '#!/usr/bin/ruby', 'exe'
@@ -2189,16 +2208,6 @@ gem 'other', version
2189
2208
  assert_kind_of(String, installer.gem)
2190
2209
  end
2191
2210
 
2192
- def old_ruby_required(requirement)
2193
- spec = util_spec 'old_ruby_required', '1' do |s|
2194
- s.required_ruby_version = requirement
2195
- end
2196
-
2197
- util_build_gem spec
2198
-
2199
- spec.cache_file
2200
- end
2201
-
2202
2211
  def util_execless
2203
2212
  @spec = util_spec 'z'
2204
2213
  util_build_gem @spec
@@ -95,7 +95,7 @@ class TestGemPackage < Gem::Package::TarTestCase
95
95
  'SHA256' => {
96
96
  'metadata.gz' => metadata_sha256,
97
97
  'data.tar.gz' => Digest::SHA256.hexdigest(tar),
98
- }
98
+ },
99
99
  }
100
100
 
101
101
  assert_equal expected, YAML.load(checksums)
@@ -252,7 +252,7 @@ class TestGemPackage < Gem::Package::TarTestCase
252
252
  end
253
253
 
254
254
  def test_build_auto_signed
255
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
255
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
256
256
 
257
257
  FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
258
258
 
@@ -295,7 +295,7 @@ class TestGemPackage < Gem::Package::TarTestCase
295
295
  end
296
296
 
297
297
  def test_build_auto_signed_encrypted_key
298
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
298
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
299
299
 
300
300
  FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
301
301
 
@@ -364,7 +364,7 @@ class TestGemPackage < Gem::Package::TarTestCase
364
364
  end
365
365
 
366
366
  def test_build_signed
367
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
367
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
368
368
 
369
369
  spec = Gem::Specification.new 'build', '1'
370
370
  spec.summary = 'build'
@@ -401,7 +401,7 @@ class TestGemPackage < Gem::Package::TarTestCase
401
401
  end
402
402
 
403
403
  def test_build_signed_encrypted_key
404
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
404
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
405
405
 
406
406
  spec = Gem::Specification.new 'build', '1'
407
407
  spec.summary = 'build'
@@ -957,7 +957,7 @@ class TestGemPackage < Gem::Package::TarTestCase
957
957
  end
958
958
 
959
959
  def test_verify_security_policy
960
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
960
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
961
961
 
962
962
  package = Gem::Package.new @gem
963
963
  package.security_policy = Gem::Security::HighSecurity
@@ -974,7 +974,7 @@ class TestGemPackage < Gem::Package::TarTestCase
974
974
  end
975
975
 
976
976
  def test_verify_security_policy_low_security
977
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
977
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
978
978
 
979
979
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
980
980
  @spec.signing_key = PRIVATE_KEY
@@ -994,7 +994,7 @@ class TestGemPackage < Gem::Package::TarTestCase
994
994
  end
995
995
 
996
996
  def test_verify_security_policy_checksum_missing
997
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
997
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
998
998
 
999
999
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
1000
1000
  @spec.signing_key = PRIVATE_KEY