rubygems-update 3.0.6 → 3.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1100 -436
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +37 -10
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +104 -64
  7. data/POLICIES.md +6 -12
  8. data/README.md +6 -6
  9. data/Rakefile +121 -111
  10. data/bin/gem +0 -6
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +1788 -1251
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +9 -10
  15. data/bundler/UPGRADING.md +215 -0
  16. data/bundler/bundler.gemspec +9 -26
  17. data/bundler/exe/bundle +22 -3
  18. data/bundler/lib/bundler.rb +233 -94
  19. data/bundler/lib/bundler/build_metadata.rb +5 -13
  20. data/bundler/lib/bundler/capistrano.rb +4 -4
  21. data/bundler/lib/bundler/cli.rb +221 -148
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/clean.rb +1 -1
  26. data/bundler/lib/bundler/cli/common.rb +25 -12
  27. data/bundler/lib/bundler/cli/config.rb +161 -86
  28. data/bundler/lib/bundler/cli/console.rb +1 -1
  29. data/bundler/lib/bundler/cli/doctor.rb +5 -5
  30. data/bundler/lib/bundler/cli/exec.rb +8 -20
  31. data/bundler/lib/bundler/cli/fund.rb +36 -0
  32. data/bundler/lib/bundler/cli/gem.rb +125 -32
  33. data/bundler/lib/bundler/cli/info.rb +29 -6
  34. data/bundler/lib/bundler/cli/init.rb +2 -2
  35. data/bundler/lib/bundler/cli/inject.rb +1 -1
  36. data/bundler/lib/bundler/cli/install.rb +27 -23
  37. data/bundler/lib/bundler/cli/issue.rb +5 -5
  38. data/bundler/lib/bundler/cli/list.rb +12 -10
  39. data/bundler/lib/bundler/cli/open.rb +10 -6
  40. data/bundler/lib/bundler/cli/outdated.rb +134 -109
  41. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  42. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  43. data/bundler/lib/bundler/cli/show.rb +2 -2
  44. data/bundler/lib/bundler/cli/update.rb +34 -12
  45. data/bundler/lib/bundler/compact_index_client.rb +26 -10
  46. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  47. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  48. data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
  49. data/bundler/lib/bundler/current_ruby.rb +9 -7
  50. data/bundler/lib/bundler/definition.rb +133 -132
  51. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  52. data/bundler/lib/bundler/dependency.rb +19 -14
  53. data/bundler/lib/bundler/deployment.rb +1 -1
  54. data/bundler/lib/bundler/dsl.rb +54 -71
  55. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  56. data/bundler/lib/bundler/env.rb +9 -14
  57. data/bundler/lib/bundler/environment_preserver.rb +26 -3
  58. data/bundler/lib/bundler/errors.rb +1 -0
  59. data/bundler/lib/bundler/feature_flag.rb +19 -34
  60. data/bundler/lib/bundler/fetcher.rb +19 -16
  61. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  62. data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
  63. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  64. data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
  65. data/bundler/lib/bundler/fetcher/index.rb +8 -7
  66. data/bundler/lib/bundler/friendly_errors.rb +27 -19
  67. data/bundler/lib/bundler/gem_helper.rb +68 -37
  68. data/bundler/lib/bundler/gem_helpers.rb +38 -29
  69. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  70. data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
  71. data/bundler/lib/bundler/graph.rb +3 -3
  72. data/bundler/lib/bundler/index.rb +12 -7
  73. data/bundler/lib/bundler/injector.rb +32 -12
  74. data/bundler/lib/bundler/inline.rb +41 -30
  75. data/bundler/lib/bundler/installer.rb +41 -60
  76. data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
  77. data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
  78. data/bundler/lib/bundler/installer/standalone.rb +18 -4
  79. data/bundler/lib/bundler/lazy_specification.rb +41 -27
  80. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  81. data/bundler/lib/bundler/lockfile_parser.rb +16 -33
  82. data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  83. data/bundler/lib/bundler/man/bundle-add.1 +66 -0
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  85. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  87. data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
  88. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  89. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  90. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  91. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  92. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  93. data/bundler/lib/bundler/man/bundle-config.1 +488 -0
  94. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
  95. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  96. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  97. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  98. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  99. data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
  100. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  101. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  102. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  103. data/bundler/lib/bundler/man/bundle-init.1 +25 -0
  104. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  105. data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
  106. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  107. data/bundler/lib/bundler/man/bundle-install.1 +338 -0
  108. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  109. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  110. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  111. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  112. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  113. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  114. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  115. data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
  116. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  117. data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
  118. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  119. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  120. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  121. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  122. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  123. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  124. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  125. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  126. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
  127. data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
  128. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  129. data/bundler/lib/bundler/man/bundle.1 +136 -0
  130. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
  131. data/bundler/lib/bundler/man/gemfile.5 +686 -0
  132. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
  133. data/bundler/lib/bundler/man/index.txt +25 -0
  134. data/bundler/lib/bundler/match_platform.rb +1 -1
  135. data/bundler/lib/bundler/mirror.rb +5 -5
  136. data/bundler/lib/bundler/plugin.rb +75 -36
  137. data/bundler/lib/bundler/plugin/api.rb +1 -1
  138. data/bundler/lib/bundler/plugin/api/source.rb +12 -7
  139. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  140. data/bundler/lib/bundler/plugin/index.rb +24 -4
  141. data/bundler/lib/bundler/plugin/installer.rb +33 -22
  142. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  143. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  144. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  145. data/bundler/lib/bundler/remote_specification.rb +5 -4
  146. data/bundler/lib/bundler/resolver.rb +191 -87
  147. data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
  148. data/bundler/lib/bundler/retry.rb +3 -3
  149. data/bundler/lib/bundler/ruby_version.rb +5 -20
  150. data/bundler/lib/bundler/rubygems_ext.rb +76 -72
  151. data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
  152. data/bundler/lib/bundler/rubygems_integration.rb +159 -444
  153. data/bundler/lib/bundler/runtime.rb +6 -23
  154. data/bundler/lib/bundler/settings.rb +67 -93
  155. data/bundler/lib/bundler/setup.rb +11 -12
  156. data/bundler/lib/bundler/shared_helpers.rb +54 -80
  157. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  158. data/bundler/lib/bundler/source.rb +12 -6
  159. data/bundler/lib/bundler/source/git.rb +47 -38
  160. data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
  161. data/bundler/lib/bundler/source/metadata.rb +7 -6
  162. data/bundler/lib/bundler/source/path.rb +20 -11
  163. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  164. data/bundler/lib/bundler/source/rubygems.rb +56 -29
  165. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  166. data/bundler/lib/bundler/source_list.rb +32 -30
  167. data/bundler/lib/bundler/spec_set.rb +37 -25
  168. data/bundler/lib/bundler/stub_specification.rb +40 -34
  169. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  170. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  171. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  172. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
  173. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
  174. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  175. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  176. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  177. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  179. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  180. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  181. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  182. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
  183. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  184. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  185. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  186. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  187. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  188. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  189. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  190. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  191. data/bundler/lib/bundler/ui.rb +3 -3
  192. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  193. data/bundler/lib/bundler/ui/shell.rb +7 -11
  194. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  195. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  196. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  197. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  198. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  199. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  200. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  201. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  202. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
  203. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  216. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  217. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  218. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  219. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  220. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  221. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  222. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  237. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  238. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  239. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  240. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  241. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  242. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  243. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  244. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  245. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  246. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  247. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  248. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  249. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  255. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  256. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  257. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  258. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  259. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  260. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  261. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  262. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  263. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  264. data/bundler/lib/bundler/vendored_persistent.rb +7 -12
  265. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  266. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  267. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  268. data/bundler/lib/bundler/version.rb +1 -20
  269. data/bundler/lib/bundler/version_ranges.rb +51 -5
  270. data/bundler/lib/bundler/vlad.rb +2 -2
  271. data/bundler/lib/bundler/worker.rb +2 -4
  272. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  273. data/lib/rubygems.rb +198 -222
  274. data/lib/rubygems/available_set.rb +4 -5
  275. data/lib/rubygems/basic_specification.rb +32 -19
  276. data/lib/rubygems/bundler_version_finder.rb +19 -9
  277. data/lib/rubygems/command.rb +73 -21
  278. data/lib/rubygems/command_manager.rb +5 -12
  279. data/lib/rubygems/commands/build_command.rb +51 -18
  280. data/lib/rubygems/commands/cert_command.rb +2 -11
  281. data/lib/rubygems/commands/check_command.rb +0 -2
  282. data/lib/rubygems/commands/cleanup_command.rb +17 -13
  283. data/lib/rubygems/commands/contents_command.rb +7 -9
  284. data/lib/rubygems/commands/dependency_command.rb +9 -10
  285. data/lib/rubygems/commands/environment_command.rb +1 -6
  286. data/lib/rubygems/commands/fetch_command.rb +2 -4
  287. data/lib/rubygems/commands/generate_index_command.rb +3 -2
  288. data/lib/rubygems/commands/help_command.rb +4 -4
  289. data/lib/rubygems/commands/info_command.rb +9 -4
  290. data/lib/rubygems/commands/install_command.rb +12 -54
  291. data/lib/rubygems/commands/list_command.rb +8 -7
  292. data/lib/rubygems/commands/lock_command.rb +3 -5
  293. data/lib/rubygems/commands/mirror_command.rb +0 -1
  294. data/lib/rubygems/commands/open_command.rb +1 -4
  295. data/lib/rubygems/commands/outdated_command.rb +0 -1
  296. data/lib/rubygems/commands/owner_command.rb +10 -10
  297. data/lib/rubygems/commands/pristine_command.rb +13 -9
  298. data/lib/rubygems/commands/push_command.rb +12 -51
  299. data/lib/rubygems/commands/query_command.rb +14 -330
  300. data/lib/rubygems/commands/rdoc_command.rb +0 -1
  301. data/lib/rubygems/commands/search_command.rb +7 -7
  302. data/lib/rubygems/commands/server_command.rb +3 -1
  303. data/lib/rubygems/commands/setup_command.rb +143 -101
  304. data/lib/rubygems/commands/signin_command.rb +0 -1
  305. data/lib/rubygems/commands/signout_command.rb +0 -2
  306. data/lib/rubygems/commands/sources_command.rb +22 -6
  307. data/lib/rubygems/commands/specification_command.rb +8 -3
  308. data/lib/rubygems/commands/stale_command.rb +1 -1
  309. data/lib/rubygems/commands/uninstall_command.rb +2 -3
  310. data/lib/rubygems/commands/unpack_command.rb +3 -32
  311. data/lib/rubygems/commands/update_command.rb +73 -28
  312. data/lib/rubygems/commands/which_command.rb +0 -1
  313. data/lib/rubygems/commands/yank_command.rb +10 -7
  314. data/lib/rubygems/compatibility.rb +4 -4
  315. data/lib/rubygems/config_file.rb +48 -27
  316. data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
  317. data/lib/rubygems/core_ext/kernel_require.rb +44 -6
  318. data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
  319. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  320. data/lib/rubygems/defaults.rb +110 -23
  321. data/lib/rubygems/dependency.rb +28 -14
  322. data/lib/rubygems/dependency_installer.rb +11 -166
  323. data/lib/rubygems/dependency_list.rb +17 -18
  324. data/lib/rubygems/deprecate.rb +51 -6
  325. data/lib/rubygems/doctor.rb +4 -4
  326. data/lib/rubygems/errors.rb +5 -7
  327. data/lib/rubygems/exceptions.rb +2 -24
  328. data/lib/rubygems/ext.rb +6 -6
  329. data/lib/rubygems/ext/build_error.rb +2 -0
  330. data/lib/rubygems/ext/builder.rb +45 -82
  331. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  332. data/lib/rubygems/ext/configure_builder.rb +5 -8
  333. data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
  334. data/lib/rubygems/ext/rake_builder.rb +4 -6
  335. data/lib/rubygems/gem_runner.rb +3 -10
  336. data/lib/rubygems/gemcutter_utilities.rb +111 -37
  337. data/lib/rubygems/indexer.rb +9 -26
  338. data/lib/rubygems/install_update_options.rb +7 -7
  339. data/lib/rubygems/installer.rb +91 -98
  340. data/lib/rubygems/installer_test_case.rb +104 -42
  341. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  342. data/lib/rubygems/local_remote_options.rb +1 -1
  343. data/lib/rubygems/mock_gem_ui.rb +1 -4
  344. data/lib/rubygems/name_tuple.rb +4 -7
  345. data/lib/rubygems/openssl.rb +7 -0
  346. data/lib/rubygems/package.rb +49 -32
  347. data/lib/rubygems/package/digest_io.rb +0 -2
  348. data/lib/rubygems/package/file_source.rb +0 -2
  349. data/lib/rubygems/package/io_source.rb +0 -2
  350. data/lib/rubygems/package/old.rb +1 -3
  351. data/lib/rubygems/package/tar_header.rb +4 -6
  352. data/lib/rubygems/package/tar_reader.rb +15 -12
  353. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  354. data/lib/rubygems/package/tar_test_case.rb +2 -4
  355. data/lib/rubygems/package/tar_writer.rb +6 -16
  356. data/lib/rubygems/package_task.rb +1 -7
  357. data/lib/rubygems/path_support.rb +2 -2
  358. data/lib/rubygems/platform.rb +22 -16
  359. data/lib/rubygems/query_utils.rb +353 -0
  360. data/lib/rubygems/rdoc.rb +0 -12
  361. data/lib/rubygems/remote_fetcher.rb +33 -59
  362. data/lib/rubygems/request.rb +11 -14
  363. data/lib/rubygems/request/connection_pools.rb +3 -7
  364. data/lib/rubygems/request/http_pool.rb +0 -1
  365. data/lib/rubygems/request_set.rb +10 -23
  366. data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
  367. data/lib/rubygems/request_set/lockfile.rb +13 -12
  368. data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
  369. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  370. data/lib/rubygems/requirement.rb +36 -35
  371. data/lib/rubygems/resolver.rb +20 -16
  372. data/lib/rubygems/resolver/activation_request.rb +27 -51
  373. data/lib/rubygems/resolver/api_set.rb +31 -24
  374. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  375. data/lib/rubygems/resolver/api_specification.rb +24 -10
  376. data/lib/rubygems/resolver/best_set.rb +4 -6
  377. data/lib/rubygems/resolver/composed_set.rb +3 -5
  378. data/lib/rubygems/resolver/conflict.rb +2 -9
  379. data/lib/rubygems/resolver/current_set.rb +0 -2
  380. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  381. data/lib/rubygems/resolver/git_set.rb +0 -2
  382. data/lib/rubygems/resolver/git_specification.rb +0 -2
  383. data/lib/rubygems/resolver/index_set.rb +1 -3
  384. data/lib/rubygems/resolver/index_specification.rb +32 -2
  385. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  386. data/lib/rubygems/resolver/installer_set.rb +63 -16
  387. data/lib/rubygems/resolver/local_specification.rb +0 -2
  388. data/lib/rubygems/resolver/lock_set.rb +3 -5
  389. data/lib/rubygems/resolver/lock_specification.rb +2 -4
  390. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  391. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  392. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  393. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
  394. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  410. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  411. data/lib/rubygems/resolver/set.rb +0 -2
  412. data/lib/rubygems/resolver/source_set.rb +0 -2
  413. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  414. data/lib/rubygems/resolver/specification.rb +13 -2
  415. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  416. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  417. data/lib/rubygems/s3_uri_signer.rb +15 -13
  418. data/lib/rubygems/safe_yaml.rb +4 -4
  419. data/lib/rubygems/security.rb +27 -34
  420. data/lib/rubygems/security/policy.rb +4 -8
  421. data/lib/rubygems/security/signer.rb +8 -9
  422. data/lib/rubygems/security/trust_dir.rb +1 -3
  423. data/lib/rubygems/server.rb +20 -16
  424. data/lib/rubygems/source.rb +30 -13
  425. data/lib/rubygems/source/git.rb +7 -8
  426. data/lib/rubygems/source/installed.rb +0 -2
  427. data/lib/rubygems/source/local.rb +2 -4
  428. data/lib/rubygems/source/lock.rb +0 -2
  429. data/lib/rubygems/source/specific_file.rb +0 -2
  430. data/lib/rubygems/source/vendor.rb +0 -2
  431. data/lib/rubygems/source_list.rb +6 -6
  432. data/lib/rubygems/spec_fetcher.rb +22 -34
  433. data/lib/rubygems/specification.rb +207 -278
  434. data/lib/rubygems/specification_policy.rb +135 -57
  435. data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
  436. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  437. data/lib/rubygems/stub_specification.rb +4 -5
  438. data/lib/rubygems/test_case.rb +221 -341
  439. data/lib/rubygems/test_utilities.rb +22 -18
  440. data/lib/rubygems/text.rb +2 -3
  441. data/lib/rubygems/uninstaller.rb +49 -30
  442. data/lib/rubygems/uri_formatter.rb +2 -4
  443. data/lib/rubygems/uri_parser.rb +34 -0
  444. data/lib/rubygems/uri_parsing.rb +23 -0
  445. data/lib/rubygems/user_interaction.rb +3 -20
  446. data/lib/rubygems/util.rb +20 -44
  447. data/lib/rubygems/util/licenses.rb +400 -400
  448. data/lib/rubygems/validator.rb +9 -31
  449. data/lib/rubygems/version.rb +29 -21
  450. data/lib/rubygems/version_option.rb +6 -0
  451. data/rubygems-update.gemspec +4 -11
  452. data/setup.rb +2 -7
  453. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  454. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  455. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  456. data/test/rubygems/rubygems_plugin.rb +0 -2
  457. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  458. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  459. data/test/rubygems/test_bundled_ca.rb +42 -45
  460. data/test/rubygems/test_config.rb +0 -2
  461. data/test/rubygems/test_deprecate.rb +41 -5
  462. data/test/rubygems/test_gem.rb +405 -236
  463. data/test/rubygems/test_gem_available_set.rb +5 -6
  464. data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
  465. data/test/rubygems/test_gem_command.rb +144 -9
  466. data/test/rubygems/test_gem_command_manager.rb +40 -17
  467. data/test/rubygems/test_gem_commands_build_command.rb +386 -13
  468. data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
  469. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  470. data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
  471. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  472. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
  473. data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
  474. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  475. data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
  476. data/test/rubygems/test_gem_commands_help_command.rb +16 -8
  477. data/test/rubygems/test_gem_commands_info_command.rb +6 -7
  478. data/test/rubygems/test_gem_commands_install_command.rb +368 -34
  479. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  480. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  481. data/test/rubygems/test_gem_commands_mirror.rb +1 -2
  482. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  483. data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
  484. data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
  485. data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
  486. data/test/rubygems/test_gem_commands_push_command.rb +94 -21
  487. data/test/rubygems/test_gem_commands_query_command.rb +35 -10
  488. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  489. data/test/rubygems/test_gem_commands_server_command.rb +6 -4
  490. data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
  491. data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
  492. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  493. data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
  494. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  495. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  496. data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
  497. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  498. data/test/rubygems/test_gem_commands_update_command.rb +201 -29
  499. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  500. data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
  501. data/test/rubygems/test_gem_config_file.rb +25 -13
  502. data/test/rubygems/test_gem_dependency.rb +6 -2
  503. data/test/rubygems/test_gem_dependency_installer.rb +169 -252
  504. data/test/rubygems/test_gem_dependency_list.rb +31 -26
  505. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  506. data/test/rubygems/test_gem_doctor.rb +28 -2
  507. data/test/rubygems/test_gem_ext_builder.rb +51 -44
  508. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  509. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
  510. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
  511. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
  512. data/test/rubygems/test_gem_gem_runner.rb +47 -2
  513. data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
  514. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  515. data/test/rubygems/test_gem_indexer.rb +40 -55
  516. data/test/rubygems/test_gem_install_update_options.rb +45 -21
  517. data/test/rubygems/test_gem_installer.rb +661 -338
  518. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  519. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  520. data/test/rubygems/test_gem_package.rb +132 -45
  521. data/test/rubygems/test_gem_package_old.rb +56 -55
  522. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  523. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  524. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
  525. data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
  526. data/test/rubygems/test_gem_package_task.rb +46 -13
  527. data/test/rubygems/test_gem_path_support.rb +17 -13
  528. data/test/rubygems/test_gem_platform.rb +74 -7
  529. data/test/rubygems/test_gem_rdoc.rb +0 -1
  530. data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
  531. data/test/rubygems/test_gem_request.rb +30 -19
  532. data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
  533. data/test/rubygems/test_gem_request_set.rb +104 -29
  534. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
  535. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
  536. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
  537. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  538. data/test/rubygems/test_gem_requirement.rb +50 -4
  539. data/test/rubygems/test_gem_resolver.rb +73 -31
  540. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
  541. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  542. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  543. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  544. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  545. data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
  546. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  547. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  548. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
  549. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  550. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
  551. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
  552. data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
  553. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  554. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  555. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  556. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  557. data/test/rubygems/test_gem_resolver_specification.rb +0 -2
  558. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  559. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  560. data/test/rubygems/test_gem_security.rb +27 -25
  561. data/test/rubygems/test_gem_security_policy.rb +7 -12
  562. data/test/rubygems/test_gem_security_signer.rb +11 -12
  563. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  564. data/test/rubygems/test_gem_server.rb +13 -12
  565. data/test/rubygems/test_gem_silent_ui.rb +0 -1
  566. data/test/rubygems/test_gem_source.rb +32 -17
  567. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  568. data/test/rubygems/test_gem_source_git.rb +12 -18
  569. data/test/rubygems/test_gem_source_installed.rb +11 -13
  570. data/test/rubygems/test_gem_source_list.rb +1 -1
  571. data/test/rubygems/test_gem_source_local.rb +8 -9
  572. data/test/rubygems/test_gem_source_lock.rb +17 -19
  573. data/test/rubygems/test_gem_source_specific_file.rb +9 -10
  574. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  575. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  576. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  577. data/test/rubygems/test_gem_specification.rb +363 -245
  578. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  579. data/test/rubygems/test_gem_stub_specification.rb +6 -7
  580. data/test/rubygems/test_gem_text.rb +1 -2
  581. data/test/rubygems/test_gem_uninstaller.rb +165 -22
  582. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  583. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  584. data/test/rubygems/test_gem_util.rb +17 -15
  585. data/test/rubygems/test_gem_validator.rb +4 -7
  586. data/test/rubygems/test_gem_version.rb +23 -10
  587. data/test/rubygems/test_gem_version_option.rb +1 -3
  588. data/test/rubygems/test_kernel.rb +25 -9
  589. data/test/rubygems/test_project_sanity.rb +20 -0
  590. data/test/rubygems/test_remote_fetch_error.rb +1 -2
  591. data/test/rubygems/test_require.rb +394 -56
  592. data/test/test_changelog_generator.rb +17 -0
  593. metadata +109 -155
  594. data/.rubocop.yml +0 -67
  595. data/.travis.yml +0 -38
  596. data/appveyor.yml +0 -43
  597. data/bundler/CODE_OF_CONDUCT.md +0 -42
  598. data/bundler/CONTRIBUTING.md +0 -17
  599. data/bundler/exe/bundle_ruby +0 -60
  600. data/bundler/lib/bundler/cli/package.rb +0 -49
  601. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  602. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  603. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  604. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  605. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  606. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  608. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  609. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  610. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  611. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  612. data/lib/rubygems/source_local.rb +0 -7
  613. data/lib/rubygems/source_specific_file.rb +0 -6
  614. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  615. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  617. data/lib/ubygems.rb +0 -14
  618. data/util/CL2notes +0 -55
  619. data/util/ci +0 -82
  620. data/util/cops/deprecations.rb +0 -52
  621. data/util/create_certs.rb +0 -171
  622. data/util/create_certs.sh +0 -27
  623. data/util/create_encrypted_key.rb +0 -16
  624. data/util/generate_spdx_license_list.rb +0 -61
  625. data/util/patch_with_prs.rb +0 -77
  626. data/util/rubocop +0 -8
  627. data/util/update_bundled_ca_certificates.rb +0 -139
  628. data/util/update_changelog.rb +0 -67
