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
@@ -3,9 +3,11 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/push_command'
4
4
 
5
5
  class TestGemCommandsPushCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
8
+
9
+ credential_setup
10
+
9
11
  ENV["RUBYGEMS_HOST"] = nil
10
12
  Gem.host = Gem::DEFAULT_HOST
11
13
  Gem.configuration.disable_default_gem_server = false
@@ -27,7 +29,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
27
29
 
28
30
  @cmd = Gem::Commands::PushCommand.new
29
31
 
30
- class << Gem
32
+ singleton_gem_class.class_eval do
31
33
  alias_method :orig_latest_rubygems_version, :latest_rubygems_version
32
34
 
33
35
  def latest_rubygems_version
@@ -37,9 +39,11 @@ class TestGemCommandsPushCommand < Gem::TestCase
37
39
  end
38
40
 
39
41
  def teardown
42
+ credential_teardown
43
+
40
44
  super
41
45
 
42
- class << Gem
46
+ singleton_gem_class.class_eval do
43
47
  remove_method :latest_rubygems_version
44
48
  alias_method :latest_rubygems_version, :orig_latest_rubygems_version
45
49
  end
@@ -132,7 +136,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
132
136
  ENV["RUBYGEMS_HOST"] = @host
133
137
  Gem.configuration.disable_default_gem_server = true
134
138
  @response = "Successfully registered gem: freewill (1.0.0)"
135
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
139
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
136
140
 
137
141
  send_battery
138
142
  end
@@ -148,7 +152,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
148
152
 
149
153
  keys = {
150
154
  :rubygems_api_key => 'KEY',
151
- @host => @api_key
155
+ @host => @api_key,
152
156
  }
153
157
 
154
158
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -160,14 +164,14 @@ class TestGemCommandsPushCommand < Gem::TestCase
160
164
  FileUtils.rm Gem.configuration.credentials_path
161
165
 
162
166
  @response = "Successfully registered gem: freebird (1.0.1)"
163
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
167
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
164
168
 
165
169
  send_battery
166
170
  end
167
171
 
168
172
  def test_sending_gem
169
173
  @response = "Successfully registered gem: freewill (1.0.0)"
170
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
174
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
171
175
 
172
176
  send_battery
173
177
  end
@@ -183,7 +187,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
183
187
 
184
188
  keys = {
185
189
  :rubygems_api_key => 'KEY',
186
- @host => @api_key
190
+ @host => @api_key,
187
191
  }
188
192
 
189
193
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -195,7 +199,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
195
199
  FileUtils.rm Gem.configuration.credentials_path
196
200
 
197
201
  @response = "Successfully registered gem: freebird (1.0.1)"
198
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
202
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
199
203
  send_battery
200
204
  end
201
205
 
@@ -210,7 +214,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
210
214
  ENV["GEM_HOST_API_KEY"] = "PRIVKEY"
211
215
 
212
216
  @response = "Successfully registered gem: freebird (1.0.1)"
213
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
217
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
214
218
  send_battery
215
219
  end
216
220
 
@@ -237,7 +241,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
237
241
  FileUtils.rm Gem.configuration.credentials_path
238
242
 
239
243
  @response = "Successfully registered gem: freebird (1.0.1)"
240
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
244
+ @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
241
245
  send_battery
242
246
  end
243
247
 
@@ -246,8 +250,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
246
250
  spec.metadata['allowed_push_host'] = "https://privategemserver.example"
247
251
  end
248
252
 
