rubygems-update 3.1.1 → 3.2.0.rc.2

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 (518) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +25 -11
  4. data/History.txt +389 -144
  5. data/Manifest.txt +37 -73
  6. data/POLICIES.md +2 -9
  7. data/README.md +5 -5
  8. data/Rakefile +47 -82
  9. data/bin/update_rubygems +2 -2
  10. data/bundler/CHANGELOG.md +1546 -1414
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +21 -7
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +54 -20
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/cache.rb +1 -7
  20. data/bundler/lib/bundler/cli/clean.rb +1 -1
  21. data/bundler/lib/bundler/cli/common.rb +14 -0
  22. data/bundler/lib/bundler/cli/console.rb +1 -1
  23. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  24. data/bundler/lib/bundler/cli/exec.rb +4 -13
  25. data/bundler/lib/bundler/cli/fund.rb +36 -0
  26. data/bundler/lib/bundler/cli/gem.rb +84 -11
  27. data/bundler/lib/bundler/cli/info.rb +15 -4
  28. data/bundler/lib/bundler/cli/init.rb +2 -2
  29. data/bundler/lib/bundler/cli/inject.rb +1 -1
  30. data/bundler/lib/bundler/cli/install.rb +12 -18
  31. data/bundler/lib/bundler/cli/issue.rb +2 -2
  32. data/bundler/lib/bundler/cli/list.rb +12 -10
  33. data/bundler/lib/bundler/cli/outdated.rb +89 -66
  34. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  35. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  36. data/bundler/lib/bundler/cli/show.rb +1 -1
  37. data/bundler/lib/bundler/cli/update.rb +2 -0
  38. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  39. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
  40. data/bundler/lib/bundler/definition.rb +51 -60
  41. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  42. data/bundler/lib/bundler/dependency.rb +0 -9
  43. data/bundler/lib/bundler/dsl.rb +5 -9
  44. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  45. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  46. data/bundler/lib/bundler/errors.rb +1 -0
  47. data/bundler/lib/bundler/feature_flag.rb +0 -2
  48. data/bundler/lib/bundler/fetcher.rb +4 -3
  49. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  50. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  51. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  52. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  53. data/bundler/lib/bundler/friendly_errors.rb +7 -13
  54. data/bundler/lib/bundler/gem_helper.rb +33 -19
  55. data/bundler/lib/bundler/gem_helpers.rb +6 -1
  56. data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
  57. data/bundler/lib/bundler/graph.rb +1 -1
  58. data/bundler/lib/bundler/index.rb +1 -1
  59. data/bundler/lib/bundler/injector.rb +15 -4
  60. data/bundler/lib/bundler/inline.rb +2 -2
  61. data/bundler/lib/bundler/installer.rb +30 -29
  62. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  65. data/bundler/lib/bundler/lazy_specification.rb +19 -6
  66. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  67. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  68. data/bundler/lib/bundler/mirror.rb +2 -2
  69. data/bundler/lib/bundler/plugin.rb +30 -5
  70. data/bundler/lib/bundler/plugin/index.rb +10 -1
  71. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  72. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  73. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  74. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  75. data/bundler/lib/bundler/remote_specification.rb +5 -2
  76. data/bundler/lib/bundler/resolver.rb +32 -9
  77. data/bundler/lib/bundler/resolver/spec_group.rb +27 -6
  78. data/bundler/lib/bundler/retry.rb +1 -1
  79. data/bundler/lib/bundler/ruby_version.rb +1 -1
  80. data/bundler/lib/bundler/rubygems_ext.rb +53 -9
  81. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  82. data/bundler/lib/bundler/rubygems_integration.rb +31 -54
  83. data/bundler/lib/bundler/runtime.rb +4 -14
  84. data/bundler/lib/bundler/settings.rb +49 -45
  85. data/bundler/lib/bundler/setup.rb +5 -0
  86. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  87. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  88. data/bundler/lib/bundler/source.rb +1 -1
  89. data/bundler/lib/bundler/source/git.rb +5 -5
  90. data/bundler/lib/bundler/source/git/git_proxy.rb +56 -59
  91. data/bundler/lib/bundler/source/path.rb +7 -3
  92. data/bundler/lib/bundler/source/path/installer.rb +8 -10
  93. data/bundler/lib/bundler/source/rubygems.rb +13 -16
  94. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  95. data/bundler/lib/bundler/source_list.rb +2 -2
  96. data/bundler/lib/bundler/spec_set.rb +1 -1
  97. data/bundler/lib/bundler/stub_specification.rb +17 -5
  98. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  99. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  100. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -1
  101. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  102. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  103. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  104. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  105. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  106. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  107. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  108. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  109. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
  110. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  111. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  112. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  113. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  114. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  115. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  116. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  117. data/bundler/lib/bundler/ui/shell.rb +5 -5
  118. data/bundler/lib/bundler/uri_credentials_filter.rb +1 -1
  119. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
  120. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  121. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  122. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  123. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  124. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  125. data/bundler/lib/bundler/version.rb +1 -1
  126. data/bundler/lib/bundler/worker.rb +1 -1
  127. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  128. data/bundler/man/bundle-add.1 +1 -1
  129. data/bundler/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
  130. data/bundler/man/bundle-binstubs.1 +5 -3
  131. data/bundler/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
  132. data/bundler/man/bundle-cache.1 +1 -1
  133. data/bundler/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
  134. data/bundler/man/bundle-check.1 +1 -1
  135. data/bundler/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
  136. data/bundler/man/bundle-clean.1 +1 -1
  137. data/bundler/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
  138. data/bundler/man/bundle-config.1 +16 -22
  139. data/bundler/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
  140. data/bundler/man/bundle-doctor.1 +1 -1
  141. data/bundler/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
  142. data/bundler/man/bundle-exec.1 +1 -1
  143. data/bundler/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
  144. data/bundler/man/bundle-gem.1 +25 -3
  145. data/bundler/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
  146. data/bundler/man/bundle-info.1 +1 -1
  147. data/bundler/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
  148. data/bundler/man/bundle-init.1 +1 -1
  149. data/bundler/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
  150. data/bundler/man/bundle-inject.1 +1 -1
  151. data/bundler/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
  152. data/bundler/man/bundle-install.1 +29 -2
  153. data/bundler/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
  154. data/bundler/man/bundle-list.1 +7 -7
  155. data/bundler/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
  156. data/bundler/man/bundle-lock.1 +1 -1
  157. data/bundler/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
  158. data/bundler/man/bundle-open.1 +1 -1
  159. data/bundler/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
  160. data/bundler/man/bundle-outdated.1 +1 -1
  161. data/bundler/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
  162. data/bundler/man/bundle-platform.1 +1 -1
  163. data/bundler/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
  164. data/bundler/man/bundle-pristine.1 +1 -1
  165. data/bundler/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
  166. data/bundler/man/bundle-remove.1 +1 -1
  167. data/bundler/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
  168. data/bundler/man/bundle-show.1 +1 -1
  169. data/bundler/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
  170. data/bundler/man/bundle-update.1 +1 -1
  171. data/bundler/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
  172. data/bundler/man/bundle-viz.1 +1 -1
  173. data/bundler/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
  174. data/bundler/man/bundle.1 +1 -1
  175. data/bundler/man/{bundle.ronn → bundle.1.ronn} +0 -0
  176. data/bundler/man/gemfile.5 +4 -4
  177. data/bundler/man/gemfile.5.ronn +4 -4
  178. data/lib/rubygems.rb +133 -186
  179. data/lib/rubygems/available_set.rb +4 -6
  180. data/lib/rubygems/basic_specification.rb +12 -10
  181. data/lib/rubygems/bundler_version_finder.rb +14 -9
  182. data/lib/rubygems/command.rb +17 -17
  183. data/lib/rubygems/command_manager.rb +4 -5
  184. data/lib/rubygems/commands/build_command.rb +4 -1
  185. data/lib/rubygems/commands/cert_command.rb +1 -9
  186. data/lib/rubygems/commands/check_command.rb +0 -2
  187. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  188. data/lib/rubygems/commands/contents_command.rb +4 -6
  189. data/lib/rubygems/commands/dependency_command.rb +6 -8
  190. data/lib/rubygems/commands/environment_command.rb +1 -3
  191. data/lib/rubygems/commands/fetch_command.rb +2 -4
  192. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  193. data/lib/rubygems/commands/help_command.rb +2 -4
  194. data/lib/rubygems/commands/info_command.rb +8 -5
  195. data/lib/rubygems/commands/install_command.rb +3 -5
  196. data/lib/rubygems/commands/list_command.rb +8 -7
  197. data/lib/rubygems/commands/lock_command.rb +1 -3
  198. data/lib/rubygems/commands/mirror_command.rb +0 -2
  199. data/lib/rubygems/commands/open_command.rb +0 -4
  200. data/lib/rubygems/commands/outdated_command.rb +0 -2
  201. data/lib/rubygems/commands/owner_command.rb +0 -2
  202. data/lib/rubygems/commands/pristine_command.rb +10 -4
  203. data/lib/rubygems/commands/push_command.rb +4 -44
  204. data/lib/rubygems/commands/query_command.rb +6 -353
  205. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  206. data/lib/rubygems/commands/search_command.rb +7 -7
  207. data/lib/rubygems/commands/server_command.rb +0 -2
  208. data/lib/rubygems/commands/setup_command.rb +156 -48
  209. data/lib/rubygems/commands/signin_command.rb +0 -2
  210. data/lib/rubygems/commands/signout_command.rb +0 -2
  211. data/lib/rubygems/commands/sources_command.rb +3 -5
  212. data/lib/rubygems/commands/specification_command.rb +2 -4
  213. data/lib/rubygems/commands/stale_command.rb +1 -3
  214. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  215. data/lib/rubygems/commands/unpack_command.rb +1 -3
  216. data/lib/rubygems/commands/update_command.rb +59 -14
  217. data/lib/rubygems/commands/which_command.rb +0 -2
  218. data/lib/rubygems/commands/yank_command.rb +0 -2
  219. data/lib/rubygems/config_file.rb +11 -4
  220. data/lib/rubygems/core_ext/kernel_require.rb +26 -36
  221. data/lib/rubygems/core_ext/kernel_warn.rb +6 -6
  222. data/lib/rubygems/defaults.rb +99 -5
  223. data/lib/rubygems/dependency.rb +2 -7
  224. data/lib/rubygems/dependency_installer.rb +1 -75
  225. data/lib/rubygems/dependency_list.rb +7 -9
  226. data/lib/rubygems/deprecate.rb +46 -1
  227. data/lib/rubygems/doctor.rb +4 -4
  228. data/lib/rubygems/errors.rb +3 -14
  229. data/lib/rubygems/exceptions.rb +2 -33
  230. data/lib/rubygems/ext.rb +6 -6
  231. data/lib/rubygems/ext/build_error.rb +2 -0
  232. data/lib/rubygems/ext/builder.rb +4 -4
  233. data/lib/rubygems/ext/cmake_builder.rb +1 -3
  234. data/lib/rubygems/ext/configure_builder.rb +0 -2
  235. data/lib/rubygems/ext/ext_conf_builder.rb +6 -9
  236. data/lib/rubygems/ext/rake_builder.rb +0 -2
  237. data/lib/rubygems/gem_runner.rb +3 -10
  238. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  239. data/lib/rubygems/indexer.rb +1 -21
  240. data/lib/rubygems/install_update_options.rb +5 -5
  241. data/lib/rubygems/installer.rb +47 -48
  242. data/lib/rubygems/installer_test_case.rb +18 -5
  243. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  244. data/lib/rubygems/local_remote_options.rb +1 -1
  245. data/lib/rubygems/mock_gem_ui.rb +0 -6
  246. data/lib/rubygems/name_tuple.rb +2 -6
  247. data/lib/rubygems/openssl.rb +7 -0
  248. data/lib/rubygems/package.rb +11 -23
  249. data/lib/rubygems/package/digest_io.rb +0 -2
  250. data/lib/rubygems/package/file_source.rb +0 -2
  251. data/lib/rubygems/package/io_source.rb +0 -2
  252. data/lib/rubygems/package/old.rb +1 -3
  253. data/lib/rubygems/package/tar_header.rb +3 -5
  254. data/lib/rubygems/package/tar_reader.rb +0 -3
  255. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  256. data/lib/rubygems/package/tar_test_case.rb +1 -3
  257. data/lib/rubygems/package/tar_writer.rb +2 -12
  258. data/lib/rubygems/package_task.rb +1 -7
  259. data/lib/rubygems/path_support.rb +1 -3
  260. data/lib/rubygems/platform.rb +3 -5
  261. data/lib/rubygems/psych_tree.rb +0 -2
  262. data/lib/rubygems/query_utils.rb +362 -0
  263. data/lib/rubygems/rdoc.rb +0 -12
  264. data/lib/rubygems/remote_fetcher.rb +9 -25
  265. data/lib/rubygems/request.rb +1 -9
  266. data/lib/rubygems/request/connection_pools.rb +1 -5
  267. data/lib/rubygems/request/http_pool.rb +0 -2
  268. data/lib/rubygems/request/https_pool.rb +0 -2
  269. data/lib/rubygems/request_set.rb +5 -7
  270. data/lib/rubygems/request_set/gem_dependency_api.rb +2 -4
  271. data/lib/rubygems/request_set/lockfile.rb +8 -12
  272. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  273. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  274. data/lib/rubygems/requirement.rb +20 -21
  275. data/lib/rubygems/resolver.rb +7 -10
  276. data/lib/rubygems/resolver/activation_request.rb +0 -2
  277. data/lib/rubygems/resolver/api_set.rb +4 -6
  278. data/lib/rubygems/resolver/api_specification.rb +16 -7
  279. data/lib/rubygems/resolver/best_set.rb +0 -2
  280. data/lib/rubygems/resolver/composed_set.rb +3 -5
  281. data/lib/rubygems/resolver/conflict.rb +1 -3
  282. data/lib/rubygems/resolver/current_set.rb +0 -2
  283. data/lib/rubygems/resolver/dependency_request.rb +0 -2
  284. data/lib/rubygems/resolver/git_set.rb +0 -2
  285. data/lib/rubygems/resolver/git_specification.rb +0 -2
  286. data/lib/rubygems/resolver/index_set.rb +1 -3
  287. data/lib/rubygems/resolver/index_specification.rb +0 -2
  288. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  289. data/lib/rubygems/resolver/installer_set.rb +3 -5
  290. data/lib/rubygems/resolver/local_specification.rb +0 -2
  291. data/lib/rubygems/resolver/lock_set.rb +1 -3
  292. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  293. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  294. data/lib/rubygems/resolver/set.rb +0 -2
  295. data/lib/rubygems/resolver/source_set.rb +0 -2
  296. data/lib/rubygems/resolver/spec_specification.rb +0 -2
  297. data/lib/rubygems/resolver/specification.rb +0 -2
  298. data/lib/rubygems/resolver/stats.rb +0 -2
  299. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  300. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  301. data/lib/rubygems/s3_uri_signer.rb +1 -7
  302. data/lib/rubygems/safe_yaml.rb +4 -4
  303. data/lib/rubygems/security.rb +26 -32
  304. data/lib/rubygems/security/policy.rb +3 -7
  305. data/lib/rubygems/security/signer.rb +4 -6
  306. data/lib/rubygems/security/trust_dir.rb +1 -3
  307. data/lib/rubygems/server.rb +9 -11
  308. data/lib/rubygems/source.rb +4 -4
  309. data/lib/rubygems/source/git.rb +7 -8
  310. data/lib/rubygems/source/installed.rb +0 -2
  311. data/lib/rubygems/source/local.rb +2 -4
  312. data/lib/rubygems/source/lock.rb +0 -2
  313. data/lib/rubygems/source/specific_file.rb +0 -2
  314. data/lib/rubygems/source/vendor.rb +0 -2
  315. data/lib/rubygems/source_list.rb +6 -7
  316. data/lib/rubygems/spec_fetcher.rb +18 -17
  317. data/lib/rubygems/specification.rb +107 -120
  318. data/lib/rubygems/specification_policy.rb +88 -30
  319. data/lib/rubygems/stub_specification.rb +0 -4
  320. data/lib/rubygems/syck_hack.rb +0 -2
  321. data/lib/rubygems/test_case.rb +122 -92
  322. data/lib/rubygems/test_utilities.rb +6 -14
  323. data/lib/rubygems/uninstaller.rb +35 -16
  324. data/lib/rubygems/uri_formatter.rb +0 -2
  325. data/lib/rubygems/uri_parser.rb +0 -2
  326. data/lib/rubygems/user_interaction.rb +1 -26
  327. data/lib/rubygems/util.rb +15 -3
  328. data/lib/rubygems/util/licenses.rb +4 -6
  329. data/lib/rubygems/util/list.rb +0 -2
  330. data/lib/rubygems/validator.rb +1 -3
  331. data/lib/rubygems/version.rb +5 -7
  332. data/rubygems-update.gemspec +2 -2
  333. data/setup.rb +2 -7
  334. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  335. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  336. data/test/rubygems/rubygems_plugin.rb +0 -2
  337. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  338. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  339. data/test/rubygems/test_bundled_ca.rb +38 -45
  340. data/test/rubygems/test_config.rb +0 -2
  341. data/test/rubygems/test_deprecate.rb +40 -7
  342. data/test/rubygems/test_gem.rb +150 -103
  343. data/test/rubygems/test_gem_available_set.rb +3 -5
  344. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  345. data/test/rubygems/test_gem_command.rb +24 -7
  346. data/test/rubygems/test_gem_command_manager.rb +36 -5
  347. data/test/rubygems/test_gem_commands_build_command.rb +53 -10
  348. data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
  349. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  350. data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
  351. data/test/rubygems/test_gem_commands_contents_command.rb +48 -17
  352. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  353. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  354. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  355. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  356. data/test/rubygems/test_gem_commands_help_command.rb +0 -2
  357. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  358. data/test/rubygems/test_gem_commands_install_command.rb +31 -33
  359. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  360. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  361. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  362. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  363. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  364. data/test/rubygems/test_gem_commands_owner_command.rb +11 -5
  365. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -10
  366. data/test/rubygems/test_gem_commands_push_command.rb +7 -4
  367. data/test/rubygems/test_gem_commands_query_command.rb +9 -9
  368. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  369. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  370. data/test/rubygems/test_gem_commands_setup_command.rb +210 -118
  371. data/test/rubygems/test_gem_commands_signin_command.rb +6 -6
  372. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  373. data/test/rubygems/test_gem_commands_sources_command.rb +39 -3
  374. data/test/rubygems/test_gem_commands_specification_command.rb +18 -20
  375. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  376. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  377. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  378. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  379. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  380. data/test/rubygems/test_gem_commands_yank_command.rb +14 -8
  381. data/test/rubygems/test_gem_config_file.rb +7 -12
  382. data/test/rubygems/test_gem_dependency.rb +0 -2
  383. data/test/rubygems/test_gem_dependency_installer.rb +54 -191
  384. data/test/rubygems/test_gem_dependency_list.rb +8 -10
  385. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  386. data/test/rubygems/test_gem_doctor.rb +28 -2
  387. data/test/rubygems/test_gem_ext_builder.rb +16 -33
  388. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -14
  389. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -11
  390. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -3
  391. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -11
  392. data/test/rubygems/test_gem_gem_runner.rb +43 -1
  393. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -2
  394. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  395. data/test/rubygems/test_gem_indexer.rb +9 -15
  396. data/test/rubygems/test_gem_install_update_options.rb +0 -2
  397. data/test/rubygems/test_gem_installer.rb +192 -71
  398. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  399. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  400. data/test/rubygems/test_gem_package.rb +33 -31
  401. data/test/rubygems/test_gem_package_old.rb +0 -2
  402. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  403. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  404. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  405. data/test/rubygems/test_gem_package_tar_writer.rb +8 -5
  406. data/test/rubygems/test_gem_package_task.rb +46 -13
  407. data/test/rubygems/test_gem_path_support.rb +0 -2
  408. data/test/rubygems/test_gem_platform.rb +0 -2
  409. data/test/rubygems/test_gem_rdoc.rb +0 -2
  410. data/test/rubygems/test_gem_remote_fetcher.rb +156 -195
  411. data/test/rubygems/test_gem_request.rb +11 -15
  412. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  413. data/test/rubygems/test_gem_request_set.rb +72 -22
  414. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  415. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -2
  416. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  417. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  418. data/test/rubygems/test_gem_requirement.rb +10 -4
  419. data/test/rubygems/test_gem_resolver.rb +6 -8
  420. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  421. data/test/rubygems/test_gem_resolver_api_set.rb +3 -5
  422. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -2
  423. data/test/rubygems/test_gem_resolver_best_set.rb +2 -4
  424. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  425. data/test/rubygems/test_gem_resolver_conflict.rb +0 -2
  426. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  427. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  428. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  429. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  430. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  431. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  432. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  433. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  434. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  435. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  436. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  437. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  438. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -2
  439. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  440. data/test/rubygems/test_gem_security.rb +20 -22
  441. data/test/rubygems/test_gem_security_policy.rb +5 -10
  442. data/test/rubygems/test_gem_security_signer.rb +8 -10
  443. data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
  444. data/test/rubygems/test_gem_server.rb +10 -14
  445. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  446. data/test/rubygems/test_gem_source.rb +12 -16
  447. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  448. data/test/rubygems/test_gem_source_git.rb +12 -13
  449. data/test/rubygems/test_gem_source_installed.rb +7 -9
  450. data/test/rubygems/test_gem_source_list.rb +1 -2
  451. data/test/rubygems/test_gem_source_local.rb +8 -10
  452. data/test/rubygems/test_gem_source_lock.rb +10 -12
  453. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  454. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  455. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  456. data/test/rubygems/test_gem_specification.rb +179 -129
  457. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  458. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  459. data/test/rubygems/test_gem_text.rb +1 -3
  460. data/test/rubygems/test_gem_uninstaller.rb +133 -11
  461. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  462. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  463. data/test/rubygems/test_gem_util.rb +7 -7
  464. data/test/rubygems/test_gem_validator.rb +0 -2
  465. data/test/rubygems/test_gem_version.rb +1 -3
  466. data/test/rubygems/test_gem_version_option.rb +0 -2
  467. data/test/rubygems/test_kernel.rb +25 -10
  468. data/test/rubygems/test_project_sanity.rb +7 -2
  469. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  470. data/test/rubygems/test_require.rb +241 -47
  471. metadata +59 -96
  472. data/.bundle/config +0 -2
  473. data/.rubocop.yml +0 -91
  474. data/Gemfile +0 -8
  475. data/Gemfile.lock +0 -43
  476. data/bundler/CODE_OF_CONDUCT.md +0 -136
  477. data/bundler/man/bundle-add.1.txt +0 -58
  478. data/bundler/man/bundle-binstubs.1.txt +0 -48
  479. data/bundler/man/bundle-cache.1.txt +0 -78
  480. data/bundler/man/bundle-check.1.txt +0 -33
  481. data/bundler/man/bundle-clean.1.txt +0 -26
  482. data/bundler/man/bundle-config.1.txt +0 -528
  483. data/bundler/man/bundle-doctor.1.txt +0 -44
  484. data/bundler/man/bundle-exec.1.txt +0 -178
  485. data/bundler/man/bundle-gem.1.txt +0 -91
  486. data/bundler/man/bundle-info.1.txt +0 -21
  487. data/bundler/man/bundle-init.1.txt +0 -34
  488. data/bundler/man/bundle-inject.1.txt +0 -32
  489. data/bundler/man/bundle-install.1.txt +0 -401
  490. data/bundler/man/bundle-list.1.txt +0 -43
  491. data/bundler/man/bundle-lock.1.txt +0 -93
  492. data/bundler/man/bundle-open.1.txt +0 -29
  493. data/bundler/man/bundle-outdated.1.txt +0 -131
  494. data/bundler/man/bundle-platform.1.txt +0 -57
  495. data/bundler/man/bundle-pristine.1.txt +0 -44
  496. data/bundler/man/bundle-remove.1.txt +0 -34
  497. data/bundler/man/bundle-show.1.txt +0 -27
  498. data/bundler/man/bundle-update.1.txt +0 -390
  499. data/bundler/man/bundle-viz.1.txt +0 -39
  500. data/bundler/man/bundle.1.txt +0 -116
  501. data/bundler/man/gemfile.5.txt +0 -649
  502. data/bundler/man/index.txt +0 -25
  503. data/lib/rubygems/source_local.rb +0 -7
  504. data/lib/rubygems/source_specific_file.rb +0 -6
  505. data/lib/ubygems.rb +0 -14
  506. data/tmp/.keep +0 -0
  507. data/util/CL2notes +0 -55
  508. data/util/bisect +0 -10
  509. data/util/ci.sh +0 -62
  510. data/util/cops/deprecations.rb +0 -52
  511. data/util/create_certs.rb +0 -171
  512. data/util/create_certs.sh +0 -27
  513. data/util/create_encrypted_key.rb +0 -16
  514. data/util/generate_spdx_license_list.rb +0 -63
  515. data/util/patch_with_prs.rb +0 -77
  516. data/util/rubocop +0 -8
  517. data/util/update_bundled_ca_certificates.rb +0 -139
  518. data/util/update_changelog.rb +0 -67
