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
@@ -100,11 +100,11 @@ class Gem::DependencyList
100
100
  end
101
101
 
102
102
  def find_name(full_name)
103
- @specs.find { |spec| spec.full_name == full_name }
103
+ @specs.find {|spec| spec.full_name == full_name }
104
104
  end
105
105
 
106
106
  def inspect # :nodoc:
107
- "%s %p>" % [super[0..-2], map { |s| s.full_name }]
107
+ "%s %p>" % [super[0..-2], map {|s| s.full_name }]
108
108
  end
109
109
 
110
110
  ##
@@ -115,15 +115,15 @@ class Gem::DependencyList
115
115
  end
116
116
 
117
117
  def why_not_ok?(quick = false)
118
- unsatisfied = Hash.new { |h,k| h[k] = [] }
118
+ unsatisfied = Hash.new {|h,k| h[k] = [] }
119
119
  each do |spec|
120
120
  spec.runtime_dependencies.each do |dep|
121
- inst = Gem::Specification.any? { |installed_spec|
121
+ inst = Gem::Specification.any? do |installed_spec|
122
122
  dep.name == installed_spec.name and
123
123
  dep.requirement.satisfied_by? installed_spec.version
124
- }
124
+ end
125
125
 
126
- unless inst or @specs.find { |s| s.satisfies_requirement? dep }
126
+ unless inst or @specs.find {|s| s.satisfies_requirement? dep }
127
127
  unsatisfied[spec.name] << dep
128
128
  return unsatisfied if quick
129
129
  end
@@ -145,10 +145,10 @@ class Gem::DependencyList
145
145
  # If the state is inconsistent, at least don't crash
146
146
  return true unless gem_to_remove
147
147
 
148
- siblings = @specs.find_all { |s|
148
+ siblings = @specs.find_all do |s|
149
149
  s.name == gem_to_remove.name &&
150
150
  s.full_name != gem_to_remove.full_name
151
- }
151
+ end
152
152
 
153
153
  deps = []
154
154
 
@@ -160,11 +160,11 @@ class Gem::DependencyList
160
160
  end
161
161
  end
162
162
 
163
- deps.all? { |dep|
164
- siblings.any? { |s|
163
+ deps.all? do |dep|
164
+ siblings.any? do |s|
165
165
  s.satisfies_requirement? dep
166
- }
167
- }
166
+ end
167
+ end
168
168
  end
169
169
 
170
170
  ##
@@ -173,17 +173,17 @@ class Gem::DependencyList
173
173
  # dependencies).
174
174
 
175
175
  def remove_specs_unsatisfied_by(dependencies)
176
- specs.reject! { |spec|
176
+ specs.reject! do |spec|
177
177
  dep = dependencies[spec.name]
178
178
  dep and not dep.requirement.satisfied_by? spec.version
179
- }
179
+ end
180
180
  end
181
181
 
182
182
  ##
183
183
  # Removes the gemspec matching +full_name+ from the dependency list
184
184
 
185
185
  def remove_by_name(full_name)
186
- @specs.delete_if { |spec| spec.full_name == full_name }
186
+ @specs.delete_if {|spec| spec.full_name == full_name }
187
187
  end
188
188
 
189
189
  ##
@@ -191,7 +191,7 @@ class Gem::DependencyList
191
191
  # gemspecs that have a dependency satisfied by the named gemspec.
192
192
 
193
193
  def spec_predecessors
194
- result = Hash.new { |h,k| h[k] = [] }
194
+ result = Hash.new {|h,k| h[k] = [] }
195
195
 
196
196
  specs = @specs.sort.reverse
197
197
 
@@ -237,7 +237,6 @@ class Gem::DependencyList
237
237
  # +ignored+.
238
238
 
239
239
  def active_count(specs, ignored)
240
- specs.count { |spec| ignored[spec.full_name].nil? }
240
+ specs.count {|spec| ignored[spec.full_name].nil? }
241
241
  end
242
-
243
242
  end
@@ -41,6 +41,10 @@ module Gem::Deprecate
41
41
  Gem::Deprecate.skip = original
42
42
  end
43
43
 
44
+ def self.next_rubygems_major_version # :nodoc:
45
+ Gem::Version.new(Gem.rubygems_version.segments.first).bump
46
+ end
47
+
44
48
  ##
45
49
  # Simple deprecation method that deprecates +name+ by wrapping it up