249
-
250
- response = %{ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.example"}
253
+ response = %(ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.example")
251
254
 
252
255
  assert_raises Gem::MockGemUi::TermError do
253
256
  send_battery
@@ -268,7 +271,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
268
271
 
269
272
  keys = {
270
273
  :rubygems_api_key => 'KEY',
271
- @host => @api_key
274
+ @host => @api_key,
272
275
  }
273
276
 
274
277
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -299,7 +302,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
299
302
  api_key = "PRIVKEY"
300
303
 
301
304
  keys = {
302
- host => api_key
305
+ host => api_key,
303
306
  }
304
307
 
305
308
  FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
@@ -311,7 +314,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
311
314
  FileUtils.rm Gem.configuration.credentials_path
312
315
 
313
316
  @response = "Successfully registered gem: freebird (1.0.1)"
314
- @fetcher.data["#{host}/api/v1/gems"] = [@response, 200, 'OK']
317
+ @fetcher.data["#{host}/api/v1/gems"] = [@response, 200, 'OK']
315
318
 
316
319
  # do not set @host
317
320
  use_ui(@ui) { @cmd.send_gem(@path) }
@@ -356,7 +359,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
356
359
  end
357
360
  Gem.configuration.load_api_keys
358
361
 
359
- @cmd.handle_options %w(-k other)
362
+ @cmd.handle_options %w[-k other]
360
363
  @cmd.instance_variable_set :@host, @host
361
364
  @cmd.send_gem(@path)
362
365
 
@@ -368,10 +371,10 @@ class TestGemCommandsPushCommand < Gem::TestCase
368
371
  response_fail = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry."
369
372
  response_success = 'Successfully registered gem: freewill (1.0.0)'
370
373
 
371
- @fetcher.data["#{Gem.host}/api/v1/gems"] = proc do
372
- @call_count ||= 0
373
- (@call_count += 1).odd? ? [response_fail, 401, 'Unauthorized'] : [response_success, 200, 'OK']
374
- end
374
+ @fetcher.data["#{Gem.host}/api/v1/gems"] = [
375
+ [response_fail, 401, 'Unauthorized'],
376
+ [response_success, 200, 'OK'],
377
+ ]
375
378
 
376
379
  @otp_ui = Gem::MockGemUi.new "111111\n"
377
380
  use_ui @otp_ui do
@@ -401,4 +404,74 @@ class TestGemCommandsPushCommand < Gem::TestCase
401
404
  assert_equal '111111', @fetcher.last_request['OTP']
402
405
  end
403
406
 
407
+ def test_sending_gem_unathorized_api_key_with_mfa_enabled
408
+ response_mfa_enabled = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry."
409
+ response_forbidden = "The API key doesn't have access"
410
+ response_success = 'Successfully registered gem: freewill (1.0.0)'
411
+
412
+ @fetcher.data["#{@host}/api/v1/gems"] = [
413
+ [response_mfa_enabled, 401, 'Unauthorized'],
414
+ [response_forbidden, 403, 'Forbidden'],
415
+ [response_success, 200, "OK"],
416
+ ]
417
+
418
+ @fetcher.data["#{@host}/api/v1/api_key"] = ["", 200, "OK"]
419
+ @cmd.instance_variable_set :@host, @host
420
+ @cmd.instance_variable_set :@scope, :push_rubygem
421
+
422
+ @ui = Gem::MockGemUi.new "11111\nsome@mail.com\npass\n"
423
+ use_ui @ui do
424
+ @cmd.send_gem(@path)
425
+ end
426
+
427
+ mfa_notice = "You have enabled multi-factor authentication. Please enter OTP code."
428
+ access_notice = "The existing key doesn't have access of push_rubygem on https://rubygems.example. Please sign in to update access."
429
+ assert_match mfa_notice, @ui.output
430
+ assert_match access_notice, @ui.output
431
+ assert_match "Email:", @ui.output
432
+ assert_match "Password:", @ui.output
433
+ assert_match "Added push_rubygem scope to the existing API key", @ui.output
434
+ assert_match response_success, @ui.output
435
+ assert_equal '11111', @fetcher.last_request['OTP']
436
+ end
437
+
438
+ def test_sending_gem_with_no_local_creds
439
+ Gem.configuration.rubygems_api_key = nil
440
+
441
+ response_mfa_enabled = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry."
442
+ response_success = 'Successfully registered gem: freewill (1.0.0)'
443
+
444
+ @fetcher.data["#{@host}/api/v1/gems"] = [
445
+ [response_success, 200, "OK"],
446
+ ]
447
+
448
+ @fetcher.data["#{@host}/api/v1/api_key"] = [
449
+ [response_mfa_enabled, 401, 'Unauthorized'],
450
+ ["", 200, "OK"],
451
+ ]
452
+
453
+ @cmd.instance_variable_set :@scope, :push_rubygem
454
+ @cmd.options[:args] = [@path]
455
+ @cmd.options[:host] = @host
456
+
457
+ @ui = Gem::MockGemUi.new "some@mail.com\npass\n11111\n"
458
+ use_ui @ui do
459
+ @cmd.execute
460
+ end
461
+
462
+ mfa_notice = "You have enabled multi-factor authentication. Please enter OTP code."
463
+ assert_match mfa_notice, @ui.output
464
+ assert_match "Enter your https://rubygems.example credentials.", @ui.output
465
+ assert_match "Email:", @ui.output
466
+ assert_match "Password:", @ui.output
467
+ assert_match "Signed in with API key:", @ui.output
468
+ assert_match response_success, @ui.output
469
+ assert_equal '11111', @fetcher.last_request['OTP']
470
+ end
471
+
472
+ private
473
+
474
+ def singleton_gem_class
475
+ class << Gem; self; end
476
+ end
404
477
  end
@@ -458,7 +458,28 @@ pl (1 i386-linux)
458
458
  EOF
459
459
 
460
460
  assert_equal expected, @stub_ui.output
461
- assert_equal "WARNING: prereleases are always shown locally\n", @stub_ui.error
461
+ end
462
+
463
+ def test_execute_no_prerelease_local
464
+ spec_fetcher do |fetcher|
465
+ fetcher.legacy_platform
466
+ end
467
+
468
+ @cmd.handle_options %w[-l --no-prerelease]
469
+
470
+ use_ui @stub_ui do
471
+ @cmd.execute
472
+ end
473
+
474
+ expected = <<-EOF
475
+
476
+ *** LOCAL GEMS ***
477
+
478
+ a (2, 1)
479
+ pl (1 i386-linux)
480
+ EOF
481
+
482
+ assert_equal expected, @stub_ui.output
462
483
  end
463
484
 
464
485
  def test_execute_remote
@@ -558,8 +579,8 @@ pl (1 i386-linux)
558
579
  @cmd.execute
559
580
  end
560
581
 
561
- assert_match %r%^a %, @stub_ui.output
562
- assert_match %r%^pl %, @stub_ui.output
582
+ assert_match %r{^a }, @stub_ui.output
583
+ assert_match %r{^pl }, @stub_ui.output
563
584
  assert_equal '', @stub_ui.error
564
585
  end
565
586
 
@@ -568,11 +589,11 @@ pl (1 i386-linux)
568
589
  @cmd.options[:domain] = :remote
569
590
 
570
591
  use_ui @stub_ui do
571
- @cmd.send :show_gems, /a/i, false
592
+ @cmd.send :show_gems, /a/i
572
593
  end
573
594
 
574
- assert_match %r%^a %, @stub_ui.output
575
- refute_match %r%^pl %, @stub_ui.output
595
+ assert_match %r{^a }, @stub_ui.output
596
+ refute_match %r{^pl }, @stub_ui.output
576
597
  assert_empty @stub_ui.error
577
598
  end
578
599
 
@@ -620,10 +641,10 @@ a (2 universal-darwin, 1 ruby x86-linux)
620
641
  end
621
642
 
622
643
  def test_execute_show_default_gems
623
- spec_fetcher { |fetcher| fetcher.spec 'a', 2 }
644
+ spec_fetcher {|fetcher| fetcher.spec 'a', 2 }
624
645
 
625
646
  a1 = new_default_spec 'a', 1
626
- install_default_specs a1
647
+ install_default_gems a1
627
648
 
628
649
  use_ui @stub_ui do
629
650
  @cmd.execute
@@ -642,7 +663,7 @@ EOF
642
663
  def test_execute_show_default_gems_with_platform
643
664
  a1 = new_default_spec 'a', 1
644
665
  a1.platform = 'java'
645
- install_default_specs a1
666
+ install_default_gems a1
646
667
 
647
668
  use_ui @stub_ui do
648
669
  @cmd.execute
@@ -664,7 +685,7 @@ EOF
664
685
  end
665
686
 
666
687
  a1 = new_default_spec 'a', 1
667
- install_default_specs a1
688
+ install_default_gems a1
668
689
 
669
690
  @cmd.handle_options %w[-l -d]
670
691
 
@@ -820,6 +841,10 @@ othergem (1.2.3)
820
841
  assert_equal expected, @stub_ui.output
821
842
  end
822
843
 
844
+ def test_depprecated
845
+ assert @cmd.deprecated?
846
+ end
847
+
823
848
  private
824
849
 
825
850
  def add_gems_to_fetcher
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/search_command'
4
4
 
5
5
  class TestGemCommandsSearchCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -13,5 +12,4 @@ class TestGemCommandsSearchCommand < Gem::TestCase
13
12
  def test_initialize
14
13
  assert_equal :remote, @cmd.defaults[:domain]
15
14
  end
16
-
17
15
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/commands/server_command'
4
4
 
5
5
  class TestGemCommandsServerCommand < Gem::TestCase
6
-
7
6
  def setup
8
7
  super
9
8
 
@@ -38,8 +37,12 @@ class TestGemCommandsServerCommand < Gem::TestCase
38
37
  @cmd.send :handle_options, %w[-p 65535]
39
38
  assert_equal 65535, @cmd.options[:port]
40
39
 
41
- @cmd.send :handle_options, %w[-p discard]
42
- assert_equal 9, @cmd.options[:port]
40
+ begin
41
+ @cmd.send :handle_options, %w[-p discard]
42
+ assert_equal 9, @cmd.options[:port]
43
+ rescue OptionParser::InvalidArgument
44
+ # for container environment on GitHub Actions
45
+ end
43
46
 
44
47
  e = assert_raises OptionParser::InvalidArgument do
45
48
  @cmd.send :handle_options, %w[-p nonexistent]
@@ -55,5 +58,4 @@ class TestGemCommandsServerCommand < Gem::TestCase
55
58
  assert_equal 'invalid argument: -p 65536: not a port number',
56
59
  e.message
57
60
  end
58
-
59
61
  end
@@ -1,16 +1,14 @@
1
- # coding: UTF-8
2
1
  # frozen_string_literal: true
3
2
 
4
3
  require 'rubygems/test_case'
5
4
  require 'rubygems/commands/setup_command'
6
5
 
7
6
  class TestGemCommandsSetupCommand < Gem::TestCase
8
-
9
7
  bundler_gemspec = File.expand_path("../../../bundler/lib/bundler/version.rb", __FILE__)
10
8
  if File.exist?(bundler_gemspec)
11
9
  BUNDLER_VERS = File.read(bundler_gemspec).match(/VERSION = "(#{Gem::Version::VERSION_PATTERN})"/)[1]
12
10
  else
13
- BUNDLER_VERS = "1.16.2".freeze
11
+ BUNDLER_VERS = "2.0.1".freeze
14
12
  end
15
13
 
16
14
  def setup
@@ -20,62 +18,48 @@ class TestGemCommandsSetupCommand < Gem::TestCase
20
18
  @cmd = Gem::Commands::SetupCommand.new
21
19
  @cmd.options[:prefix] = @install_dir
22
20
 
23
- FileUtils.mkdir_p 'bin'
24
- FileUtils.mkdir_p 'lib/rubygems/ssl_certs/rubygems.org'
25
-
26
- File.open 'bin/gem', 'w' do |io| io.puts '# gem' end
27
- File.open 'lib/rubygems.rb', 'w' do |io| io.puts '# rubygems.rb' end
28
- File.open 'lib/rubygems/test_case.rb', 'w' do |io| io.puts '# test_case.rb' end
29
- File.open 'lib/rubygems/ssl_certs/rubygems.org/foo.pem', 'w' do |io| io.puts 'PEM' end
30
-
31
- FileUtils.mkdir_p 'bundler/exe'
32
- FileUtils.mkdir_p 'bundler/lib/bundler'
33
-
34
- File.open 'bundler/exe/bundle', 'w' do |io| io.puts '# bundle' end
35
- File.open 'bundler/lib/bundler.rb', 'w' do |io| io.puts '# bundler.rb' end
36
- File.open 'bundler/lib/bundler/b.rb', 'w' do |io| io.puts '# b.rb' end
37
-
38
- FileUtils.mkdir_p 'default/gems'
21
+ filelist = %w[
22
+ bin/gem
23
+ lib/rubygems.rb
24
+ lib/rubygems/test_case.rb
25
+ lib/rubygems/ssl_certs/rubygems.org/foo.pem
26
+ bundler/exe/bundle
27
+ bundler/exe/bundler
28
+ bundler/lib/bundler.rb
29
+ bundler/lib/bundler/b.rb
30
+ bundler/bin/bundler/man/bundle-b.1
31
+ bundler/lib/bundler/man/bundle-b.1.ronn
32
+ bundler/lib/bundler/man/gemfile.5
33
+ bundler/lib/bundler/man/gemfile.5.ronn
34
+ bundler/lib/bundler/templates/.circleci/config.yml
35
+ bundler/lib/bundler/templates/.travis.yml
36
+ ]
37
+
38
+ create_dummy_files(filelist)
39
39
 
40
40
  gemspec = Gem::Specification.new
41
+ gemspec.author = "Us"
41
42
  gemspec.name = "bundler"
42
43
  gemspec.version = BUNDLER_VERS
43
44
  gemspec.bindir = "exe"
44
- gemspec.executables = ["bundle"]
45
+ gemspec.executables = ["bundle", "bundler"]
45
46
 
46
- File.open 'bundler/bundler.gemspec', 'w' do |io|
47
+ File.open 'bundler/bundler.gemspec', 'w' do |io|
47
48
  io.puts gemspec.to_ruby
48
49
  end
49
50
 
50
- open(File.join(Gem::Specification.default_specifications_dir, "bundler-1.15.4.gemspec"), 'w') do |io|
51
+ open(File.join(Gem.default_specifications_dir, "bundler-1.15.4.gemspec"), 'w') do |io|
51
52
  gemspec.version = "1.15.4"
52
53
  io.puts gemspec.to_ruby
53
54
  end
54
55
 
55
- FileUtils.mkdir_p File.join(Gem.default_dir, "specifications")
56
+ spec_fetcher do |fetcher|
57
+ fetcher.download "bundler", "1.15.4"
56
58
 
57
- open(File.join(Gem.default_dir, "specifications", "bundler-#{BUNDLER_VERS}.gemspec"), 'w') do |io|
58
- io.puts "# bundler-#{BUNDLER_VERS}"
59
- end
59
+ fetcher.gem "bundler", BUNDLER_VERS
60
60
 
61
- open(File.join(Gem.default_dir, "specifications", "bundler-audit-1.0.0.gemspec"), 'w') do |io|
62
- io.puts '# bundler-audit'
61
+ fetcher.gem "bundler-audit", "1.0.0"
63
62
  end
64
-
65
- FileUtils.mkdir_p 'default/gems/bundler-1.15.4'
66
- FileUtils.mkdir_p 'default/gems/bundler-audit-1.0.0'
67
- end
68
-
69
- def gem_install(name)
70
- gem = util_spec name do |s|
71
- s.executables = [name]
72
- s.files = %W[bin/#{name}]
73
- end
74
- write_file File.join @tempdir, 'bin', name do |f|
75
- f.puts '#!/usr/bin/ruby'
76
- end
77
- install_gem gem
78
- File.join @gemhome, 'bin', name
79
63
  end
80
64
 
81
65
  def test_execute_regenerate_binstubs
@@ -103,48 +87,80 @@ class TestGemCommandsSetupCommand < Gem::TestCase
103
87
  assert_equal "I changed it!\n", File.read(gem_bin_path)
104
88
  end
105
89
 
106
- def test_env_shebang_flag
107
- gem_bin_path = gem_install 'a'
108
- write_file gem_bin_path do |io|
90
+ def test_execute_regenerate_plugins
91
+ gem_plugin_path = gem_install_with_plugin 'a'
92
+ write_file gem_plugin_path do |io|
109
93
  io.puts 'I changed it!'
110
94
  end
111
95
 
112
96
  @cmd.options[:document] = []
113
- @cmd.options[:env_shebang] = true
114
97
  @cmd.execute
115
98
 
116
- gem_exec = sprintf Gem.default_exec_format, 'gem'
117
- default_gem_bin_path = File.join @install_dir, 'bin', gem_exec
118
- if Gem::USE_BUNDLER_FOR_GEMDEPS
119
- bundle_exec = sprintf Gem.default_exec_format, 'bundle'
120
- default_bundle_bin_path = File.join @install_dir, 'bin', bundle_exec
99
+ assert_match %r{\Arequire}, File.read(gem_plugin_path)
100
+ end
101
+
102
+ def test_execute_no_regenerate_plugins
103
+ gem_plugin_path = gem_install_with_plugin 'a'
104
+ write_file gem_plugin_path do |io|
105
+ io.puts 'I changed it!'
121
106
  end
122
107
 
123
- ruby_exec = sprintf Gem.default_exec_format, 'ruby'
108
+ @cmd.options[:document] = []
109
+ @cmd.options[:regenerate_plugins] = false
110
+ @cmd.execute
124
111
 
125
- if Gem.win_platform?
126
- assert_match %r%\A#!\s*#{ruby_exec}%, File.read(default_gem_bin_path)
127
- if Gem::USE_BUNDLER_FOR_GEMDEPS
128
- assert_match %r%\A#!\s*#{ruby_exec}%, File.read(default_bundle_bin_path)
129
- end
130
- assert_match %r%\A#!\s*#{ruby_exec}%, File.read(gem_bin_path)
131
- else
132
- assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(default_gem_bin_path)
133
- if Gem::USE_BUNDLER_FOR_GEMDEPS
134
- assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(default_bundle_bin_path)
135
- end
136
- assert_match %r%\A#!/usr/bin/env #{ruby_exec}%, File.read(gem_bin_path)
112
+ assert_equal "I changed it!\n", File.read(gem_plugin_path)
113
+ end
114
+
115
+ def test_execute_regenerate_plugins_creates_plugins_dir_if_not_there
116
+ gem_plugin_path = gem_install_with_plugin 'a'
117
+
118
+ # Simulate gem installed with an older rubygems without a plugins layout
119
+ FileUtils.rm_rf Gem.plugindir
120
+
121
+ @cmd.options[:document] = []
122
+ @cmd.execute
123
+
124
+ assert_match %r{\Arequire}, File.read(gem_plugin_path)
125
+ end
126
+
127
+ def test_execute_informs_about_installed_executables
128
+ @cmd.options[:document] = []
129
+
130
+ use_ui @ui do
131
+ @cmd.execute
137
132
  end
133
+
134
+ out = @ui.output.split "\n"
135
+
136
+ exec_line = out.shift until exec_line == "RubyGems installed the following executables:"
137
+ assert_equal "\t#{default_gem_bin_path}", out.shift
138
+ assert_equal "\t#{default_bundle_bin_path}", out.shift
139
+ assert_equal "\t#{default_bundler_bin_path}", out.shift
138
140
  end
139
141
 
140
- def test_pem_files_in
141
- assert_equal %w[rubygems/ssl_certs/rubygems.org/foo.pem],
142
- @cmd.pem_files_in('lib').sort
142
+ def test_env_shebang_flag
143
+ gem_bin_path = gem_install 'a'
144
+ write_file gem_bin_path do |io|
145
+ io.puts 'I changed it!'
146
+ end
147
+
148
+ @cmd.options[:document] = []
149
+ @cmd.options[:env_shebang] = true
150
+ @cmd.execute
151
+
152
+ ruby_exec = sprintf Gem.default_exec_format, 'ruby'
153
+
154
+ bin_env = win_platform? ? "" : %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) } + " "
155
+ assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_gem_bin_path)
156
+ assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_bundle_bin_path)
157
+ assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(default_bundler_bin_path)
158
+ assert_match %r{\A#!\s*#{bin_env}#{ruby_exec}}, File.read(gem_bin_path)
143
159
  end
144
160
 
145
- def test_rb_files_in
146
- assert_equal %w[rubygems.rb rubygems/test_case.rb],
147
- @cmd.rb_files_in('lib').sort
161
+ def test_files_in
162
+ assert_equal %w[rubygems.rb rubygems/ssl_certs/rubygems.org/foo.pem rubygems/test_case.rb],
163
+ @cmd.files_in('lib').sort
148
164
  end
149
165
 
150
166
  def test_install_lib
@@ -156,88 +172,132 @@ class TestGemCommandsSetupCommand < Gem::TestCase
156
172
  assert_path_exists File.join(dir, 'rubygems.rb')
157
173
  assert_path_exists File.join(dir, 'rubygems/ssl_certs/rubygems.org/foo.pem')
158
174
 
159
- if Gem::USE_BUNDLER_FOR_GEMDEPS
160
- assert_path_exists File.join(dir, 'bundler.rb')
161
- assert_path_exists File.join(dir, 'bundler/b.rb')
162
- end
175
+ assert_path_exists File.join(dir, 'bundler.rb')
176
+ assert_path_exists File.join(dir, 'bundler/b.rb')
177
+
178
+ assert_path_exists File.join(dir, 'bundler/templates/.circleci/config.yml') unless RUBY_ENGINE == "truffleruby" # https://github.com/oracle/truffleruby/issues/2116
179
+ assert_path_exists File.join(dir, 'bundler/templates/.travis.yml')
163
180
  end
164
181
  end
165
182
 
166
183
  def test_install_default_bundler_gem
167
184
  @cmd.extend FileUtils
168
185
 
169
- @cmd.install_default_bundler_gem
186
+ bin_dir = File.join(@gemhome, 'bin')
187
+ @cmd.install_default_bundler_gem bin_dir
170
188
 
171
- if Gem.win_platform?
172
- bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
173
- default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
174
- spec = Gem::Specification.load(default_spec_path)
189
+ bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
190
+ default_spec_path = File.join(Gem.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
191
+ spec = Gem::Specification.load(default_spec_path)
175
192
 
176
- spec.executables.each do |e|
177
- assert_path_exists File.join(spec.bin_dir, "#{e}.bat")
193
+ spec.executables.each do |e|
194
+ if Gem.win_platform?
195
+ assert_path_exists File.join(bin_dir, "#{e}.bat")
178
196
  end
197
+
198
+ assert_path_exists File.join bin_dir, e
179
199
  end
180
200
 
181
- default_dir = Gem::Specification.default_specifications_dir
201
+ default_dir = Gem.default_specifications_dir
182
202
 
183
203
  # expect to remove other versions of bundler gemspecs on default specification directory.
184
204
  refute_path_exists File.join(default_dir, "bundler-1.15.4.gemspec")
185
205
  assert_path_exists File.join(default_dir, "bundler-#{BUNDLER_VERS}.gemspec")
186
206
 
187
207
  # expect to not remove bundler-* gemspecs.
188
- assert_path_exists File.join(Gem.default_dir, "specifications", "bundler-audit-1.0.0.gemspec")
208
+ assert_path_exists File.join(Gem.dir, "specifications", "bundler-audit-1.0.0.gemspec")
189
209
 
190
210
  # expect to remove normal gem that was same version. because it's promoted default gems.
191
- refute_path_exists File.join(Gem.default_dir, "specifications", "bundler-#{BUNDLER_VERS}.gemspec")
211
+ refute_path_exists File.join(Gem.dir, "specifications", "bundler-#{BUNDLER_VERS}.gemspec")
212
+
213
+ assert_path_exists "#{Gem.dir}/gems/bundler-#{BUNDLER_VERS}"
214
+ assert_path_exists "#{Gem.dir}/gems/bundler-1.15.4"
215
+ assert_path_exists "#{Gem.dir}/gems/bundler-audit-1.0.0"
216
+ end
192
217
 
193
- # expect to install default gems. It location was `site_ruby` directory on real world.
194
- assert_path_exists "default/gems/bundler-#{BUNDLER_VERS}"
218
+ def test_install_default_bundler_gem_with_force_flag
219
+ @cmd.extend FileUtils
220
+
221
+ bin_dir = File.join(@gemhome, 'bin')
222
+ bundle_bin = File.join(bin_dir, 'bundle')
195
223
 
196
- # expect to not remove other versions of bundler on `site_ruby`
197
- assert_path_exists 'default/gems/bundler-1.15.4'
224
+ write_file bundle_bin do |f|
225
+ f.puts '#!/usr/bin/ruby'
226
+ f.puts ''
227
+ f.puts 'echo "hello"'
228
+ end
198
229
 
199
- # TODO: We need to assert to remove same version of bundler on gem_dir directory(It's not site_ruby dir)
230
+ bindir(bin_dir) do
231
+ @cmd.options[:force] = true
200
232
 
201
- # expect to not remove bundler-* direcotyr.
202
- assert_path_exists 'default/gems/bundler-audit-1.0.0'
203
- end if Gem::USE_BUNDLER_FOR_GEMDEPS
233
+ @cmd.install_default_bundler_gem bin_dir
234
+
235
+ bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
236
+ default_spec_path = File.join(Gem.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
237
+ spec = Gem::Specification.load(default_spec_path)
238
+
239
+ spec.executables.each do |e|
240
+ if Gem.win_platform?
241
+ assert_path_exists File.join(bin_dir, "#{e}.bat")
242
+ end
243
+
244
+ assert_path_exists File.join bin_dir, e
245
+ end
246
+ end
247
+ end
204
248
 
205
249
  def test_remove_old_lib_files
206
250
  lib = File.join @install_dir, 'lib'
207
251
  lib_rubygems = File.join lib, 'rubygems'
208
252
  lib_bundler = File.join lib, 'bundler'
209
253
  lib_rubygems_defaults = File.join lib_rubygems, 'defaults'
254
+ lib_bundler_templates = File.join lib_bundler, 'templates'
210
255
 
211
- securerandom_rb = File.join lib, 'securerandom.rb'
256
+ securerandom_rb = File.join lib, 'securerandom.rb'
212
257
 
213
258
  engine_defaults_rb = File.join lib_rubygems_defaults, 'jruby.rb'
214
259
  os_defaults_rb = File.join lib_rubygems_defaults, 'operating_system.rb'
215
260
 
261
+ old_gauntlet_rubygems_rb = File.join lib, 'gauntlet_rubygems.rb'
262
+
216
263
  old_builder_rb = File.join lib_rubygems, 'builder.rb'
217
264
  old_format_rb = File.join lib_rubygems, 'format.rb'
218
265
  old_bundler_c_rb = File.join lib_bundler, 'c.rb'
266
+ old_bundler_ci = File.join lib_bundler_templates, '.lecacy_ci', 'config.yml'
267
+
268
+ files_that_go = [old_gauntlet_rubygems_rb, old_builder_rb, old_format_rb, old_bundler_c_rb, old_bundler_ci]
269
+ files_that_stay = [securerandom_rb, engine_defaults_rb, os_defaults_rb]
219
270
 
220
- FileUtils.mkdir_p lib_rubygems_defaults
221
- FileUtils.mkdir_p lib_bundler
271
+ create_dummy_files(files_that_go + files_that_stay)
222
272
 
223
- File.open securerandom_rb, 'w' do |io| io.puts '# securerandom.rb' end
273
+ @cmd.remove_old_lib_files lib
274
+
275
+ files_that_go.each {|file| refute_path_exists(file) unless file == old_bundler_ci && RUBY_ENGINE == "truffleruby" } # https://github.com/oracle/truffleruby/issues/2116
224
276
 
225
- File.open old_builder_rb, 'w' do |io| io.puts '# builder.rb' end
226
- File.open old_format_rb, 'w' do |io| io.puts '# format.rb' end
227
- File.open old_bundler_c_rb, 'w' do |io| io.puts '# c.rb' end
277
+ files_that_stay.each {|file| assert_path_exists file }
278
+ end
228
279
 
229
- File.open engine_defaults_rb, 'w' do |io| io.puts '# jruby.rb' end
230
- File.open os_defaults_rb, 'w' do |io| io.puts '# operating_system.rb' end
280
+ def test_remove_old_man_files
281
+ man = File.join @install_dir, 'man'
231
282
 
232
- @cmd.remove_old_lib_files lib
283
+ ruby_1 = File.join man, 'man1', 'ruby.1'
284
+ bundle_b_1 = File.join man, 'man1', 'bundle-b.1'
285
+ bundle_b_1_ronn = File.join man, 'man1', 'bundle-b.1.ronn'
286
+ bundle_b_1_txt = File.join man, 'man1', 'bundle-b.1.txt'
287
+ gemfile_5 = File.join man, 'man5', 'gemfile.5'
288
+ gemfile_5_ronn = File.join man, 'man5', 'gemfile.5.ronn'
289
+ gemfile_5_txt = File.join man, 'man5', 'gemfile.5.txt'
233
290
 
234
- refute_path_exists old_builder_rb
235
- refute_path_exists old_format_rb
236
- refute_path_exists old_bundler_c_rb if Gem::USE_BUNDLER_FOR_GEMDEPS
291
+ files_that_go = [bundle_b_1, bundle_b_1_txt, bundle_b_1_ronn, gemfile_5, gemfile_5_txt, gemfile_5_ronn]
292
+ files_that_stay = [ruby_1]
237
293
 
238
- assert_path_exists securerandom_rb
239
- assert_path_exists engine_defaults_rb
240
- assert_path_exists os_defaults_rb
294
+ create_dummy_files(files_that_go + files_that_stay)
295
+
296
+ @cmd.remove_old_man_files man
297
+
298
+ files_that_go.each {|file| refute_path_exists file }
299
+
300
+ files_that_stay.each {|file| assert_path_exists file }
241
301
  end
242
302
 
243
303
  def test_show_release_notes
@@ -246,26 +306,24 @@ class TestGemCommandsSetupCommand < Gem::TestCase
246
306
 
247
307
  @cmd.options[:previous_version] = Gem::Version.new '2.0.2'
248
308
 
249
- File.open 'History.txt', 'w' do |io|
250
- io.puts <<-History_txt
251
- # coding: UTF-8
252
-
253
- === #{Gem::VERSION} / 2013-03-26
309
+ File.open 'CHANGELOG.md', 'w' do |io|
310
+ io.puts <<-HISTORY_TXT
311
+ # #{Gem::VERSION} / 2013-03-26
254
312
 
255
- * Bug fixes:
313
+ ## Bug fixes:
256
314
  * Fixed release note display for LANG=C when installing rubygems
257
315
  * π is tasty
258
316
 
259
- === 2.0.2 / 2013-03-06
317
+ # 2.0.2 / 2013-03-06
260
318
 
261
- * Bug fixes:
319
+ ## Bug fixes:
262
320
  * Other bugs fixed
263
321
 
264
- === 2.0.1 / 2013-03-05
322
+ # 2.0.1 / 2013-03-05
265
323
 
266
- * Bug fixes:
324
+ ## Bug fixes:
267
325
  * Yet more bugs fixed
268
- History_txt
326
+ HISTORY_TXT
269
327
  end
270
328
 
271
329
  use_ui @ui do
@@ -273,17 +331,12 @@ class TestGemCommandsSetupCommand < Gem::TestCase
273
331
  end
274
332
 
275
333
  expected = <<-EXPECTED
276
- === #{Gem::VERSION} / 2013-03-26
334
+ # #{Gem::VERSION} / 2013-03-26
277
335
 
278
- * Bug fixes:
336
+ ## Bug fixes:
279
337
  * Fixed release note display for LANG=C when installing rubygems
280
338
  * π is tasty
281
339
 
282
- === 2.0.2 / 2013-03-06
283
-
284
- * Bug fixes:
285
- * Other bugs fixed
286
-
287
340
  EXPECTED
288
341
 
289
342
  output = @ui.output
@@ -294,4 +347,51 @@ class TestGemCommandsSetupCommand < Gem::TestCase
294
347
  @ui.outs.set_encoding @default_external if @default_external
295
348
  end
296
349
 
297
- end
350
+ private
351
+
352
+ def create_dummy_files(list)
353
+ list.each do |file|
354
+ FileUtils.mkdir_p File.dirname(file)
355
+
356
+ File.open file, 'w' do |io|
357
+ io.puts "# #{File.basename(file)}"
358
+ end
359
+ end
360
+ end
361
+
362
+ def gem_install(name)
363
+ gem = util_spec name do |s|
364
+ s.executables = [name]
365
+ s.files = %W[bin/#{name}]
366
+ end
367
+ write_file File.join @tempdir, 'bin', name do |f|
368
+ f.puts '#!/usr/bin/ruby'
369
+ end
370
+ install_gem gem
371
+ File.join @gemhome, 'bin', name
372
+ end
373
+
374
+ def gem_install_with_plugin(name)
375
+ gem = util_spec name do |s|
376
+ s.files = %W[lib/rubygems_plugin.rb]
377
+ end
378
+ write_file File.join @tempdir, 'lib', 'rubygems_plugin.rb' do |f|
379
+ f.puts "require '#{gem.plugins.first}'"
380
+ end
381
+ install_gem gem
382
+
383
+ File.join Gem.plugindir, "#{name}_plugin.rb"
384
+ end
385
+
386
+ def default_gem_bin_path
387
+ File.join @install_dir, 'bin', 'gem'
388
+ end
389
+
390
+ def default_bundle_bin_path
391
+ File.join @install_dir, 'bin', 'bundle'
392
+ end
393
+
394
+ def default_bundler_bin_path
395
+ File.join @install_dir, 'bin', 'bundler'
396
+ end
397
+ end unless Gem.java_platform?