@@ -43,14 +43,6 @@ module Bundler
43
43
  self
44
44
  end
45
45
 
46
- REQUIRE_ERRORS = [
47
- /^no such file to load -- (.+)$/i,
48
- /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
49
- /^Missing API definition file in (.+)$/i,
50
- /^cannot load such file -- (.+)$/i,
51
- /^dlopen\([^)]*\): Library not loaded: (.+)$/i,
52
- ].freeze
53
-
54
46
  def require(*groups)
55
47
  groups.map!(&:to_sym)
56
48
  groups = [:default] if groups.empty?
@@ -79,16 +71,14 @@ module Bundler
79
71
  end
80
72
  end
81
73
  rescue LoadError => e
82
- REQUIRE_ERRORS.find {|r| r =~ e.message }
83
- raise if dep.autorequire || $1 != required_file
74
+ raise if dep.autorequire || e.path != required_file
84
75
 
85
76
  if dep.autorequire.nil? && dep.name.include?("-")
86
77
  begin
87
78
  namespaced_file = dep.name.tr("-", "/")
88
79
  Kernel.require namespaced_file
89
80
  rescue LoadError => e
90
- REQUIRE_ERRORS.find {|r| r =~ e.message }
91
- raise if $1 != namespaced_file
81
+ raise if e.path != namespaced_file
92
82
  end