46
50
  # in a dummy method. It warns on each call to the dummy method
@@ -48,23 +52,64 @@ module Gem::Deprecate
48
52
  # year/month that it is planned to go away.
49
53
 
50
54
  def deprecate(name, repl, year, month)
51
- class_eval {
55
+ class_eval do
56
+ old = "_deprecated_#{name}"
57
+ alias_method old, name
58
+ define_method name do |*args, &block|
59
+ klass = self.kind_of? Module
60
+ target = klass ? "#{self}." : "#{self.class}#"
61
+ msg = [ "NOTE: #{target}#{name} is deprecated",
62
+ repl == :none ? " with no replacement" : "; use #{repl} instead",
63
+ ". It will be removed on or after %4d-%02d-01." % [year, month],
64
+ "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
65
+ ]
66
+ warn "#{msg.join}." unless Gem::Deprecate.skip
67
+ send old, *args, &block
68
+ end
69
+ end
70
+ end
71
+
72
+ ##
73
+ # Simple deprecation method that deprecates +name+ by wrapping it up
74
+ # in a dummy method. It warns on each call to the dummy method
75
+ # telling the user of +repl+ (unless +repl+ is :none) and the
76
+ # Rubygems version that it is planned to go away.
77
+
78
+ def rubygems_deprecate(name, replacement=:none)
79
+ class_eval do
52
80
  old = "_deprecated_#{name}"
53
81
  alias_method old, name
54
82
  define_method name do |*args, &block|
55
83
  klass = self.kind_of? Module
56
84
  target = klass ? "#{self}." : "#{self.class}#"
57
85
  msg = [ "NOTE: #{target}#{name} is deprecated",
58
- repl == :none ? " with no replacement" : "; use #{repl} instead",
59
- ". It will be removed on or after %4d-%02d-01." % [year, month],
60
- "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
86
+ replacement == :none ? " with no replacement" : "; use #{replacement} instead",
87
+ ". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}",
88
+ "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
61
89
  ]
62
90
  warn "#{msg.join}." unless Gem::Deprecate.skip
63
91
  send old, *args, &block
64
92
  end
65
- }
93
+ end
94
+ end
95
+
96
+ # Deprecation method to deprecate Rubygems commands
97
+ def rubygems_deprecate_command
98
+ class_eval do
99
+ define_method "deprecated?" do
100
+ true
101
+ end
102
+
103
+ define_method "deprecation_warning" do
104
+ msg = [ "#{self.command} command is deprecated",
105
+ ". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}.\n",
106
+ ]
107
+
108
+ alert_warning "#{msg.join}" unless Gem::Deprecate.skip
109
+ end
110
+ end
66
111
  end
67
112
 
68
- module_function :deprecate, :skip_during
113
+ module_function :rubygems_deprecate, :rubygems_deprecate_command, :skip_during
69
114
 
70
115
  end
@@ -12,7 +12,6 @@ require 'rubygems/user_interaction'
12
12
  # removing the bogus specification.
13
13
 
14
14
  class Gem::Doctor
15
-
16
15
  include Gem::UserInteraction
17
16
 
18
17
  ##
@@ -26,11 +25,12 @@ class Gem::Doctor
26
25
  ['doc', ''],
27
26
  ['extensions', ''],
28
27
  ['gems', ''],
28
+ ['plugins', ''],
29
29
  ].freeze
30
30
 
31
31
  missing =
32
32
  Gem::REPOSITORY_SUBDIRECTORIES.sort -
33
- REPOSITORY_EXTENSION_MAP.map { |(k,_)| k }.sort
33
+ REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort
34
34
 
35
35
  raise "Update REPOSITORY_EXTENSION_MAP, missing: #{missing.join ', '}" unless
36
36
  missing.empty?
@@ -52,7 +52,7 @@ class Gem::Doctor
52
52
  # Specs installed in this gem repository
53
53
 
54
54
  def installed_specs # :nodoc:
55
- @installed_specs ||= Gem::Specification.map { |s| s.full_name }
55
+ @installed_specs ||= Gem::Specification.map {|s| s.full_name }
56
56
  end
57
57
 
58
58
  ##
@@ -112,6 +112,7 @@ class Gem::Doctor
112
112
  next if installed_specs.include? basename
113
113
  next if /^rubygems-\d/ =~ basename
114
114
  next if 'specifications' == sub_directory and 'default' == basename