@@ -4,7 +4,6 @@ require 'rubygems/available_set'
4
4
  require 'rubygems/security'
5
5
 
6
6
  class TestGemAvailableSet < Gem::TestCase
7
-
8
7
  def setup
9
8
  super
10
9
 
@@ -37,12 +36,12 @@ class TestGemAvailableSet < Gem::TestCase
37
36
 
38
37
  dep = Gem::Resolver::DependencyRequest.new dep('a'), nil
39
38
 
40
- assert_equal %w[a-1], set.find_all(dep).map { |spec| spec.full_name }
39
+ assert_equal %w[a-1], set.find_all(dep).map {|spec| spec.full_name }
41
40
 
42
41
  dep = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil
43
42
 
44
43
  assert_equal %w[a-1 a-1.a],
45
- set.find_all(dep).map { |spec| spec.full_name }.sort
44
+ set.find_all(dep).map {|spec| spec.full_name }.sort
46
45
  end
47
46
 
48
47
  def test_match_platform
@@ -68,7 +67,7 @@ class TestGemAvailableSet < Gem::TestCase
68
67
 
69
68
  def test_best
70
69
  a1, _ = util_gem 'a', '1'
71
- a2, _ = util_gem 'a', '2'
70
+ a2, _ = util_gem 'a', '2'
72
71
 