93
83
  end
94
84
  end
@@ -165,7 +155,7 @@ module Bundler
165
155
  spec_cache_paths = []
166
156
  spec_gemspec_paths = []
167
157
  spec_extension_paths = []
168
- specs.each do |spec|
158
+ Bundler.rubygems.add_default_gems_to(specs).values.each do |spec|
169
159
  spec_gem_paths << spec.full_gem_path
170
160
  # need to check here in case gems are nested like for the rails git repo
171
161
  md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path)
@@ -213,7 +203,7 @@ module Bundler
213
203
  output
214
204
  end
215
205
 
216
- private
206
+ private
217
207
 
218
208
  def prune_gem_cache(resolve, cache_path)
219
209
  cached = Dir["#{cache_path}/*.gem"]
@@ -12,7 +12,6 @@ module Bundler
12
12
  allow_offline_install
13
13
  auto_clean_without_path
14
14
  auto_install
15
- auto_config_jobs
16
15
  cache_all
17
16
  cache_all_platforms
18
17
  default_install_uses_path
@@ -22,7 +21,6 @@ module Bundler
22
21
  disable_exec_load
23
22
  disable_local_branch_check
24
23
  disable_multisource
25
- disable_platform_warnings
26
24
  disable_shared_gems
27
25
  disable_version_check