115
+ next if 'plugins' == sub_directory and Gem.plugin_suffix_regexp =~ basename
115
116
 
116
117
  type = File.directory?(child) ? 'directory' : 'file'
117
118
 
@@ -127,5 +128,4 @@ class Gem::Doctor
127
128
  rescue Errno::ENOENT
128
129
  # ignore
129
130
  end
130
-
131
131
  end
@@ -25,14 +25,15 @@ module Gem
25
25
  # system. Instead of rescuing from this class, make sure to rescue from the
26
26
  # superclass Gem::LoadError to catch all types of load errors.
27
27
  class MissingSpecError < Gem::LoadError
28
- def initialize(name, requirement)
28
+ def initialize(name, requirement, extra_message=nil)
29
29
  @name = name
30
30
  @requirement = requirement
31
+ @extra_message = extra_message
31
32
  end
32
33
 
33
34
  def message # :nodoc:
34
35
  build_message +
35
- "Checked in 'GEM_PATH=#{Gem.path.join(File::PATH_SEPARATOR)}', execute `gem env` for more information"
36
+ "Checked in 'GEM_PATH=#{Gem.path.join(File::PATH_SEPARATOR)}' #{@extra_message}, execute `gem env` for more information"
36
37
  end
37
38
 
38
39
  private
@@ -69,7 +70,6 @@ module Gem
69
70
  # Raised when there are conflicting gem specs loaded
70
71
 
71
72
  class ConflictError < LoadError
72
-
73
73
  ##
74
74
  # A Hash mapping conflicting specifications to the dependencies that
75
75
  # caused the conflict
@@ -86,9 +86,9 @@ module Gem
86
86
  @conflicts = conflicts
87
87
  @name = target.name
88
88
 
89
- reason = conflicts.map { |act, dependencies|
89
+ reason = conflicts.map do |act, dependencies|
90
90
  "#{act.full_name} conflicts with #{dependencies.join(", ")}"
91
- }.join ", "
91
+ end.join ", "
92
92
 
93
93
  # TODO: improve message by saying who activated `con`
94
94
 
@@ -105,7 +105,6 @@ module Gem
105
105
  # in figuring out why a gem couldn't be installed.
106
106
  #
107
107
  class PlatformMismatch < ErrorReason
108
-
109
108
  ##
110
109
  # the name of the gem
111
110
  attr_reader :name
@@ -150,7 +149,6 @@ module Gem
150
149
  # data from a source
151
150
 
152
151
  class SourceFetchProblem < ErrorReason
153
-
154
152
  ##
155
153
  # Creates a new SourceFetchProblem for the given +source+ and +error+.
156
154
 
@@ -5,17 +5,7 @@ require 'rubygems/deprecate'
5
5
  ##
6
6
  # Base exception class for RubyGems. All exception raised by RubyGems are a
7
7
  # subclass of this one.
8
- class Gem::Exception < RuntimeError
9
-
10
- ##
11
- #--
12
- # TODO: remove in RubyGems 4, nobody sets this
13
-
14
- attr_accessor :source_exception # :nodoc:
15
-
16
- extend Gem::Deprecate
17
- deprecate :source_exception, :none, 2018, 12
18
- end
8
+ class Gem::Exception < RuntimeError; end
19
9
 
20
10
  class Gem::CommandLineError < Gem::Exception; end
21
11
 
@@ -29,7 +19,6 @@ class Gem::DependencyRemovalException < Gem::Exception; end
29
19
  # and #conflicting_dependencies
30
20
 
31
21
  class Gem::DependencyResolutionError < Gem::DependencyError
32
-
33
22
  attr_reader :conflict
34
23
 
35
24
  def initialize(conflict)
@@ -42,7 +31,6 @@ class Gem::DependencyResolutionError < Gem::DependencyError
42
31
  def conflicting_dependencies
43
32
  @conflict.conflicting_dependencies
44
33
  end
45
-
46
34
  end
47
35
 
48
36
  ##
@@ -70,7 +58,6 @@ class Gem::EndOfYAMLException < Gem::Exception; end
70
58
  # operating on the given directory.
71
59
 
72
60
  class Gem::FilePermissionError < Gem::Exception
73
-
74
61
  attr_reader :directory
75
62
 
76
63
  def initialize(directory)
@@ -78,7 +65,6 @@ class Gem::FilePermissionError < Gem::Exception
78
65
 