73
72
  set = Gem::AvailableSet.new
74
73
  set.add a1, @source
@@ -97,7 +96,7 @@ class TestGemAvailableSet < Gem::TestCase
97
96
 
98
97
  def test_sorted_normal_versions
99
98
  a1, _ = util_gem 'a', '1'
100
- a2, _ = util_gem 'a', '2'
99
+ a2, _ = util_gem 'a', '2'
101
100
 
102
101
  set = Gem::AvailableSet.new
103
102
  set.add a1, @source
@@ -123,7 +122,7 @@ class TestGemAvailableSet < Gem::TestCase
123
122
  set.add a2a, @source
124
123
  set.add a2, @source
125
124
 
126
- g = set.sorted.map { |t| t.spec }
125
+ g = set.sorted.map {|t| t.spec }
127
126
 
128
127
  assert_equal [a3a, a2, a2a, a1, a1a], g
129
128
  end
@@ -77,6 +77,24 @@ class TestGemBundlerVersionFinder < Gem::TestCase
77
77
  end
78
78
  end
79
79
 
80
+ def test_deleted_directory
81
+ skip "Cannot perform this test on windows" if win_platform?
82
+ skip "Cannot perform this test on Solaris" if /solaris/ =~ RUBY_PLATFORM
83
+ require "tmpdir"
84
+
85
+ orig_dir = Dir.pwd
86
+
87
+ begin
88
+ Dir.mktmpdir("some_dir") do |dir|
89
+ Dir.chdir(dir)
90
+ end
91
+ ensure
92
+ Dir.chdir(orig_dir)
93
+ end
94
+
95
+ assert_nil bvf.bundler_version_with_reason
96
+ end
97
+
80
98
  def test_compatible