28
26
  force_ruby_platform
@@ -44,7 +42,6 @@ module Bundler
44
42
  setup_makes_kernel_gem_public
45
43
  silence_deprecations
46
44
  silence_root_warning
47
- skip_default_git_sources
48
45
  specific_platform
49
46
  suppress_install_using_messages
50
47
  unlock_source_unlocks_spec
@@ -66,30 +63,25 @@ module Bundler
66
63
  ].freeze
67
64
 
68
65
  DEFAULT_CONFIG = {
69
- :silence_deprecations => false,
70
- :disable_version_check => true,
71
- :prefer_patch => false,
72
- :redirect => 5,
73
- :retry => 3,
74
- :timeout => 10,
66
+ "BUNDLE_SILENCE_DEPRECATIONS" => false,
67
+ "BUNDLE_DISABLE_VERSION_CHECK" => true,
68
+ "BUNDLE_PREFER_PATCH" => false,
69
+ "BUNDLE_REDIRECT" => 5,
70
+ "BUNDLE_RETRY" => 3,
71
+ "BUNDLE_TIMEOUT" => 10,
75
72
  }.freeze
76
73
 
77
74
  def initialize(root = nil)
78
75
  @root = root
79
76
  @local_config = load_config(local_config_file)
77
+ @env_config = ENV.to_h.select {|key, _value| key =~ /\ABUNDLE_.+/ }
80
78
  @global_config = load_config(global_config_file)