79
66
  super "You don't have write permissions for the #{directory} directory."
80
67
  end
81
-
82
68
  end
83
69
 
84
70
  ##
@@ -93,7 +79,6 @@ class Gem::GemNotFoundException < Gem::Exception; end
93
79
  # Raised by the DependencyInstaller when a specific gem cannot be found
94
80
 
95
81
  class Gem::SpecificGemNotFoundException < Gem::GemNotFoundException
96
-
97
82
  ##
98
83
  # Creates a new SpecificGemNotFoundException for a gem with the given +name+
99
84
  # and +version+. Any +errors+ encountered when attempting to find the gem
@@ -121,7 +106,6 @@ class Gem::SpecificGemNotFoundException < Gem::GemNotFoundException
121
106
  # Errors encountered attempting to find the gem.
122
107
 
123
108
  attr_reader :errors
124
-
125
109
  end
126
110
 
127
111
  ##
@@ -129,7 +113,6 @@ end
129
113
  # inability to find a valid possible spec for a request.
130
114
 
131
115
  class Gem::ImpossibleDependenciesError < Gem::Exception
132
-
133
116
  attr_reader :conflicts
134
117
  attr_reader :request
135
118
 
@@ -157,7 +140,6 @@ class Gem::ImpossibleDependenciesError < Gem::Exception
157
140
  def dependency
158
141
  @request.dependency
159
142
  end
160
-
161
143
  end
162
144
 
163
145
  class Gem::InstallError < Gem::Exception; end
@@ -207,7 +189,6 @@ class Gem::VerificationError < Gem::Exception; end
207
189
  # exit_code
208
190
 
209
191
  class Gem::SystemExitException < SystemExit
210
-
211
192
  ##
212
193
  # The exit code for the process
213
194
 
@@ -221,7 +202,6 @@ class Gem::SystemExitException < SystemExit
221
202
 
222
203
  super "Exiting RubyGems with exit_code #{exit_code}"
223
204
  end
224
-
225
205
  end
226
206
 
227
207
  ##
@@ -229,7 +209,6 @@ end
229
209
  # there is no spec.
230
210
 
231
211
  class Gem::UnsatisfiableDependencyError < Gem::DependencyError
232
-
233
212
  ##
234
213
  # The unsatisfiable dependency. This is a
235
214
  # Gem::Resolver::DependencyRequest, not a Gem::Dependency
@@ -247,7 +226,7 @@ class Gem::UnsatisfiableDependencyError < Gem::DependencyError
247
226
 
248
227
  def initialize(dep, platform_mismatch=nil)
249
228
  if platform_mismatch and !platform_mismatch.empty?
250
- plats = platform_mismatch.map { |x| x.platform.to_s }.sort.uniq
229
+ plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
251
230
  super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
252
231
  else
253
232
  if dep.explicit?
@@ -274,7 +253,6 @@ class Gem::UnsatisfiableDependencyError < Gem::DependencyError
274
253
  def version
275
254
  @dependency.requirement
276
255
  end
277
-
278
256
  end
279
257
 
280
258
  ##
data/lib/rubygems/ext.rb CHANGED
@@ -10,9 +10,9 @@
10
10
 
11
11
  module Gem::Ext; end
12
12
 
13
- require 'rubygems/ext/build_error'
14
- require 'rubygems/ext/builder'
15
- require 'rubygems/ext/configure_builder'
16
- require 'rubygems/ext/ext_conf_builder'
17
- require 'rubygems/ext/rake_builder'
18
- require 'rubygems/ext/cmake_builder'
13
+ require_relative 'ext/build_error'
14
+ require_relative 'ext/builder'
15
+ require_relative 'ext/configure_builder'
16
+ require_relative 'ext/ext_conf_builder'
17
+ require_relative 'ext/rake_builder'
18
+ require_relative 'ext/cmake_builder'
@@ -2,5 +2,7 @@
2
2
  ##
3
3
  # Raised when there is an error while building extensions.
4
4
 
5
+ require_relative '../exceptions'
6
+
5
7
  class Gem::Ext::BuildError < Gem::InstallError
6
8
  end
@@ -5,20 +5,11 @@
5
5
  # See LICENSE.txt for permissions.
6
6
  #++
7
7
 
8
- require 'rubygems/user_interaction'
8
+ require_relative '../user_interaction'
9
9
 