81
99
  assert bvf.compatible?(util_spec("foo"))
82
100
  assert bvf.compatible?(util_spec("bundler", 1.1))
@@ -101,7 +119,7 @@ class TestGemBundlerVersionFinder < Gem::TestCase
101
119
 
102
120
  def test_filter
103
121
  versions = %w[1 1.0 1.0.1.1 2 2.a 2.0 2.1.1 3 3.a 3.0 3.1.1]
104
- specs = versions.map { |v| util_spec("bundler", v) }
122
+ specs = versions.map {|v| util_spec("bundler", v) }
105
123
 
106
124
  assert_equal %w[1 1.0 1.0.1.1 2 2.a 2.0 2.1.1 3 3.a 3.0 3.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
107
125
 
@@ -115,7 +133,7 @@ class TestGemBundlerVersionFinder < Gem::TestCase
115
133
  assert_equal %w[1 1.0 1.0.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
116
134
  end
117
135
  bvf.stub(:bundler_version, v("2.a")) do
118
- assert_equal %w[2 2.a 2.0 2.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
136
+ assert_equal %w[2.a 2 2.0 2.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
119
137
  end
120
138
  bvf.stub(:bundler_version, v("3")) do
121
139
  assert_equal %w[3 3.a 3.0 3.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
@@ -7,7 +7,6 @@ class Gem::Command
7
7
  end
8
8
 
9
9
  class TestGemCommand < Gem::TestCase
10
-
11
10
  def setup
12
11
  super
13
12
 
@@ -15,7 +14,7 @@ class TestGemCommand < Gem::TestCase
15
14
 
16
15
  @common_options = Gem::Command.common_options.dup
17
16
  Gem::Command.common_options.clear
18
- Gem::Command.common_options << [
17
+ Gem::Command.common_options << [
19
18
  ['-x', '--exe', 'Execute'], lambda do |*a|
20
19
  @xopt = true
21
20
  end
@@ -32,7 +31,7 @@ class TestGemCommand < Gem::TestCase
32
31
 
33
32
  def test_self_add_specific_extra_args
34
33
  added_args = %w[--all]
35
- @cmd.add_option '--all' do |v,o| end
34
+ @cmd.add_option('--all') {|v,o| }
36
35
 
37
36
  Gem::Command.add_specific_extra_args @cmd_name, added_args
38
37
 
@@ -55,6 +54,27 @@ class TestGemCommand < Gem::TestCase
55
54
  assert_equal [], h
56
55
  end
57
56
 
57
+ def test_self_extra_args
58
+ verbose, $VERBOSE, separator = $VERBOSE, nil, $;
59
+ extra_args = Gem::Command.extra_args
60
+
61
+ Gem::Command.extra_args = %w[--all]
62
+ assert_equal %w[--all], Gem::Command.extra_args
63
+
64
+ Gem::Command.extra_args = "--file --help"
65
+ assert_equal %w[--file --help], Gem::Command.extra_args
66
+
67
+ $; = "="
68
+
69
+ Gem::Command.extra_args = "--awesome=true --verbose"
70
+ assert_equal %w[--awesome=true --verbose], Gem::Command.extra_args
71
+
72
+ ensure
73
+ Gem::Command.extra_args = extra_args
74
+ $; = separator
75
+ $VERBOSE = verbose
76
+ end
77
+
58
78
  def test_basic_accessors
59
79
  assert_equal "doit", @cmd.command
60
80
  assert_equal "gem doit", @cmd.program_name
@@ -80,7 +100,7 @@ class TestGemCommand < Gem::TestCase
80
100
  @cmd.invoke
81
101
  end
82
102
 
83
- assert_match %r|Usage: gem doit|, @ui.output
103
+ assert_match %r{Usage: gem doit}, @ui.output
84
104
  end
85
105
 
86
106
  def test_invoke
@@ -96,7 +116,7 @@ class TestGemCommand < Gem::TestCase
96
116
 
97
117
  def test_invoke_with_bad_options
98
118
  use_ui @ui do
99
- @cmd.when_invoked do true end
119
+ @cmd.when_invoked { true }
100
120
 
101
121
  ex = assert_raises OptionParser::InvalidOption do
102
122
  @cmd.invoke('-zzz')
@@ -107,7 +127,7 @@ class TestGemCommand < Gem::TestCase
107
127
  end
108
128
 
109
129
  def test_invoke_with_common_options
110
- @cmd.when_invoked do true end
130
+ @cmd.when_invoked { true }
111
131
 
112
132
  use_ui @ui do
113
133
  @cmd.invoke "-x"
@@ -166,7 +186,7 @@ class TestGemCommand < Gem::TestCase
166
186
  @cmd.invoke '-h'
167
187
  end
168
188
 
169
- assert_match %r|Usage: gem doit|, @ui.output
189
+ assert_match %r{Usage: gem doit}, @ui.output
170
190
  end
171
191
 
172
192
  def test_option_recognition
@@ -195,6 +215,122 @@ class TestGemCommand < Gem::TestCase
195
215
  assert_equal ['-h', 'command'], args
196
216
  end
197
217
 
218
+ def test_deprecate_option
219
+ deprecate_msg = <<-EXPECTED
220
+ WARNING: The \"--test\" option has been deprecated and will be removed in Rubygems 3.1.
221
+ EXPECTED
222
+
223
+ testCommand = Class.new(Gem::Command) do
224
+ def initialize
225
+ super('test', 'Gem::Command instance for testing')
226
+
227
+ add_option('-t', '--test', 'Test command') do |value, options|
228
+ options[:test] = true
229
+ end
230
+
231
+ deprecate_option('--test', version: '3.1')
232
+ end
233
+
234
+ def execute
235
+ true
236
+ end
237
+ end
238
+
239
+ cmd = testCommand.new
240
+
241
+ use_ui @ui do
242
+ cmd.invoke("--test")
243
+ assert_equal deprecate_msg, @ui.error
244
+ end
245
+ end
246
+
247
+ def test_deprecate_option_no_version
248
+ deprecate_msg = <<-EXPECTED
249
+ WARNING: The \"--test\" option has been deprecated and will be removed in future versions of Rubygems.
250
+ EXPECTED
251
+
252
+ testCommand = Class.new(Gem::Command) do
253
+ def initialize
254
+ super('test', 'Gem::Command instance for testing')
255
+
256
+ add_option('-t', '--test', 'Test command') do |value, options|
257
+ options[:test] = true
258
+ end
259
+
260
+ deprecate_option('--test')
261
+ end
262
+
263
+ def execute
264
+ true
265
+ end
266
+ end
267
+
268
+ cmd = testCommand.new
269
+
270
+ use_ui @ui do
271
+ cmd.invoke("--test")
272
+ assert_equal deprecate_msg, @ui.error
273
+ end
274
+ end
275
+
276
+ def test_deprecate_option_extra_message
277
+ deprecate_msg = <<-EXPECTED
278
+ WARNING: The \"--test\" option has been deprecated and will be removed in Rubygems 3.1. Whether you set `--test` mode or not, this dummy app always runs in test mode.
279
+ EXPECTED
280
+
281
+ testCommand = Class.new(Gem::Command) do
282
+ def initialize
283
+ super('test', 'Gem::Command instance for testing')
284
+
285
+ add_option('-t', '--test', 'Test command') do |value, options|
286
+ options[:test] = true
287
+ end
288
+
289
+ deprecate_option('--test', version: '3.1', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
290
+ end
291
+
292
+ def execute
293
+ true
294
+ end
295
+ end
296
+
297
+ cmd = testCommand.new
298
+
299
+ use_ui @ui do
300
+ cmd.invoke("--test")
301
+ assert_equal deprecate_msg, @ui.error
302
+ end
303
+ end
304
+
305
+ def test_deprecate_option_extra_message_and_no_version
306
+ deprecate_msg = <<-EXPECTED
307
+ WARNING: The \"--test\" option has been deprecated and will be removed in future versions of Rubygems. Whether you set `--test` mode or not, this dummy app always runs in test mode.
308
+ EXPECTED
309
+
310
+ testCommand = Class.new(Gem::Command) do
311
+ def initialize
312
+ super('test', 'Gem::Command instance for testing')
313
+
314
+ add_option('-t', '--test', 'Test command') do |value, options|
315
+ options[:test] = true
316
+ end
317
+
318
+ deprecate_option('--test', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
319
+ end
320
+
321
+ def execute
322
+ true
323
+ end
324
+ end
325
+
326
+ cmd = testCommand.new
327
+
328
+ use_ui @ui do
329
+ cmd.invoke("--test")
330
+ assert_equal deprecate_msg, @ui.error
331
+ end
332
+ end
333
+
198
334
  def test_show_lookup_failure_suggestions_local
199
335
  correct = "non_existent_with_hint"
200
336
  misspelled = "nonexistent_with_hint"
@@ -239,7 +375,7 @@ ERROR: Could not find a valid gem 'other' (>= 0) in any repository
239
375
  end
240
376
 
241
377
  use_ui @ui do
242
- @cmd.show_lookup_failure misspelled, Gem::Requirement.default, [], :remote
378
+ @cmd.show_lookup_failure misspelled, Gem::Requirement.default, []
243
379
  end
244
380
 
245
381
  expected = <<-EXPECTED
@@ -249,5 +385,4 @@ ERROR: Possible alternatives: non_existent_with_hint
249
385
 
250
386
  assert_equal expected, @ui.error
251
387
  end
252
-
253
388
  end
@@ -3,6 +3,7 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/command_manager'
4
4
 
5
5
  class TestGemCommandManager < Gem::TestCase
6
+ PROJECT_DIR = File.expand_path('../../..', __FILE__).tap(&Gem::UNTAINT)
6
7
 
7
8
  def setup
8
9
  super
@@ -58,7 +59,7 @@ class TestGemCommandManager < Gem::TestCase
58
59
 
59
60
  def test_run_interrupt
60
61
  old_load_path = $:.dup
61
- $: << File.expand_path("test/rubygems", @@project_dir)
62
+ $: << File.expand_path("test/rubygems", PROJECT_DIR)
62
63
  Gem.load_env_plugins
63
64
 
64
65
  @command_manager.register_command :interrupt
@@ -77,7 +78,7 @@ class TestGemCommandManager < Gem::TestCase
77
78
 
78
79
  def test_run_crash_command
79
80
  old_load_path = $:.dup
80
- $: << File.expand_path("test/rubygems", @@project_dir)
81
+ $: << File.expand_path("test/rubygems", PROJECT_DIR)
81
82
 
82
83
  @command_manager.register_command :crash
83
84
  use_ui @ui do
@@ -103,16 +104,6 @@ class TestGemCommandManager < Gem::TestCase
103
104
  assert_match(/invalid option: --bad-arg/i, @ui.error)
104
105
  end
105
106
 
106
- def test_process_args_bad_no_ri
107
- use_ui @ui do
108
- assert_raises Gem::MockGemUi::TermError do
109
- @command_manager.process_args %w[--no-ri]
110
- end
111
- end
112
-
113
- assert_match(/invalid option: --no-ri. Use --no-document instead./i, @ui.error)
114
- end
115
-
116
107
  # HACK move to install command test
117
108
  def test_process_args_install
118
109
  #capture all install options
@@ -137,7 +128,7 @@ class TestGemCommandManager < Gem::TestCase
137
128
  check_options = nil
138
129
  @command_manager.process_args %w[
139
130
  install --force --local --document=ri,rdoc --install-dir .
140
- --version 3.0 --no-wrapper --bindir .
131
+ --version 3.0 --no-wrapper --bindir .
141
132
  ]
142
133
  assert_equal %w[rdoc ri], check_options[:document].sort
143
134
  assert_equal true, check_options[:force]
@@ -232,26 +223,34 @@ class TestGemCommandManager < Gem::TestCase
232
223
  end
233
224
 
234
225
  #check defaults
235
- @command_manager.process_args %w[query]
226
+ Gem::Deprecate.skip_during do
227
+ @command_manager.process_args %w[query]
228
+ end
236
229
  assert_equal(//, check_options[:name])
237
230
  assert_equal :local, check_options[:domain]
238
231
  assert_equal false, check_options[:details]
239
232
 
240
233
  #check settings
241
234
  check_options = nil
242
- @command_manager.process_args %w[query --name foobar --local --details]
235
+ Gem::Deprecate.skip_during do
236
+ @command_manager.process_args %w[query --name foobar --local --details]
237
+ end
243
238
  assert_equal(/foobar/i, check_options[:name])
244
239
  assert_equal :local, check_options[:domain]
245
240
  assert_equal true, check_options[:details]
246
241
 
247
242
  #remote domain
248
243
  check_options = nil
249
- @command_manager.process_args %w[query --remote]
244
+ Gem::Deprecate.skip_during do
245
+ @command_manager.process_args %w[query --remote]
246
+ end
250
247
  assert_equal :remote, check_options[:domain]
251
248
 
252
249
  #both (local/remote) domains
253
250
  check_options = nil
254
- @command_manager.process_args %w[query --both]
251
+ Gem::Deprecate.skip_during do
252
+ @command_manager.process_args %w[query --both]
253
+ end
255
254
  assert_equal :both, check_options[:domain]
256
255
  end
257
256
 
@@ -276,4 +275,28 @@ class TestGemCommandManager < Gem::TestCase
276
275
  assert_equal Dir.pwd, check_options[:install_dir]
277
276
  end
278
277
 
278
+ def test_deprecated_command
279
+ require 'rubygems/command'
280
+ foo_command = Class.new(Gem::Command) do
281
+ extend Gem::Deprecate
282
+
283
+ rubygems_deprecate_command
284
+
285
+ def execute
286
+ say "pew pew!"
287
+ end
288
+ end
289
+
290
+ Gem::Commands.send(:const_set, :FooCommand, foo_command)
291
+ @command_manager.register_command(:foo, foo_command.new("foo"))
292
+
293
+ use_ui @ui do
294
+ @command_manager.process_args(%w[foo])
295
+ end
296
+
297
+ assert_equal "pew pew!\n", @ui.output
298
+ assert_match(/WARNING: foo command is deprecated. It will be removed in Rubygems [0-9]+/, @ui.error)
299
+ ensure
300
+ Gem::Commands.send(:remove_const, :FooCommand)
301
+ end
279
302
  end
@@ -1,11 +1,9 @@
1
-
2
1
  # frozen_string_literal: true
3
2
  require 'rubygems/test_case'
4
3
  require 'rubygems/commands/build_command'
5
4
  require 'rubygems/package'
6
5
 
7
6
  class TestGemCommandsBuildCommand < Gem::TestCase
8
-
9
7
  CERT_FILE = cert_path 'public3072'
10
8
  SIGNING_KEY = key_path 'private3072'
11
9
 
@@ -17,8 +15,13 @@ class TestGemCommandsBuildCommand < Gem::TestCase
17
15
 
18
16
  readme_file = File.join(@tempdir, 'README.md')
19
17
 
20
- File.open readme_file, 'w' do |f|
21
- f.write 'My awesome gem'
18
+ begin
19
+ umask_orig = File.umask(2)
20
+ File.open readme_file, 'w' do |f|
21
+ f.write 'My awesome gem'
22
+ end
23
+ ensure
24
+ File.umask(umask_orig)
22
25
  end
23
26
 
24
27
  @gem = util_spec 'some_gem' do |s|
@@ -34,6 +37,8 @@ class TestGemCommandsBuildCommand < Gem::TestCase
34
37
 
35
38
  assert @cmd.options[:force]
36
39
  assert @cmd.options[:strict]
40
+ assert @cmd.handles?(%W[--platform #{Gem::Platform.local}])
41
+ assert_includes Gem.platforms, Gem::Platform.local
37
42
  end
38
43
 
39
44
  def test_options_filename
@@ -83,6 +88,26 @@ class TestGemCommandsBuildCommand < Gem::TestCase
83
88
  util_test_build_gem @gem
84
89
  end
85
90
 
91
+ def test_execute_platform
92
+ gemspec_file = File.join(@tempdir, @gem.spec_name)
93
+
94
+ File.open gemspec_file, 'w' do |gs|
95
+ gs.write @gem.to_ruby
96
+ end
97
+
98
+ @cmd.options[:args] = [gemspec_file]
99
+
100
+ platforms = Gem.platforms.dup
101
+ begin
102
+ Gem.platforms << Gem::Platform.new("java")
103
+
104
+ spec = util_test_build_gem @gem, suffix: "java"
105
+ ensure
106
+ Gem.platforms.replace(platforms)
107
+ end
108
+ assert_match spec.platform, "java"
109
+ end
110
+
86
111
  def test_execute_bad_name
87
112
  [".", "-", "_"].each do |special_char|
88
113
  gem = util_spec 'some_gem_with_bad_name' do |s|
@@ -122,6 +147,23 @@ class TestGemCommandsBuildCommand < Gem::TestCase
122
147
  util_test_build_gem @gem
123
148
  end
124
149
 
150
+ def test_execute_rubyforge_project_warning
151
+ rubyforge_gemspec = File.expand_path File.join("specifications", "rubyforge-0.0.1.gemspec"), __dir__
152
+
153
+ @cmd.options[:args] = [rubyforge_gemspec]
154
+
155
+ use_ui @ui do
156
+ Dir.chdir @tempdir do
157
+ @cmd.execute
158
+ end
159
+ end
160
+
161
+ error = @ui.error.split("\n")
162
+ assert_equal "WARNING: rubyforge_project= is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.", error.shift
163
+ assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
164
+ assert_equal [], error
165
+ end
166
+
125
167
  def test_execute_strict_with_warnings
126
168
  bad_gem = util_spec 'some_bad_gem' do |s|
127
169
  s.files = ['README.md']
@@ -147,7 +189,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
147
189
  error = @ui.error.split "\n"
148
190
  assert_equal "WARNING: licenses is empty, but is recommended. Use a license identifier from", error.shift
149
191
  assert_equal "http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.", error.shift
150
- assert_equal "WARNING: See http://guides.rubygems.org/specification-reference/ for help", error.shift
192
+ assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
151
193
  assert_equal [], error
152
194
 
153
195
  gem_file = File.join @tempdir, File.basename(@gem.cache_file)
@@ -189,7 +231,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
189
231
  end
190
232
 
191
233
  assert_equal '', @ui.output
192
- assert_equal "ERROR: Gemspec file not found: some_gem\n", @ui.error
234
+ assert_equal "ERROR: Couldn't find a gemspec file matching 'some_gem' in #{@tempdir}\n", @ui.error
193
235
  end
194
236
 
195
237
  def test_execute_outside_dir
@@ -230,8 +272,200 @@ class TestGemCommandsBuildCommand < Gem::TestCase
230
272
  assert_equal "this is a summary", spec.summary
231
273
  end
232
274
 
275
+ def test_execute_outside_dir_with_glob_argument
276
+ gemspec_dir = File.join @tempdir, 'build_command_gem'
277
+ gemspec_file = File.join gemspec_dir, @gem.spec_name
278
+ readme_file = File.join gemspec_dir, 'README.md'
279
+
280
+ FileUtils.mkdir_p gemspec_dir
281
+
282
+ File.open readme_file, 'w' do |f|
283
+ f.write "My awesome gem"
284
+ end
285
+
286
+ File.open gemspec_file, 'w' do |gs|
287
+ gs.write @gem.to_ruby
288
+ end
289
+
290
+ @cmd.options[:build_path] = gemspec_dir
291
+ @cmd.options[:args] = ["*.gemspec"]
292
+
293
+ use_ui @ui do
294
+ @cmd.execute
295
+ end
296
+
297
+ output = @ui.output.split "\n"
298
+ assert_equal " Successfully built RubyGem", output.shift
299
+ assert_equal " Name: some_gem", output.shift
300
+ assert_equal " Version: 2", output.shift
301
+ assert_equal " File: some_gem-2.gem", output.shift
302
+ assert_equal [], output
303
+
304
+ gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
305
+ assert File.exist?(gem_file)
306
+
307
+ spec = Gem::Package.new(gem_file).spec
308
+
309
+ assert_equal "some_gem", spec.name
310
+ assert_equal "this is a summary", spec.summary
311
+ end
312
+
313
+ def test_execute_outside_dir_no_gemspec_present
314
+ gemspec_dir = File.join @tempdir, 'build_command_gem'
315
+ gemspec_file = File.join @tempdir, @gem.spec_name
316
+ readme_file = File.join gemspec_dir, 'README.md'
317
+
318
+ FileUtils.mkdir_p gemspec_dir
319
+
320
+ File.open readme_file, 'w' do |f|
321
+ f.write "My awesome gem"
322
+ end
323
+
324
+ File.open gemspec_file, 'w' do |gs|
325
+ gs.write @gem.to_ruby
326
+ end
327
+
328
+ @cmd.options[:build_path] = gemspec_dir
329
+ @cmd.options[:args] = ["*.gemspec"]
330
+
331
+ use_ui @ui do
332
+ assert_raises Gem::MockGemUi::TermError do
333
+ @cmd.execute
334
+ end
335
+ end
336
+
337
+ assert_equal "", @ui.output
338
+ assert_equal "ERROR: Couldn't find a gemspec file matching '*.gemspec' in #{gemspec_dir}\n", @ui.error
339
+
340
+ gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
341
+ refute File.exist?(gem_file)
342
+ end
343
+
344
+ def test_execute_outside_dir_without_gem_name
345
+ gemspec_dir = File.join(@tempdir, 'build_command_gem')
346
+ gemspec_file = File.join(gemspec_dir, @gem.spec_name)
347
+
348
+ readme_file = File.join gemspec_dir, 'README.md'
349
+
350
+ FileUtils.mkdir_p(gemspec_dir)
351
+
352
+ File.open readme_file, 'w' do |f|
353
+ f.write "My awesome gem"
354
+ end
355
+
356
+ File.open(gemspec_file, "w") do |gs|
357
+ gs.write(@gem.to_ruby)
358
+ end
359
+
360
+ @cmd.options[:build_path] = gemspec_dir
361
+ @cmd.options[:args] = []
362
+
363
+ use_ui @ui do
364
+ Dir.chdir(gemspec_dir) do
365
+ @cmd.execute
366
+ end
367
+ end
368
+
369
+ output = @ui.output.split("\n")
370
+ assert_equal " Successfully built RubyGem", output.shift
371
+ assert_equal " Name: some_gem", output.shift
372
+ assert_equal " Version: 2", output.shift
373
+ assert_equal " File: some_gem-2.gem", output.shift
374
+ assert_equal [], output
375
+
376
+ gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
377
+ assert File.exist?(gem_file)
378
+
379
+ spec = Gem::Package.new(gem_file).spec
380
+
381
+ assert_equal "some_gem", spec.name
382
+ assert_equal "this is a summary", spec.summary
383
+ end
384
+
385
+ def test_execute_outside_dir_with_external_gemspec
386
+ gemspec_dir = File.join @tempdir, 'gemspec_dir'
387
+ gemspec_file = File.join gemspec_dir, @gem.spec_name
388
+
389
+ gemcode_dir = File.join @tempdir, 'build_command_gem'
390
+ readme_file = File.join gemcode_dir, 'README.md'
391
+
392
+ FileUtils.mkdir_p gemspec_dir
393
+ FileUtils.mkdir_p gemcode_dir
394
+
395
+ File.open readme_file, 'w' do |f|
396
+ f.write "My awesome gem in nested directory"
397
+ end
398
+
399
+ File.open gemspec_file, 'w' do |gs|
400
+ gs.write @gem.to_ruby
401
+ end
402
+
403
+ @cmd.options[:build_path] = gemcode_dir
404
+ @cmd.options[:args] = [gemspec_file]
405
+
406
+ use_ui @ui do
407
+ @cmd.execute
408
+ end
409
+
410
+ output = @ui.output.split "\n"
411
+ assert_equal " Successfully built RubyGem", output.shift
412
+ assert_equal " Name: some_gem", output.shift
413
+ assert_equal " Version: 2", output.shift
414
+ assert_equal " File: some_gem-2.gem", output.shift
415
+ assert_equal [], output
416
+
417
+ gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
418
+ assert File.exist?(gem_file)
419
+
420
+ spec = Gem::Package.new(gem_file).spec
421
+
422
+ assert_equal "some_gem", spec.name
423
+ assert_equal "this is a summary", spec.summary
424
+ end
425
+
426
+ def test_execute_outside_dir_with_external_relative_gemspec
427
+ gemspec_dir = File.join @tempdir, 'gemspec_dir'
428
+ gemspec_file = File.join gemspec_dir, @gem.spec_name
429
+
430
+ gemcode_dir = File.join @tempdir, 'build_command_gem'
431
+ readme_file = File.join gemcode_dir, 'README.md'
432
+
433
+ FileUtils.mkdir_p gemspec_dir
434
+ FileUtils.mkdir_p gemcode_dir
435
+
436
+ File.open readme_file, 'w' do |f|
437
+ f.write "My awesome gem in nested directory"
438
+ end
439
+
440
+ File.open gemspec_file, 'w' do |gs|
441
+ gs.write @gem.to_ruby
442
+ end
443
+
444
+ @cmd.options[:build_path] = gemcode_dir
445
+ @cmd.options[:args] = [File.join("..", "gemspec_dir", @gem.spec_name)]
446
+
447
+ use_ui @ui do
448
+ @cmd.execute
449
+ end
450
+
451
+ output = @ui.output.split "\n"
452
+ assert_equal " Successfully built RubyGem", output.shift
453
+ assert_equal " Name: some_gem", output.shift
454
+ assert_equal " Version: 2", output.shift
455
+ assert_equal " File: some_gem-2.gem", output.shift
456
+ assert_equal [], output
457
+
458
+ gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
459
+ assert File.exist?(gem_file)
460
+
461
+ spec = Gem::Package.new(gem_file).spec
462
+
463
+ assert_equal "some_gem", spec.name
464
+ assert_equal "this is a summary", spec.summary
465
+ end
466
+
233
467
  def test_can_find_gemspecs_without_dot_gemspec
234
- gemspec_file = File.join(@tempdir, @gem.spec_name)
468
+ gemspec_file = File.join(@tempdir, @gem.name)
235
469
 
236
470
  File.open gemspec_file + ".gemspec", 'w' do |gs|
237
471
  gs.write @gem.to_ruby
@@ -242,27 +476,94 @@ class TestGemCommandsBuildCommand < Gem::TestCase
242
476
  util_test_build_gem @gem
243
477
  end
244
478
 
245
- def util_test_build_gem(gem)
479
+ def test_execute_without_gem_name
480
+ some_gem = util_spec "some_gem"
481
+ gemspec_dir = File.join(@tempdir, "build_command_gem")
482
+ gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
483
+
484
+ FileUtils.mkdir_p(gemspec_dir)
485
+
486
+ File.open(gemspec_file, "w") do |gs|
487
+ gs.write(some_gem.to_ruby)
488
+ end
489
+
490
+ @cmd.options[:args] = []
491
+
246
492
  use_ui @ui do
247
- Dir.chdir @tempdir do
493
+ Dir.chdir(gemspec_dir) do
248
494
  @cmd.execute
249
495
  end
250
496
  end
251
497
 
252
- output = @ui.output.split "\n"
498
+ output = @ui.output.split("\n")
253
499
  assert_equal " Successfully built RubyGem", output.shift
254
500
  assert_equal " Name: some_gem", output.shift
255
501
  assert_equal " Version: 2", output.shift
256
502
  assert_equal " File: some_gem-2.gem", output.shift
257
503
  assert_equal [], output
258
504
 
259
- gem_file = File.join @tempdir, File.basename(gem.cache_file)
505
+ some_gem = File.join(gemspec_dir, File.basename(some_gem.cache_file))
506
+ assert File.exist?(some_gem)
507
+ end
508
+
509
+ def test_execute_multiple_gemspec_without_gem_name
510
+ some_gem = util_spec "some_gem"
511
+ another_gem = util_spec "another_gem"
512
+ gemspec_dir = File.join(@tempdir, "build_command_gem")
513
+ gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
514
+ another_gemspec_file = File.join(gemspec_dir, another_gem.spec_name)
515
+
516
+ FileUtils.mkdir_p(gemspec_dir)
517
+
518
+ File.open(gemspec_file, "w") do |gs|
519
+ gs.write(some_gem.to_ruby)
520
+ end
521
+
522
+ File.open(another_gemspec_file, "w") do |gs|
523
+ gs.write(another_gem.to_ruby)
524
+ end
525
+
526
+ @cmd.options[:args] = []
527
+
528
+ use_ui @ui do
529
+ Dir.chdir(gemspec_dir) do
530
+ assert_raises Gem::MockGemUi::TermError do
531
+ @cmd.execute
532
+ end
533
+ end
534
+ end
535
+
536
+ gemspecs = ["another_gem-2.gemspec", "some_gem-2.gemspec"]
537
+ assert_equal "", @ui.output
538
+ assert_equal @ui.error, "ERROR: Multiple gemspecs found: #{gemspecs}, please specify one\n"
539
+
540
+ expected_gem = File.join(gemspec_dir, File.basename(another_gem.cache_file))
541
+ refute File.exist?(expected_gem)
542
+ end
543
+
544
+ def util_test_build_gem(gem, suffix: nil)
545
+ use_ui @ui do
546
+ Dir.chdir @tempdir do
547
+ @cmd.execute
548
+ end
549
+ end
550
+ suffix &&= "-#{suffix}"
551
+ gem_file = "some_gem-2#{suffix}.gem"
552
+ output = @ui.output.split "\n"
553
+ assert_equal " Successfully built RubyGem", output.shift
554
+ assert_equal " Name: some_gem", output.shift
555
+ assert_equal " Version: 2", output.shift
556
+ assert_equal " File: #{gem_file}", output.shift
557
+ assert_equal [], output
558
+
559
+ gem_file = File.join(@tempdir, gem_file)
260
560
  assert File.exist?(gem_file)
261
561
 
262
562
  spec = Gem::Package.new(gem_file).spec
263
563
 
264
564
  assert_equal "some_gem", spec.name
265
565
  assert_equal "this is a summary", spec.summary
566
+ spec
266
567
  end
267
568
 
268
569
  def test_execute_force
@@ -281,7 +582,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
281
582
  end
282
583
 
283
584
  def test_build_signed_gem
284
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
585
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
285
586
 
286
587
  trust_dir = Gem::Security.trust_dir
287
588
 
@@ -308,7 +609,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
308
609
  end
309
610
 
310
611
  def test_build_signed_gem_with_cert_expiration_length_days
311
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
612
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
312
613
 
313
614
  gem_path = File.join Gem.user_home, ".gem"
314
615
  Dir.mkdir gem_path
@@ -351,4 +652,76 @@ class TestGemCommandsBuildCommand < Gem::TestCase
351
652
  assert_equal(28, cert_days_to_expire)
352
653
  end
353
654
 
655
+ def test_build_auto_resign_cert
656
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
657
+
658
+ gem_path = File.join Gem.user_home, ".gem"
659
+ Dir.mkdir gem_path
660
+
661
+ Gem::Security.trust_dir
662
+
663
+ tmp_expired_cert_file = File.join gem_path, "gem-public_cert.pem"
664
+ File.write(tmp_expired_cert_file, File.read(EXPIRED_CERT_FILE))
665
+
666
+ tmp_private_key_file = File.join gem_path, "gem-private_key.pem"
667
+ File.write(tmp_private_key_file, File.read(PRIVATE_KEY_FILE))
668
+
669
+ spec = util_spec 'some_gem' do |s|
670
+ s.signing_key = tmp_private_key_file
671
+ s.cert_chain = [tmp_expired_cert_file]
672
+ end
673
+
674
+ gemspec_file = File.join(@tempdir, spec.spec_name)
675
+
676
+ File.open gemspec_file, 'w' do |gs|
677
+ gs.write spec.to_ruby
678
+ end
679
+
680
+ @cmd.options[:args] = [gemspec_file]
681
+
682
+ Gem.configuration.cert_expiration_length_days = 28
683
+
684
+ use_ui @ui do
685
+ Dir.chdir @tempdir do
686
+ @cmd.execute
687
+ end
688
+ end
689
+
690
+ output = @ui.output.split "\n"
691
+ assert_equal "INFO: Your certificate has expired, trying to re-sign it...", output.shift
692
+ assert_equal "INFO: Your cert: #{tmp_expired_cert_file } has been auto re-signed with the key: #{tmp_private_key_file}", output.shift
693
+ assert_match(/INFO: Your expired cert will be located at: .+\Wgem-public_cert\.pem\.expired\.[0-9]+/, output.shift)
694
+ end
695
+
696
+ def test_build_is_reproducible
697
+ epoch = ENV["SOURCE_DATE_EPOCH"]
698
+ new_epoch = Time.now.to_i.to_s
699
+ ENV["SOURCE_DATE_EPOCH"] = new_epoch
700
+
701
+ gem_file = File.basename(@gem.cache_file)
702
+
703
+ gemspec_file = File.join(@tempdir, @gem.spec_name)
704
+ File.write(gemspec_file, @gem.to_ruby)
705
+ @cmd.options[:args] = [gemspec_file]
706
+
707
+ util_test_build_gem @gem
708
+
709
+ build1_contents = File.read(gem_file)
710
+
711
+ # Guarantee the time has changed.
712
+ sleep 1 if Time.now.to_i == new_epoch
713
+
714
+ ENV["SOURCE_DATE_EPOCH"] = new_epoch
715
+
716
+ @ui = Gem::MockGemUi.new
717
+ @cmd.options[:args] = [gemspec_file]
718
+
719
+ util_test_build_gem @gem
720
+
721
+ build2_contents = File.read(gem_file)
722
+
723
+ assert_equal build1_contents, build2_contents
724
+ ensure
725
+ ENV["SOURCE_DATE_EPOCH"] = epoch
726
+ end
354
727
  end