81
79
  @temporary = {}
82
80
  end
83
81
 
84
82
  def [](name)
85
83
  key = key_for(name)
86
- value = @temporary.fetch(key) do
87
- @local_config.fetch(key) do
88
- ENV.fetch(key) do
89
- @global_config.fetch(key) do
90
- DEFAULT_CONFIG.fetch(name) do
91
- nil
92
- end end end end end
84
+ value = configs.values.map {|config| config[key] }.compact.first
93
85
 
94
86
  converted_value(value, name)
95
87
  end
@@ -132,9 +124,7 @@ module Bundler
132
124
  end
133
125
 
134
126
  def all
135
- env_keys = ENV.keys.grep(/\ABUNDLE_.+/)
136
-
137
- keys = @temporary.keys | @global_config.keys | @local_config.keys | env_keys
127
+ keys = @temporary.keys | @global_config.keys | @local_config.keys | @env_config.keys
138
128
 
139
129
  keys.map do |key|
140
130
  key.sub(/^BUNDLE_/, "").gsub(/__/, ".").downcase
@@ -171,13 +161,11 @@ module Bundler
171
161
 
172
162
  def locations(key)
173
163
  key = key_for(key)
174
- locations = {}
175
- locations[:temporary] = @temporary[key] if @temporary.key?(key)
176
- locations[:local] = @local_config[key] if @local_config.key?(key)
177
- locations[:env] = ENV[key] if ENV[key]
178
- locations[:global] = @global_config[key] if @global_config.key?(key)
179
- locations[:default] = DEFAULT_CONFIG[key] if DEFAULT_CONFIG.key?(key)
180
- locations
164
+ configs.keys.inject({}) do |partial_locations, level|
165
+ value_on_level = configs[level][key]
166
+ partial_locations[level] = value_on_level unless value_on_level.nil?
167
+ partial_locations
168
+ end
181
169
  end