10
10
  class Gem::Ext::Builder
11
-
12
11
  include Gem::UserInteraction
13
12
 
14
- ##
15
- # The builder shells-out to run various commands after changing the
16
- # directory. This means multiple installations cannot be allowed to build
17
- # extensions in parallel as they may change each other's directories leading
18
- # to broken extensions or failed installations.
19
-
20
- CHDIR_MUTEX = Mutex.new # :nodoc:
21
-
22
13
  attr_accessor :build_args # :nodoc:
23
14
 
24
15
  def self.class_name
@@ -26,8 +17,8 @@ class Gem::Ext::Builder
26
17
  $1.downcase
27
18
  end
28
19
 
29
- def self.make(dest_path, results)
30
- unless File.exist? 'Makefile'
20
+ def self.make(dest_path, results, make_dir = Dir.pwd)
21
+ unless File.exist? File.join(make_dir, 'Makefile')
31
22
  raise Gem::InstallError, 'Makefile not found'
32
23
  end
33
24
 
@@ -37,48 +28,45 @@ class Gem::Ext::Builder
37
28
  unless make_program
38
29
  make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
39
30
  end
31
+ make_program = Shellwords.split(make_program)
40
32
 
41
- destdir = '"DESTDIR=%s"' % ENV['DESTDIR']
33
+ destdir = 'DESTDIR=%s' % ENV['DESTDIR']
42
34
 
43
35
  ['clean', '', 'install'].each do |target|
44
36
  # Pass DESTDIR via command line to override what's in MAKEFLAGS
45
37
  cmd = [
46
- make_program,
38
+ *make_program,
47
39
  destdir,
48
- target
49
- ].join(' ').rstrip
40
+ target,
41
+ ].reject(&:empty?)
50
42
  begin
51
- run(cmd, results, "make #{target}".rstrip)
43
+ run(cmd, results, "make #{target}".rstrip, make_dir)
52
44
  rescue Gem::InstallError
53
45
  raise unless target == 'clean' # ignore clean failure
54
46
  end
55
47
  end
56
48
  end
57
49
 
58
- def self.redirector
59
- warn "#{caller[0]}: Use IO.popen(..., err: [:child, :out])"
60
- '2>&1'
61
- end
62
-
63
- def self.run(command, results, command_name = nil)
50
+ def self.run(command, results, command_name = nil, dir = Dir.pwd)
64
51
  verbose = Gem.configuration.really_verbose
65
52
 
66
53
  begin
67
54
  rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], nil
68
55
  if verbose
69
- puts("current directory: #{Dir.pwd}")
56
+ puts("current directory: #{dir}")
70
57
  p(command)
71
58
  end
72
- results << "current directory: #{Dir.pwd}"
73
- results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
74
-
75
- redirections = verbose ? {} : {err: [:child, :out]}
76
- IO.popen(command, "r", redirections) do |io|
77
- if verbose
78
- IO.copy_stream(io, $stdout)
79
- else
80
- results << io.read
81
- end
59
+ results << "current directory: #{dir}"
60
+ results << command.shelljoin
61
+
62
+ require "open3"
63
+ # Set $SOURCE_DATE_EPOCH for the subprocess.
64
+ env = {'SOURCE_DATE_EPOCH' => Gem.source_date_epoch_string}
65
+ output, status = Open3.capture2e(env, *command, :chdir => dir)
66
+ if verbose
67
+ puts output
68
+ else
69
+ results << output
82
70
  end
83
71
  rescue => error
84
72
  raise Gem::InstallError, "#{command_name || class_name} failed#{error.message}"
@@ -86,14 +74,18 @@ class Gem::Ext::Builder
86
74
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
87
75
  end
88
76
 
89
- unless $?.success?
77
+ unless status.success?
90
78
  results << "Building has failed. See above output for more information on the failure." if verbose
79
+ end
91
80
 
81
+ yield(status, results) if block_given?
82
+
83
+ unless status.success?
92
84
  exit_reason =
93
- if $?.exited?
94
- ", exit code #{$?.exitstatus}"
95
- elsif $?.signaled?
96
- ", uncaught signal #{$?.termsig}"
85
+ if status.exited?
86
+ ", exit code #{status.exitstatus}"
87
+ elsif status.signaled?
88
+ ", uncaught signal #{status.termsig}"
97
89
  end
98
90
 