182
170
 
183
171
  def pretty_values_for(exposed_key)
@@ -185,20 +173,20 @@ module Bundler
185
173
 
186
174
  locations = []
187
175
 
188
- if @temporary.key?(key)
189
- locations << "Set for the current command: #{converted_value(@temporary[key], exposed_key).inspect}"
176
+ if value = @temporary[key]
177
+ locations << "Set for the current command: #{converted_value(value, exposed_key).inspect}"
190
178
  end
191
179
 
192
- if @local_config.key?(key)
193
- locations << "Set for your local app (#{local_config_file}): #{converted_value(@local_config[key], exposed_key).inspect}"
180
+ if value = @local_config[key]
181
+ locations << "Set for your local app (#{local_config_file}): #{converted_value(value, exposed_key).inspect}"
194
182
  end
195
183
 
196
- if value = ENV[key]
184
+ if value = @env_config[key]
197
185
  locations << "Set via #{key}: #{converted_value(value, exposed_key).inspect}"
198
186
  end
199
187
 
200
- if @global_config.key?(key)
201
- locations << "Set for the current user (#{global_config_file}): #{converted_value(@global_config[key], exposed_key).inspect}"
188
+ if value = @global_config[key]
189
+ locations << "Set for the current user (#{global_config_file}): #{converted_value(value, exposed_key).inspect}"
202
190
  end
203
191
 
204
192
  return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
@@ -207,17 +195,19 @@ module Bundler
207
195
 
208
196
  # for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
209
197
  def path
210
- key = key_for(:path)
211
- path = ENV[key] || @global_config[key]
212
- if path && !@temporary.key?(key) && !@local_config.key?(key)
213
- return Path.new(path, false, false)
198
+ configs.each do |_level, settings|
199
+ path = value_for("path", settings)
200
+ path_system = value_for("path.system", settings)
201
+ disabled_shared_gems = value_for("disable_shared_gems", settings)
202
+ next if path.nil? && path_system.nil? && disabled_shared_gems.nil?
203
+ system_path = path_system || (disabled_shared_gems == false)
204
+ return Path.new(path, system_path)
214
205
  end
215
206
 
216
- system_path = self["path.system"] || (self[:disable_shared_gems] == false)
217
- Path.new(self[:path], system_path, Bundler.feature_flag.default_install_uses_path?)
207
+ Path.new(nil, false)
218
208
  end
219
209
 
220
- Path = Struct.new(:explicit_path, :system_path, :default_install_uses_path) do
210
+ Path = Struct.new(:explicit_path, :system_path) do
221
211
  def path
222
212
  path = base_path
223
213
  path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
@@ -227,7 +217,7 @@ module Bundler
227
217
  def use_system_gems?
228
218
  return true if system_path
229
219
  return false if explicit_path
230
- !default_install_uses_path
220
+ !Bundler.feature_flag.default_install_uses_path?
231
221
  end
232
222
 
233
223
  def base_path
@@ -280,9 +270,9 @@ module Bundler
280
270
 
281
271
  def validate!
282
272
  all.each do |raw_key|
283
- [@local_config, ENV, @global_config].each do |settings|
284
- value = converted_value(settings[key_for(raw_key)], raw_key)
285
- Validator.validate!(raw_key, value, settings.to_hash.dup)
273
+ [@local_config, @env_config, @global_config].each do |settings|
274
+ value = value_for(raw_key, settings)
275
+ Validator.validate!(raw_key, value, settings.dup)
286
276
  end
287
277
  end
288
278
  end
@@ -293,7 +283,21 @@ module Bundler
293
283
  "BUNDLE_#{key}"
294
284
  end
295
285
 
296
- private
286
+ private
287
+
288
+ def configs
289
+ {
290
+ :temporary => @temporary,
291
+ :local => @local_config,
292
+ :env => @env_config,
293
+ :global => @global_config,
294
+ :default => DEFAULT_CONFIG,
295
+ }
296
+ end
297
+
298
+ def value_for(name, config)
299
+ converted_value(config[key_for(name)], name)
300
+ end
297
301
 
298
302
  def parent_setting_for(name)
299
303
  split_specific_setting_for(name)[0]
@@ -19,4 +19,9 @@ if Bundler::SharedHelpers.in_bundle?
19
19
  else
20
20
  Bundler.ui.silence { Bundler.setup }
21
21
  end
22
+
23
+ # We might be in the middle of shelling out to rubygems
24
+ # (RUBYOPT=-rbundler/setup), so we need to give rubygems the opportunity of
25
+ # not being silent.
26
+ Gem::DefaultUserInteraction.ui = nil
22
27
  end
@@ -194,7 +194,7 @@ module Bundler
194
194
  return @md5_available if defined?(@md5_available)
195
195
  @md5_available = begin
196
196
  require "openssl"
197
- OpenSSL::Digest::MD5.digest("")
197
+ OpenSSL::Digest.digest("MD5", "")
198
198
  true
199
199
  rescue LoadError
200
200
  true
@@ -212,7 +212,7 @@ module Bundler
212
212
  filesystem_access(gemfile_path) {|g| File.open(g, "w") {|file| file.puts contents } }
213
213
  end
214
214
 
215
- private
215
+ private
216
216
 
217
217
  def validate_bundle_path
218
218
  path_separator = Bundler.rubygems.path_separator
@@ -26,7 +26,7 @@ module Bundler
26
26
  end
27
27
  end
28
28
 
29
- protected
29
+ protected
30
30
 
31
31
  # https://www.informit.com/articles/article.aspx?p=683059&seqNum=36
32
32
  def levenshtein_distance(this, that, ins = 2, del = 2, sub = 1)
@@ -63,7 +63,7 @@ module Bundler
63
63
  )
64
64
  end
65
65
 
66
- private
66
+ private
67
67
 
68
68
  def version_color(spec_version, locked_spec_version)
69
69
  if Gem::Version.correct?(spec_version) && Gem::Version.correct?(locked_spec_version)
@@ -230,7 +230,11 @@ module Bundler
230
230
  @allow_remote || @allow_cached
231
231
  end
232
232
 
233
- private
233
+ def local?
234
+ @local
235
+ end
236
+
237
+ private
234
238
 
235
239
  def serialize_gemspecs_in(destination)
236
240
  destination = destination.expand_path(Bundler.root) if destination.relative?
@@ -256,10 +260,6 @@ module Bundler
256
260
  cached_revision && super
257
261
  end
258
262
 
259
- def local?
260
- @local
261
- end
262
-
263
263
  def requires_checkout?
264
264
  allow_git_ops? && !local? && !cached_revision_checked_out?
265
265
  end
@@ -18,7 +18,7 @@ module Bundler
18
18
  def initialize(command)
19
19
  msg = String.new
20
20
  msg << "Bundler is trying to run a `git #{command}` at runtime. You probably need to run `bundle install`. However, "
21
- msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/bundler/bundler/issues "
21
+ msg << "this error message could probably be more useful. Please submit a ticket at https://github.com/rubygems/rubygems/issues/new?labels=Bundler&template=bundler-related-issue.md "
22
22
  msg << "with steps to reproduce as well as the following\n\nCALLER: #{caller.join("\n")}"
23
23
  super msg
24
24
  end
@@ -27,21 +27,21 @@ module Bundler
27
27
  class GitCommandError < GitError
28
28
  attr_reader :command
29
29
 
30
- def initialize(command, path = nil, extra_info = nil)
30
+ def initialize(command, path, destination_path, extra_info = nil)
31
31
  @command = command
32
32
 
33
33
  msg = String.new
34
- msg << "Git error: command `git #{command}` in directory #{SharedHelpers.pwd} has failed."
34
+ msg << "Git error: command `git #{command}` in directory #{destination_path} has failed."
35
35
  msg << "\n#{extra_info}" if extra_info
36
- msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path && path.exist?
36
+ msg << "\nIf this error persists you could try removing the cache directory '#{path}'" if path.exist?
37
37
  super msg
38
38
  end
39
39
  end
40
40
 
41
41
  class MissingGitRevisionError < GitCommandError
42
- def initialize(command, path, ref, repo)
42
+ def initialize(command, path, destination_path, ref, repo)
43
43
  msg = "Revision #{ref} does not exist in the repository #{repo}. Maybe you misspelled it?"
44
- super command, path, msg
44
+ super command, path, destination_path, msg
45
45
  end
46
46
  end
47
47
 
@@ -62,26 +62,18 @@ module Bundler
62
62
  end
63
63
 
64
64
  def revision