99
91
  raise Gem::InstallError, "#{command_name || class_name} failed#{exit_reason}"
@@ -110,7 +102,7 @@ class Gem::Ext::Builder
110
102
  @build_args = build_args
111
103
  @gem_dir = spec.full_gem_path
112
104
 
113
- @ran_rake = nil
105
+ @ran_rake = false
114
106
  end
115
107
 
116
108
  ##
@@ -128,17 +120,14 @@ class Gem::Ext::Builder
128
120
  when /CMakeLists.txt/ then
129
121
  Gem::Ext::CmakeBuilder
130
122
  else
131
- extension_dir = File.join @gem_dir, File.dirname(extension)
132
-
133
- message = "No builder for extension '#{extension}'"
134
- build_error extension_dir, message
123
+ build_error("No builder for extension '#{extension}'")
135
124
  end
136
125
  end
137
126
 
138
127
  ##
139
- # Logs the build +output+ in +build_dir+, then raises Gem::Ext::BuildError.
128
+ # Logs the build +output+, then raises Gem::Ext::BuildError.
140
129
 
141
- def build_error(build_dir, output, backtrace = nil) # :nodoc:
130
+ def build_error(output, backtrace = nil) # :nodoc:
142
131
  gem_make_out = write_gem_make_out output
143
132
 
144
133
  message = <<-EOF
@@ -156,49 +145,24 @@ EOF
156
145
  def build_extension(extension, dest_path) # :nodoc:
157
146
  results = []
158
147
 
159
- # FIXME: Determine if this line is necessary and, if so, why.
160
- # Notes:
161
- # 1. As far as I can tell, this method is only called by +build_extensions+.
162
- # 2. The existence of this line implies +extension+ is, or previously was,
163
- # sometimes +false+ or +nil+.
164
- # 3. #1 and #2 combined suggests, but does not confirm, that
165
- # +@specs.extensions+ sometimes contained +false+ or +nil+ values.
166
- # 4. Nothing seems to explicitly handle +extension+ being empty,
167
- # which makes me wonder both what it should do and what it does.
168
- #
169
- # - @duckinator
170
- extension ||= '' # I wish I knew why this line existed
148
+ builder = builder_for(extension)
171
149
 
172
150
  extension_dir =
173
151
  File.expand_path File.join(@gem_dir, File.dirname(extension))
174
152
  lib_dir = File.join @spec.full_gem_path, @spec.raw_require_paths.first
175
153
 
176
- builder = builder_for extension
177
-
178
154
  begin
179
155
  FileUtils.mkdir_p dest_path
180
156
 
181
- CHDIR_MUTEX.synchronize do
182
- pwd = Dir.getwd
183
- Dir.chdir extension_dir
184
- begin
185
- results = builder.build(extension, dest_path,
186
- results, @build_args, lib_dir)
187
-
188
- verbose { results.join("\n") }
189
- ensure
190
- begin
191
- Dir.chdir pwd
192
- rescue SystemCallError
193
- Dir.chdir dest_path
194
- end
195
- end
196
- end
157
+ results = builder.build(extension, dest_path,
158
+ results, @build_args, lib_dir, extension_dir)
159
+
160
+ verbose { results.join("\n") }
197
161
 
198
162
  write_gem_make_out results.join "\n"
199
163
  rescue => e
200
164
  results << e.message
201
- build_error extension_dir, results.join("\n"), $@
165
+ build_error(results.join("\n"), $@)
202
166
  end
203
167
  end
204
168
 
@@ -218,11 +182,9 @@ EOF
218
182
 
219
183
  dest_path = @spec.extension_dir
220
184
 
185
+ require "fileutils"
221
186
  FileUtils.rm_f @spec.gem_build_complete_path
222
187
 
223
- # FIXME: action at a distance: @ran_rake modified deep in build_extension(). - @duckinator
224
- @ran_rake = false # only run rake once
225
-
226
188
  @spec.extensions.each do |extension|
227
189
  break if @ran_rake
228
190
 
@@ -240,9 +202,10 @@ EOF
240
202
 
241
203
  FileUtils.mkdir_p @spec.extension_dir
242
204
 
243
- File.open destination, 'wb' do |io| io.puts output end
205
+ File.open destination, 'wb' do |io|
206
+ io.puts output
207
+ end
244
208
 
245
209
  destination
246
210
  end
247
-
248
211
  end