65
- return @revision if @revision
66
-
67
- begin
68
- @revision ||= find_local_revision
69
- rescue GitCommandError => e
70
- raise MissingGitRevisionError.new(e.command, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
71
- end
72
-
73
- @revision
65
+ @revision ||= find_local_revision
74
66
  end
75
67
 
76
68
  def branch
77
- @branch ||= allowed_in_path do
78
- git("rev-parse --abbrev-ref HEAD").strip
69
+ @branch ||= allowed_with_path do
70
+ git("rev-parse --abbrev-ref HEAD", :dir => path).strip
79
71
  end
80
72
  end
81
73
 
82
74
  def contains?(commit)
83
- allowed_in_path do
84
- result, status = git_null("branch --contains #{commit}")
75
+ allowed_with_path do
76
+ result, status = git_null("branch --contains #{commit}", :dir => path)
85
77
  status.success? && result =~ /^\* (.*)$/
86
78
  end
87
79
  end
@@ -108,8 +100,8 @@ module Bundler
108
100
  return unless extra_ref
109
101
  end
110
102
 
111
- in_path do
112
- git_retry %(fetch --force --quiet --tags #{uri_escaped_with_configured_credentials} "refs/heads/*:refs/heads/*" #{extra_ref})
103
+ with_path do
104
+ git_retry %(fetch --force --quiet --tags #{uri_escaped_with_configured_credentials} "refs/heads/*:refs/heads/*" #{extra_ref}), :dir => path
113
105
  end
114
106
  end
115
107
 
@@ -133,58 +125,56 @@ module Bundler
133
125
  end
134
126
  end
135
127
  # method 2
136
- SharedHelpers.chdir(destination) do
137
- git_retry %(fetch --force --quiet --tags "#{path}")
128
+ git_retry %(fetch --force --quiet --tags "#{path}"), :dir => destination
138
129
 
139
- begin
140
- git "reset --hard #{@revision}"
141
- rescue GitCommandError => e
142
- raise MissingGitRevisionError.new(e.command, path, @revision, URICredentialsFilter.credential_filtered_uri(uri))
143
- end
130
+ begin
131
+ git "reset --hard #{@revision}", :dir => destination
132
+ rescue GitCommandError => e
133
+ raise MissingGitRevisionError.new(e.command, path, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri))
134
+ end
144
135
 
145
- if submodules
146
- git_retry "submodule update --init --recursive"
147
- elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
148
- git_retry "submodule deinit --all --force"
149
- end
136
+ if submodules
137
+ git_retry "submodule update --init --recursive", :dir => destination
138
+ elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0")
139
+ inner_command = "git -C $toplevel submodule deinit --force $sm_path"
140
+ inner_command = inner_command.gsub("$") { '\$' } unless Bundler::WINDOWS
141
+ git_retry "submodule foreach --quiet \"#{inner_command}\"", :dir => destination
150
142
  end
151
143
  end
152
144
 
153
- private
145
+ private
154
146
 
155
- def git_null(command)
156
- command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
157
- raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
147
+ def git_null(command, dir: SharedHelpers.pwd)
148
+ check_allowed(command)
158
149
 
159
150
  out, status = SharedHelpers.with_clean_git_env do
160
- capture_and_ignore_stderr("git #{command}")
151
+ capture_and_ignore_stderr("git #{command}", :chdir => dir.to_s)
161
152
  end
162
153
 
163
154
  [URICredentialsFilter.credential_filtered_string(out, uri), status]
164
155
  end
165
156
 
166
- def git_retry(command)
157
+ def git_retry(command, dir: SharedHelpers.pwd)
167
158
  Bundler::Retry.new("`git #{URICredentialsFilter.credential_filtered_string(command, uri)}`", GitNotAllowedError).attempts do
168
- git(command)
159
+ git(command, :dir => dir)
169
160
  end
170
161
  end
171
162
 
172
- def git(command, check_errors = true, error_msg = nil)
173
- command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
174
- raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
163
+ def git(command, dir: SharedHelpers.pwd)
164
+ command_with_no_credentials = check_allowed(command)
175
165
 
176
166
  out, status = SharedHelpers.with_clean_git_env do
177
- capture_and_filter_stderr(uri, "git #{command}")
167
+ capture_and_filter_stderr(uri, "git #{command}", :chdir => dir.to_s)
178
168
  end
179
169
 
180
- stdout_with_no_credentials = URICredentialsFilter.credential_filtered_string(out, uri)
181
- raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors && !status.success?
182
- stdout_with_no_credentials
170
+ raise GitCommandError.new(command_with_no_credentials, path, dir) unless status.success?
171
+
172
+ URICredentialsFilter.credential_filtered_string(out, uri)
183
173
  end
184
174
 
185
175
  def has_revision_cached?
186
176
  return unless @revision
187
- in_path { git("cat-file -e #{@revision}") }
177
+ with_path { git("cat-file -e #{@revision}", :dir => path) }
188
178
  true
189
179
  rescue GitError
190
180
  false
@@ -195,9 +185,11 @@ module Bundler
195
185
  end
196
186
 
197
187
  def find_local_revision
198
- allowed_in_path do
199
- git("rev-parse --verify #{Shellwords.shellescape(ref)}", true).strip
188
+ allowed_with_path do
189
+ git("rev-parse --verify #{Shellwords.shellescape(ref)}", :dir => path).strip
200
190
  end
191
+ rescue GitCommandError => e
192
+ raise MissingGitRevisionError.new(e.command, path, path, ref, URICredentialsFilter.credential_filtered_uri(uri))
201
193
  end
202
194
 
203
195
  # Escape the URI for git commands
@@ -230,27 +222,32 @@ module Bundler
230
222
  @git ? @git.allow_git_ops? : true
231
223
  end
232
224
 
233
- def in_path(&blk)
225
+ def with_path(&blk)
234
226
  checkout unless path.exist?
235
- _ = URICredentialsFilter # load it before we chdir
236
- SharedHelpers.chdir(path, &blk)
227
+ blk.call
237
228
  end
238
229
 
239
- def allowed_in_path
240
- return in_path { yield } if allow?
230
+ def allowed_with_path
231
+ return with_path { yield } if allow?
241
232
  raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
242
233
  end
243
234
 
244
- def capture_and_filter_stderr(uri, cmd)
235
+ def check_allowed(command)
236
+ command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
237
+ raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
238
+ command_with_no_credentials
239
+ end
240
+
241
+ def capture_and_filter_stderr(uri, cmd, chdir: SharedHelpers.pwd)
245
242
  require "open3"
246
- return_value, captured_err, status = Open3.capture3(cmd)
243
+ return_value, captured_err, status = Open3.capture3(cmd, :chdir => chdir)
247
244
  Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
248
245
  [return_value, status]
249
246
  end
250
247
 
251
- def capture_and_ignore_stderr(cmd)
248
+ def capture_and_ignore_stderr(cmd, chdir: SharedHelpers.pwd)
252
249
  require "open3"
253
- return_value, _, status = Open3.capture3(cmd)
250
+ return_value, _, status = Open3.capture3(cmd, :chdir => chdir)
254
251
  [return_value, status]
255
252
  end
256
253
  end