rubygems-update 2.6.14 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +10 -7
  3. data/CONTRIBUTING.rdoc +53 -54
  4. data/History.txt +173 -9
  5. data/Manifest.txt +39 -11
  6. data/POLICIES.rdoc +3 -3
  7. data/README.md +72 -0
  8. data/Rakefile +30 -5
  9. data/appveyor.yml +29 -1
  10. data/bin/gem +1 -1
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +269 -9
  13. data/bundler/CODE_OF_CONDUCT.md +1 -1
  14. data/bundler/CONTRIBUTING.md +10 -29
  15. data/bundler/README.md +22 -10
  16. data/bundler/exe/bundle +5 -7
  17. data/bundler/exe/bundle_ruby +4 -3
  18. data/bundler/lib/bundler.rb +94 -74
  19. data/bundler/lib/bundler/build_metadata.rb +36 -0
  20. data/bundler/lib/bundler/capistrano.rb +5 -0
  21. data/bundler/lib/bundler/cli.rb +229 -66
  22. data/bundler/lib/bundler/cli/add.rb +25 -0
  23. data/bundler/lib/bundler/cli/binstubs.rb +9 -7
  24. data/bundler/lib/bundler/cli/cache.rb +5 -4
  25. data/bundler/lib/bundler/cli/check.rb +3 -5
  26. data/bundler/lib/bundler/cli/clean.rb +5 -6
  27. data/bundler/lib/bundler/cli/common.rb +18 -2
  28. data/bundler/lib/bundler/cli/config.rb +26 -7
  29. data/bundler/lib/bundler/cli/console.rb +2 -1
  30. data/bundler/lib/bundler/cli/doctor.rb +1 -0
  31. data/bundler/lib/bundler/cli/exec.rb +3 -2
  32. data/bundler/lib/bundler/cli/gem.rb +36 -15
  33. data/bundler/lib/bundler/cli/info.rb +50 -0
  34. data/bundler/lib/bundler/cli/init.rb +20 -7
  35. data/bundler/lib/bundler/cli/inject.rb +13 -4
  36. data/bundler/lib/bundler/cli/install.rb +61 -77
  37. data/bundler/lib/bundler/cli/issue.rb +40 -0
  38. data/bundler/lib/bundler/cli/list.rb +22 -0
  39. data/bundler/lib/bundler/cli/lock.rb +4 -2
  40. data/bundler/lib/bundler/cli/open.rb +2 -2
  41. data/bundler/lib/bundler/cli/outdated.rb +30 -28
  42. data/bundler/lib/bundler/cli/package.rb +9 -6
  43. data/bundler/lib/bundler/cli/platform.rb +1 -0
  44. data/bundler/lib/bundler/cli/plugin.rb +1 -0
  45. data/bundler/lib/bundler/cli/pristine.rb +43 -0
  46. data/bundler/lib/bundler/cli/show.rb +1 -1
  47. data/bundler/lib/bundler/cli/update.rb +32 -11
  48. data/bundler/lib/bundler/cli/viz.rb +5 -1
  49. data/bundler/lib/bundler/compact_index_client.rb +1 -0
  50. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -2
  51. data/bundler/lib/bundler/compact_index_client/updater.rb +26 -7
  52. data/bundler/lib/bundler/compatibility_guard.rb +14 -0
  53. data/bundler/lib/bundler/constants.rb +1 -0
  54. data/bundler/lib/bundler/current_ruby.rb +8 -7
  55. data/bundler/lib/bundler/definition.rb +231 -159
  56. data/bundler/lib/bundler/dep_proxy.rb +2 -0
  57. data/bundler/lib/bundler/dependency.rb +6 -7
  58. data/bundler/lib/bundler/deployment.rb +1 -1
  59. data/bundler/lib/bundler/deprecate.rb +14 -3
  60. data/bundler/lib/bundler/dsl.rb +103 -62
  61. data/bundler/lib/bundler/endpoint_specification.rb +12 -2
  62. data/bundler/lib/bundler/env.rb +97 -36
  63. data/bundler/lib/bundler/environment_preserver.rb +27 -6
  64. data/bundler/lib/bundler/errors.rb +3 -1
  65. data/bundler/lib/bundler/feature_flag.rb +39 -4
  66. data/bundler/lib/bundler/fetcher.rb +15 -8
  67. data/bundler/lib/bundler/fetcher/base.rb +1 -0
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +2 -12
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  70. data/bundler/lib/bundler/fetcher/downloader.rb +4 -2
  71. data/bundler/lib/bundler/fetcher/index.rb +1 -0
  72. data/bundler/lib/bundler/friendly_errors.rb +5 -2
  73. data/bundler/lib/bundler/gem_helper.rb +23 -9
  74. data/bundler/lib/bundler/gem_helpers.rb +1 -0
  75. data/bundler/lib/bundler/gem_remote_fetcher.rb +1 -0
  76. data/bundler/lib/bundler/gem_tasks.rb +1 -0
  77. data/bundler/lib/bundler/gem_version_promoter.rb +1 -0
  78. data/bundler/lib/bundler/gemdeps.rb +1 -0
  79. data/bundler/lib/bundler/graph.rb +1 -0
  80. data/bundler/lib/bundler/index.rb +19 -11
  81. data/bundler/lib/bundler/injector.rb +51 -27
  82. data/bundler/lib/bundler/inline.rb +10 -10
  83. data/bundler/lib/bundler/installer.rb +104 -50
  84. data/bundler/lib/bundler/installer/gem_installer.rb +5 -2
  85. data/bundler/lib/bundler/installer/parallel_installer.rb +91 -42
  86. data/bundler/lib/bundler/installer/standalone.rb +1 -0
  87. data/bundler/lib/bundler/lazy_specification.rb +17 -4
  88. data/bundler/lib/bundler/lockfile_generator.rb +95 -0
  89. data/bundler/lib/bundler/lockfile_parser.rb +49 -35
  90. data/bundler/lib/bundler/match_platform.rb +1 -0
  91. data/bundler/lib/bundler/mirror.rb +8 -3
  92. data/bundler/lib/bundler/plugin.rb +6 -1
  93. data/bundler/lib/bundler/plugin/api/source.rb +16 -3
  94. data/bundler/lib/bundler/plugin/index.rb +2 -0
  95. data/bundler/lib/bundler/plugin/installer.rb +7 -6
  96. data/bundler/lib/bundler/plugin/source_list.rb +7 -8
  97. data/bundler/lib/bundler/process_lock.rb +24 -0
  98. data/bundler/lib/bundler/psyched_yaml.rb +10 -0
  99. data/bundler/lib/bundler/remote_specification.rb +25 -1
  100. data/bundler/lib/bundler/resolver.rb +171 -192
  101. data/bundler/lib/bundler/resolver/spec_group.rb +111 -0
  102. data/bundler/lib/bundler/retry.rb +1 -0
  103. data/bundler/lib/bundler/ruby_dsl.rb +1 -0
  104. data/bundler/lib/bundler/ruby_version.rb +6 -1
  105. data/bundler/lib/bundler/rubygems_ext.rb +18 -8
  106. data/bundler/lib/bundler/rubygems_gem_installer.rb +25 -2
  107. data/bundler/lib/bundler/rubygems_integration.rb +157 -66
  108. data/bundler/lib/bundler/runtime.rb +28 -18
  109. data/bundler/lib/bundler/settings.rb +202 -87
  110. data/bundler/lib/bundler/settings/validator.rb +79 -0
  111. data/bundler/lib/bundler/setup.rb +4 -7
  112. data/bundler/lib/bundler/shared_helpers.rb +129 -25
  113. data/bundler/lib/bundler/similarity_detector.rb +1 -0
  114. data/bundler/lib/bundler/source.rb +53 -1
  115. data/bundler/lib/bundler/source/gemspec.rb +1 -0
  116. data/bundler/lib/bundler/source/git.rb +49 -21
  117. data/bundler/lib/bundler/source/git/git_proxy.rb +17 -12
  118. data/bundler/lib/bundler/source/metadata.rb +63 -0
  119. data/bundler/lib/bundler/source/path.rb +38 -17
  120. data/bundler/lib/bundler/source/path/installer.rb +4 -2
  121. data/bundler/lib/bundler/source/rubygems.rb +154 -82
  122. data/bundler/lib/bundler/source/rubygems/remote.rb +8 -1
  123. data/bundler/lib/bundler/source_list.rb +75 -15
  124. data/bundler/lib/bundler/spec_set.rb +34 -21
  125. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  126. data/bundler/lib/bundler/stub_specification.rb +86 -2
  127. data/bundler/lib/bundler/templates/Executable +5 -1
  128. data/bundler/lib/bundler/templates/Executable.bundler +105 -0
  129. data/bundler/lib/bundler/templates/Executable.standalone +5 -5
  130. data/bundler/lib/bundler/templates/Gemfile +3 -0
  131. data/bundler/lib/bundler/templates/gems.rb +8 -0
  132. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +4 -2
  133. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  134. data/bundler/lib/bundler/templates/newgem/README.md.tt +14 -8
  135. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +5 -5
  136. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  137. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  138. data/bundler/lib/bundler/templates/newgem/gitignore.tt +0 -1
  139. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +6 -6
  140. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
  141. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +13 -10
  142. data/bundler/lib/bundler/templates/newgem/rspec.tt +1 -0
  143. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
  144. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +3 -0
  145. data/bundler/lib/bundler/templates/newgem/test/newgem_test.rb.tt +1 -1
  146. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +3 -3
  147. data/bundler/lib/bundler/ui.rb +1 -0
  148. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -0
  149. data/bundler/lib/bundler/ui/shell.rb +24 -10
  150. data/bundler/lib/bundler/ui/silent.rb +12 -1
  151. data/bundler/lib/bundler/uri_credentials_filter.rb +1 -0
  152. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  153. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  154. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  155. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  156. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  157. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +16 -5
  158. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  159. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +10 -2
  160. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
  161. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
  162. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
  163. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
  164. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
  165. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
  166. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +5 -4
  167. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +69 -6
  168. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  169. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  170. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  171. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +501 -138
  172. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  173. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  174. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +3 -1
  175. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +46 -21
  176. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +24 -22
  177. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
  178. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  179. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +2 -2
  180. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
  181. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +66 -18
  182. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +17 -15
  183. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +55 -32
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -11
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +7 -5
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +94 -63
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +3 -3
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +13 -13
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +4 -5
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +16 -16
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +42 -21
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +13 -10
  196. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +31 -29
  197. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +49 -33
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -4
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  203. data/bundler/lib/bundler/vendored_fileutils.rb +9 -0
  204. data/bundler/lib/bundler/vendored_molinillo.rb +1 -0
  205. data/bundler/lib/bundler/vendored_persistent.rb +35 -0
  206. data/bundler/lib/bundler/vendored_thor.rb +6 -2
  207. data/bundler/lib/bundler/version.rb +19 -2
  208. data/bundler/lib/bundler/version_ranges.rb +76 -0
  209. data/bundler/lib/bundler/vlad.rb +5 -0
  210. data/bundler/lib/bundler/worker.rb +3 -1
  211. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  212. data/bundler/man/bundle-add.ronn +29 -0
  213. data/bundler/man/bundle-binstubs.ronn +14 -0
  214. data/bundler/man/bundle-check.ronn +26 -0
  215. data/bundler/man/bundle-clean.ronn +18 -0
  216. data/bundler/man/bundle-config.ronn +180 -60
  217. data/bundler/man/bundle-exec.ronn +7 -0
  218. data/bundler/man/bundle-gem.ronn +3 -2
  219. data/bundler/man/bundle-info.ronn +17 -0
  220. data/bundler/man/bundle-init.ronn +18 -0
  221. data/bundler/man/bundle-inject.ronn +22 -0
  222. data/bundler/man/bundle-install.ronn +32 -32
  223. data/bundler/man/bundle-list.ronn +15 -0
  224. data/bundler/man/bundle-open.ronn +19 -0
  225. data/bundler/man/bundle-outdated.ronn +1 -1
  226. data/bundler/man/bundle-package.ronn +5 -0
  227. data/bundler/man/bundle-pristine.ronn +34 -0
  228. data/bundler/man/bundle-show.ronn +20 -0
  229. data/bundler/man/bundle-update.ronn +6 -3
  230. data/bundler/man/bundle-viz.ronn +30 -0
  231. data/bundler/man/bundle.ronn +11 -20
  232. data/bundler/man/gemfile.5.ronn +55 -64
  233. data/lib/rubygems.rb +79 -36
  234. data/lib/rubygems/basic_specification.rb +8 -4
  235. data/lib/rubygems/bundler_version_finder.rb +112 -0
  236. data/lib/rubygems/command.rb +1 -1
  237. data/lib/rubygems/command_manager.rb +3 -1
  238. data/lib/rubygems/commands/cert_command.rb +31 -6
  239. data/lib/rubygems/commands/cleanup_command.rb +1 -1
  240. data/lib/rubygems/commands/help_command.rb +1 -1
  241. data/lib/rubygems/commands/owner_command.rb +3 -1
  242. data/lib/rubygems/commands/pristine_command.rb +11 -8
  243. data/lib/rubygems/commands/push_command.rb +2 -1
  244. data/lib/rubygems/commands/query_command.rb +13 -14
  245. data/lib/rubygems/commands/setup_command.rb +124 -69
  246. data/lib/rubygems/commands/signin_command.rb +33 -0
  247. data/lib/rubygems/commands/signout_command.rb +33 -0
  248. data/lib/rubygems/commands/uninstall_command.rb +4 -3
  249. data/lib/rubygems/commands/unpack_command.rb +16 -4
  250. data/lib/rubygems/commands/update_command.rb +1 -1
  251. data/lib/rubygems/commands/which_command.rb +1 -1
  252. data/lib/rubygems/commands/yank_command.rb +4 -11
  253. data/lib/rubygems/config_file.rb +13 -24
  254. data/lib/rubygems/core_ext/kernel_require.rb +10 -9
  255. data/lib/rubygems/dependency.rb +2 -0
  256. data/lib/rubygems/dependency_installer.rb +4 -0
  257. data/lib/rubygems/errors.rb +3 -0
  258. data/lib/rubygems/exceptions.rb +6 -0
  259. data/lib/rubygems/ext/builder.rb +1 -1
  260. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  261. data/lib/rubygems/ext/rake_builder.rb +1 -1
  262. data/lib/rubygems/gem_runner.rb +5 -1
  263. data/lib/rubygems/install_update_options.rb +5 -28
  264. data/lib/rubygems/installer.rb +12 -7
  265. data/lib/rubygems/installer_test_case.rb +6 -3
  266. data/lib/rubygems/package/old.rb +1 -1
  267. data/lib/rubygems/request.rb +1 -1
  268. data/lib/rubygems/request_set.rb +20 -3
  269. data/lib/rubygems/request_set/gem_dependency_api.rb +3 -3
  270. data/lib/rubygems/requirement.rb +5 -1
  271. data/lib/rubygems/resolver.rb +24 -3
  272. data/lib/rubygems/resolver/installer_set.rb +4 -6
  273. data/lib/rubygems/safe_yaml.rb +4 -1
  274. data/lib/rubygems/security.rb +10 -3
  275. data/lib/rubygems/security_option.rb +43 -0
  276. data/lib/rubygems/server.rb +4 -12
  277. data/lib/rubygems/source.rb +7 -4
  278. data/lib/rubygems/source/git.rb +2 -1
  279. data/lib/rubygems/source/local.rb +38 -35
  280. data/lib/rubygems/source/lock.rb +4 -1
  281. data/lib/rubygems/source_local.rb +3 -1
  282. data/lib/rubygems/source_specific_file.rb +3 -2
  283. data/lib/rubygems/spec_fetcher.rb +7 -3
  284. data/lib/rubygems/specification.rb +281 -231
  285. data/lib/rubygems/stub_specification.rb +2 -3
  286. data/lib/rubygems/test_case.rb +14 -1
  287. data/lib/rubygems/user_interaction.rb +15 -13
  288. data/lib/rubygems/util.rb +6 -17
  289. data/lib/rubygems/version.rb +17 -3
  290. data/lib/rubygems/version_option.rb +6 -1
  291. data/setup.rb +1 -1
  292. data/test/rubygems/private3072_key.pem +40 -0
  293. data/test/rubygems/public3072_cert.pem +25 -0
  294. data/test/rubygems/test_config.rb +1 -1
  295. data/test/rubygems/test_gem.rb +72 -14
  296. data/test/rubygems/test_gem_bundler_version_finder.rb +125 -0
  297. data/test/rubygems/test_gem_command.rb +1 -1
  298. data/test/rubygems/test_gem_commands_build_command.rb +27 -1
  299. data/test/rubygems/test_gem_commands_cert_command.rb +64 -0
  300. data/test/rubygems/test_gem_commands_install_command.rb +35 -2
  301. data/test/rubygems/test_gem_commands_pristine_command.rb +1 -1
  302. data/test/rubygems/test_gem_commands_query_command.rb +19 -0
  303. data/test/rubygems/test_gem_commands_setup_command.rb +17 -0
  304. data/test/rubygems/test_gem_commands_signin_command.rb +95 -0
  305. data/test/rubygems/test_gem_commands_signout_command.rb +37 -0
  306. data/test/rubygems/test_gem_commands_sources_command.rb +1 -1
  307. data/test/rubygems/test_gem_commands_uninstall_command.rb +12 -0
  308. data/test/rubygems/test_gem_commands_update_command.rb +1 -1
  309. data/test/rubygems/test_gem_commands_which_command.rb +3 -3
  310. data/test/rubygems/test_gem_dependency.rb +28 -0
  311. data/test/rubygems/test_gem_ext_builder.rb +2 -2
  312. data/test/rubygems/test_gem_ext_rake_builder.rb +2 -2
  313. data/test/rubygems/test_gem_install_update_options.rb +2 -1
  314. data/test/rubygems/test_gem_installer.rb +29 -27
  315. data/test/rubygems/test_gem_package.rb +5 -5
  316. data/test/rubygems/test_gem_remote_fetcher.rb +2 -2
  317. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -3
  318. data/test/rubygems/test_gem_requirement.rb +6 -0
  319. data/test/rubygems/test_gem_resolver.rb +26 -0
  320. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  321. data/test/rubygems/test_gem_security.rb +5 -0
  322. data/test/rubygems/test_gem_security_policy.rb +24 -24
  323. data/test/rubygems/test_gem_security_signer.rb +6 -6
  324. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  325. data/test/rubygems/test_gem_server.rb +18 -1
  326. data/test/rubygems/test_gem_source.rb +9 -0
  327. data/test/rubygems/test_gem_spec_fetcher.rb +20 -0
  328. data/test/rubygems/test_gem_specification.rb +85 -10
  329. data/test/rubygems/test_gem_stream_ui.rb +6 -6
  330. data/test/rubygems/test_gem_stub_specification.rb +19 -1
  331. data/test/rubygems/test_gem_util.rb +1 -0
  332. data/test/rubygems/test_gem_version.rb +28 -7
  333. data/test/rubygems/test_gem_version_option.rb +15 -0
  334. data/test/rubygems/test_kernel.rb +30 -0
  335. data/test/rubygems/test_require.rb +44 -0
  336. metadata +47 -46
  337. data/README.rdoc +0 -54
  338. data/bundler/DEVELOPMENT.md +0 -150
  339. data/bundler/ISSUES.md +0 -117
  340. data/bundler/lib/bundler/postit_trampoline.rb +0 -73
  341. data/bundler/lib/bundler/vendor/postit/lib/postit.rb +0 -15
  342. data/bundler/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
  343. data/bundler/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
  344. data/bundler/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
  345. data/bundler/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
  346. data/bundler/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
  347. data/bundler/man/index.txt +0 -8
@@ -71,7 +71,7 @@ class Gem::BasicSpecification
71
71
  elsif missing_extensions? then
72
72
  @ignored = true
73
73
 
74
- warn "Ignoring #{full_name} because its extensions are not built. " +
74
+ warn "Ignoring #{full_name} because its extensions are not built. " +
75
75
  "Try: gem pristine #{name} --version #{version}"
76
76
  return false
77
77
  end
@@ -275,10 +275,14 @@ class Gem::BasicSpecification
275
275
  # for this spec.
276
276
 
277
277
  def lib_dirs_glob
278
- dirs = if self.require_paths.size > 1 then
279
- "{#{self.require_paths.join(',')}}"
278
+ dirs = if self.raw_require_paths
279
+ if self.raw_require_paths.size > 1 then
280
+ "{#{self.raw_require_paths.join(',')}}"
281
+ else
282
+ self.raw_require_paths.first
283
+ end
280
284
  else
281
- self.require_paths.first
285
+ "lib" # default value for require_paths for bundler/inline
282
286
  end
283
287
 
284
288
  "#{self.full_gem_path}/#{dirs}".dup.untaint
@@ -0,0 +1,112 @@
1
+ module Gem::BundlerVersionFinder
2
+ @without_filtering = false
3
+
4
+ def self.without_filtering
5
+ without_filtering, @without_filtering = true, @without_filtering
6
+ yield
7
+ ensure
8
+ @without_filtering = without_filtering
9
+ end
10
+
11
+ def self.bundler_version
12
+ version, _ = bundler_version_with_reason
13
+
14
+ return unless version
15
+
16
+ Gem::Version.new(version)
17
+ end
18
+
19
+ def self.bundler_version_with_reason
20
+ return if @without_filtering
21
+
22
+ if v = ENV["BUNDLER_VERSION"]
23
+ return [v, "`$BUNDLER_VERSION`"]
24
+ end
25
+ if v = bundle_update_bundler_version
26
+ return if v == true
27
+ return [v, "`bundle update --bundler`"]
28
+ end
29
+ v, lockfile = lockfile_version
30
+ if v
31
+ return [v, "your #{lockfile}"]
32
+ end
33
+ end
34
+
35
+ def self.missing_version_message
36
+ return unless vr = bundler_version_with_reason
37
+ <<-EOS
38
+ Could not find 'bundler' (#{vr.first}) required by #{vr.last}.
39
+ To update to the lastest version installed on your system, run `bundle update --bundler`.
40
+ To install the missing version, run `gem install bundler:#{vr.first}`
41
+ EOS
42
+ end
43
+
44
+ def self.compatible?(spec)
45
+ return true unless spec.name == "bundler".freeze
46
+ return true unless bundler_version = self.bundler_version
47
+ if bundler_version.segments.first >= 2
48
+ spec.version == bundler_version
49
+ else # 1.x
50
+ spec.version.segments.first < 2
51
+ end
52
+ end
53
+
54
+ def self.filter!(specs)
55
+ return unless bundler_version = self.bundler_version
56
+ if bundler_version.segments.first >= 2
57
+ specs.reject! { |spec| spec.version != bundler_version }
58
+ else # 1.x
59
+ specs.reject! { |spec| spec.version.segments.first >= 2}
60
+ end
61
+ end
62
+
63
+ def self.bundle_update_bundler_version
64
+ return unless File.basename($0) == "bundle".freeze
65
+ return unless "update".start_with?(ARGV.first || " ")
66
+ bundler_version = nil
67
+ update_index = nil
68
+ ARGV.each_with_index do |a, i|
69
+ if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
70
+ bundler_version = a
71
+ end
72
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
73
+ bundler_version = $1 || true
74
+ update_index = i
75
+ end
76
+ bundler_version
77
+ end
78
+ private_class_method :bundle_update_bundler_version
79
+
80
+ def self.lockfile_version
81
+ return unless lockfile = lockfile_contents
82
+ lockfile, contents = lockfile
83
+ lockfile ||= "lockfile"
84
+ regexp = /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
85
+ return unless contents =~ regexp
86
+ [$1, lockfile]
87
+ end
88
+ private_class_method :lockfile_version
89
+
90
+ def self.lockfile_contents
91
+ gemfile = ENV["BUNDLE_GEMFILE"]
92
+ gemfile = nil if gemfile && gemfile.empty?
93
+ Gem::Util.traverse_parents Dir.pwd do |directory|
94
+ next unless gemfile = Gem::GEM_DEP_FILES.find { |f| File.file?(f.untaint) }
95
+
96
+ gemfile = File.join directory, gemfile
97
+ break
98
+ end unless gemfile
99
+
100
+ return unless gemfile
101
+
102
+ lockfile = case gemfile
103
+ when "gems.rb" then "gems.locked"
104
+ else "#{gemfile}.lock"
105
+ end.untaint
106
+
107
+ return unless File.file?(lockfile)
108
+
109
+ [lockfile, File.read(lockfile)]
110
+ end
111
+ private_class_method :lockfile_contents
112
+ end
@@ -527,7 +527,7 @@ class Gem::Command
527
527
  end
528
528
 
529
529
  add_common_option("--silent",
530
- "Silence rubygems output") do |value, options|
530
+ "Silence RubyGems output") do |value, options|
531
531
  options[:silent] = true
532
532
  end
533
533
 
@@ -58,6 +58,8 @@ class Gem::CommandManager
58
58
  :rdoc,
59
59
  :search,
60
60
  :server,
61
+ :signin,
62
+ :signout,
61
63
  :sources,
62
64
  :specification,
63
65
  :stale,
@@ -161,7 +163,7 @@ class Gem::CommandManager
161
163
  say Gem::VERSION
162
164
  terminate_interaction 0
163
165
  when /^-/ then
164
- alert_error "Invalid option: #{args.first}. See 'gem --help'."
166
+ alert_error "Invalid option: #{args.first}. See 'gem --help'."
165
167
  terminate_interaction 1
166
168
  else
167
169
  cmd_name = args.shift.downcase
@@ -84,6 +84,11 @@ class Gem::Commands::CertCommand < Gem::Command
84
84
 
85
85
  options[:sign] << cert_file
86
86
  end
87
+
88
+ add_option('-d', '--days NUMBER_OF_DAYS',
89
+ 'Days before the certificate expires') do |days, options|
90
+ options[:expiration_length_days] = days.to_i
91
+ end
87
92
  end
88
93
 
89
94
  def add_certificate certificate # :nodoc:
@@ -105,16 +110,20 @@ class Gem::Commands::CertCommand < Gem::Command
105
110
  list_certificates_matching filter
106
111
  end
107
112
 
108
- options[:build].each do |name|
109
- build name
113
+ options[:build].each do |email|
114
+ build email
110
115
  end
111
116
 
112
117
  sign_certificates unless options[:sign].empty?
113
118
  end
114
119
 
115
- def build name
120
+ def build email
121
+ if !valid_email?(email)
122
+ raise Gem::CommandLineError, "Invalid email address #{email}"
123
+ end
124
+
116
125
  key, key_path = build_key
117
- cert_path = build_cert name, key
126
+ cert_path = build_cert email, key
118
127
 
119
128
  say "Certificate: #{cert_path}"
120
129
 
@@ -124,8 +133,16 @@ class Gem::Commands::CertCommand < Gem::Command
124
133
  end
125
134
  end
126
135
 
127
- def build_cert name, key # :nodoc:
128
- cert = Gem::Security.create_cert_email name, key
136
+ def build_cert email, key # :nodoc:
137
+ expiration_length_days = options[:expiration_length_days]
138
+ age =
139
+ if expiration_length_days.nil? || expiration_length_days == 0
140
+ Gem::Security::ONE_YEAR
141
+ else
142
+ Gem::Security::ONE_DAY * expiration_length_days
143
+ end
144
+
145
+ cert = Gem::Security.create_cert_email email, key, age
129
146
  Gem::Security.write cert, "gem-public_cert.pem"
130
147
  end
131
148
 
@@ -273,5 +290,13 @@ For further reading on signing gems see `ri Gem::Security`.
273
290
  end
274
291
  end
275
292
 
293
+ private
294
+
295
+ def valid_email? email
296
+ # It's simple, but is all we need
297
+ email =~ /\A.+@.+\z/
298
+ end
299
+
300
+
276
301
  end if defined?(OpenSSL::SSL)
277
302
 
@@ -66,7 +66,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
66
66
  clean_gems
67
67
  end
68
68
 
69
- say "Clean Up Complete"
69
+ say "Clean up complete"
70
70
 
71
71
  verbose do
72
72
  skipped = @default_gems.map { |spec| spec.full_name }
@@ -367,7 +367,7 @@ platform.
367
367
  elsif possibilities.size > 1 then
368
368
  alert_warning "Ambiguous command #{command_name} (#{possibilities.join(', ')})"
369
369
  else
370
- alert_warning "Unknown command #{command_name}. Try: gem help commands"
370
+ alert_warning "Unknown command #{command_name}. Try: gem help commands"
371
371
  end
372
372
  end
373
373
 
@@ -40,7 +40,9 @@ permission to.
40
40
  options[:remove] << value
41
41
  end
42
42
 
43
- add_option '-h', '--host HOST', 'Use another gemcutter-compatible host' do |value, options|
43
+ add_option '-h', '--host HOST',
44
+ 'Use another gemcutter-compatible host',
45
+ ' (e.g. https://rubygems.org)' do |value, options|
44
46
  options[:host] = value
45
47
  end
46
48
  end
@@ -125,14 +125,14 @@ extensions will be restored.
125
125
  next
126
126
  end
127
127
 
128
- unless spec.extensions.empty? or options[:extensions] then
128
+ unless spec.extensions.empty? or options[:extensions] or options[:only_executables] then
129
129
  say "Skipped #{spec.full_name}, it needs to compile an extension"
130
130
  next
131
131
  end
132
132
 
133
133
  gem = spec.cache_file
134
134
 
135
- unless File.exist? gem then
135
+ unless File.exist? gem or options[:only_executables] then
136
136
  require 'rubygems/remote_fetcher'
137
137
 
138
138
  say "Cached gem for #{spec.full_name} not found, attempting to fetch..."
@@ -157,16 +157,19 @@ extensions will be restored.
157
157
  install_defaults.to_s['--env-shebang']
158
158
  end
159
159
 
160
- installer = Gem::Installer.at(gem,
161
- :wrappers => true,
162
- :force => true,
163
- :install_dir => spec.base_dir,
164
- :env_shebang => env_shebang,
165
- :build_args => spec.build_args)
160
+ installer_options = {
161
+ :wrappers => true,
162
+ :force => true,
163
+ :install_dir => spec.base_dir,
164
+ :env_shebang => env_shebang,
165
+ :build_args => spec.build_args,
166
+ }
166
167
 
167
168
  if options[:only_executables] then
169
+ installer = Gem::Installer.for_spec(spec, installer_options)
168
170
  installer.generate_bin
169
171
  else
172
+ installer = Gem::Installer.at(gem, installer_options)
170
173
  installer.install
171
174
  end
172
175
 
@@ -33,7 +33,8 @@ command. For further discussion see the help for the yank command.
33
33
  add_key_option
34
34
 
35
35
  add_option('--host HOST',
36
- 'Push to another gemcutter-compatible host') do |value, options|
36
+ 'Push to another gemcutter-compatible host',
37
+ ' (e.g. https://rubygems.org)') do |value, options|
37
38
  options[:host] = value
38
39
  end
39
40
 
@@ -255,22 +255,21 @@ is too hard to use.
255
255
  name_tuples.map { |n| n.version }.uniq
256
256
  else
257
257
  platforms.sort.reverse.map do |version, pls|
258
- if pls == [Gem::Platform::RUBY] then
259
- if options[:domain] == :remote || specs.all? { |spec| spec.is_a? Gem::Source }
260
- version
261
- else
262
- spec = specs.select { |s| s.version == version }
263
- if spec.first.default_gem?
264
- "default: #{version}"
265
- else
266
- version
267
- end
258
+ out = version.to_s
259
+
260
+ if options[:domain] == :local
261
+ default = specs.any? do |s|
262
+ !s.is_a?(Gem::Source) && s.version == version && s.default_gem?
268
263
  end
269
- else
270
- ruby = pls.delete Gem::Platform::RUBY
271
- platform_list = [ruby, *pls.sort].compact
272
- "#{version} #{platform_list.join ' '}"
264
+ out = "default: #{out}" if default
265
+ end
266
+
267
+ if pls != [Gem::Platform::RUBY] then
268
+ platform_list = [pls.delete(Gem::Platform::RUBY), *pls.sort].compact
269
+ out = platform_list.unshift(out).join(' ')
273
270
  end
271
+
272
+ out
274
273
  end
275
274
  end
276
275
 
@@ -15,10 +15,11 @@ class Gem::Commands::SetupCommand < Gem::Command
15
15
  super 'setup', 'Install RubyGems',
16
16
  :format_executable => true, :document => %w[ri],
17
17
  :site_or_vendor => 'sitelibdir',
18
- :destdir => '', :prefix => '', :previous_version => ''
18
+ :destdir => '', :prefix => '', :previous_version => '',
19
+ :regenerate_binstubs => true
19
20
 
20
21
  add_option '--previous-version=VERSION',
21
- 'Previous version of rubygems',
22
+ 'Previous version of RubyGems',
22
23
  'Used for changelog processing' do |version, options|
23
24
  options[:previous_version] = version
24
25
  end
@@ -42,7 +43,7 @@ class Gem::Commands::SetupCommand < Gem::Command
42
43
 
43
44
  add_option '--[no-]format-executable',
44
45
  'Makes `gem` match ruby',
45
- 'If ruby is ruby18, gem will be gem18' do |value, options|
46
+ 'If Ruby is ruby18, gem will be gem18' do |value, options|
46
47
  options[:format_executable] = value
47
48
  end
48
49
 
@@ -79,6 +80,15 @@ class Gem::Commands::SetupCommand < Gem::Command
79
80
  options[:document].uniq!
80
81
  end
81
82
 
83
+ add_option '--[no-]regenerate-binstubs',
84
+ 'Regenerate gem binstubs' do |value, options|
85
+ if value then
86
+ options[:regenerate_binstubs] = true
87
+ else
88
+ options.delete(:regenerate_binstubs)
89
+ end
90
+ end
91
+
82
92
  @verbose = nil
83
93
  end
84
94
 
@@ -92,7 +102,7 @@ class Gem::Commands::SetupCommand < Gem::Command
92
102
  end
93
103
 
94
104
  def defaults_str # :nodoc:
95
- "--format-executable --document ri"
105
+ "--format-executable --document ri --regenerate-binstubs"
96
106
  end
97
107
 
98
108
  def description # :nodoc:
@@ -142,8 +152,12 @@ By default, this RubyGems will install gem as:
142
152
 
143
153
  remove_old_lib_files lib_dir
144
154
 
155
+ install_default_bundler_gem
156
+
145
157
  say "RubyGems #{Gem::VERSION} installed"
146
158
 
159
+ regenerate_binstubs
160
+
147
161
  uninstall_old_gemcutter
148
162
 
149
163
  documentation_success = install_rdoc
@@ -190,7 +204,7 @@ By default, this RubyGems will install gem as:
190
204
 
191
205
  if options[:document].include? 'ri' then
192
206
  say "Ruby Interactive (ri) documentation was installed. ri is kind of like man "
193
- say "pages for ruby libraries. You may access it like this:"
207
+ say "pages for Ruby libraries. You may access it like this:"
194
208
  say " ri Classname"
195
209
  say " ri Classname.class_method"
196
210
  say " ri Classname#instance_method"
@@ -202,59 +216,64 @@ By default, this RubyGems will install gem as:
202
216
  end
203
217
  end
204
218
 
205
- def install_executables(bin_dir)
206
- say "Installing gem executable" if @verbose
207
219
 
220
+ def install_executables(bin_dir)
208
221
  @bin_file_names = []
209
222
 
210
- Dir.chdir 'bin' do
211
- bin_files = Dir['*']
223
+ executables = { 'gem' => 'bin' }
224
+ executables['bundler'] = 'bundler/exe' if Gem::USE_BUNDLER_FOR_GEMDEPS
225
+ executables.each do |tool, path|
226
+ say "Installing #{tool} executable" if @verbose
212
227
 
213
- bin_files.delete 'update_rubygems'
228
+ Dir.chdir path do
229
+ bin_files = Dir['*']
214
230
 
215
- bin_files.each do |bin_file|
216
- bin_file_formatted = if options[:format_executable] then
217
- Gem.default_exec_format % bin_file
218
- else
219
- bin_file
220
- end
231
+ bin_files -= %w[update_rubygems bundler bundle_ruby]
221
232
 
222
- dest_file = File.join bin_dir, bin_file_formatted
223
- bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
233
+ bin_files.each do |bin_file|
234
+ bin_file_formatted = if options[:format_executable] then
235
+ Gem.default_exec_format % bin_file
236
+ else
237
+ bin_file
238
+ end
224
239
 
225
- begin
226
- bin = File.readlines bin_file
227
- bin[0] = "#!#{Gem.ruby}\n"
240
+ dest_file = File.join bin_dir, bin_file_formatted
241
+ bin_tmp_file = File.join Dir.tmpdir, "#{bin_file}.#{$$}"
228
242
 
229
- File.open bin_tmp_file, 'w' do |fp|
230
- fp.puts bin.join
231
- end
232
-
233
- install bin_tmp_file, dest_file, :mode => 0755
234
- @bin_file_names << dest_file
235
- ensure
236
- rm bin_tmp_file
237
- end
238
-
239
- next unless Gem.win_platform?
243
+ begin
244
+ bin = File.readlines bin_file
245
+ bin[0] = "#!#{Gem.ruby}\n"
240
246
 
241
- begin
242
- bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
247
+ File.open bin_tmp_file, 'w' do |fp|
248
+ fp.puts bin.join
249
+ end
243
250
 
244
- File.open bin_cmd_file, 'w' do |file|
245
- file.puts <<-TEXT
246
- @ECHO OFF
247
- IF NOT "%~f0" == "~f0" GOTO :WinNT
248
- @"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
249
- GOTO :EOF
250
- :WinNT
251
- @"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
252
- TEXT
251
+ install bin_tmp_file, dest_file, :mode => 0755
252
+ @bin_file_names << dest_file
253
+ ensure
254
+ rm bin_tmp_file
253
255
  end
254
256
 
255
- install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
256
- ensure
257
- rm bin_cmd_file
257
+ next unless Gem.win_platform?
258
+
259
+ begin
260
+ bin_cmd_file = File.join Dir.tmpdir, "#{bin_file}.bat"
261
+
262
+ File.open bin_cmd_file, 'w' do |file|
263
+ file.puts <<-TEXT
264
+ @ECHO OFF
265
+ IF NOT "%~f0" == "~f0" GOTO :WinNT
266
+ @"#{File.basename(Gem.ruby).chomp('"')}" "#{dest_file}" %1 %2 %3 %4 %5 %6 %7 %8 %9
267
+ GOTO :EOF
268
+ :WinNT
269
+ @"#{File.basename(Gem.ruby).chomp('"')}" "%~dpn0" %*
270
+ TEXT
271
+ end
272
+
273
+ install bin_cmd_file, "#{dest_file}.bat", :mode => 0755
274
+ ensure
275
+ rm bin_cmd_file
276
+ end
258
277
  end
259
278
  end
260
279
  end
@@ -269,18 +288,22 @@ TEXT
269
288
  end
270
289
 
271
290
  def install_lib(lib_dir)
272
- say "Installing RubyGems" if @verbose
291
+ libs = { 'RubyGems' => 'lib' }
292
+ libs['Bundler'] = 'bundler/lib' if Gem::USE_BUNDLER_FOR_GEMDEPS
293
+ libs.each do |tool, path|
294
+ say "Installing #{tool}" if @verbose
273
295
 
274
- lib_files = rb_files_in 'lib'
275
- pem_files = pem_files_in 'lib'
296
+ lib_files = rb_files_in path
297
+ pem_files = pem_files_in path
276
298
 
277
- Dir.chdir 'lib' do
278
- lib_files.each do |lib_file|
279
- install_file lib_file, lib_dir
280
- end
299
+ Dir.chdir path do
300
+ lib_files.each do |lib_file|
301
+ install_file lib_file, lib_dir
302
+ end
281
303
 
282
- pem_files.each do |pem_file|
283
- install_file pem_file, lib_dir
304
+ pem_files.each do |pem_file|
305
+ install_file pem_file, lib_dir
306
+ end
284
307
  end
285
308
  end
286
309
  end
@@ -326,6 +349,29 @@ TEXT
326
349
  return false
327
350
  end
328
351
 
352
+ def install_default_bundler_gem
353
+ return unless Gem::USE_BUNDLER_FOR_GEMDEPS
354
+
355
+ bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
356
+ bundler_spec.files = Dir["bundler/{*.md,{lib,exe,man}/**/*}"]
357
+ bundler_spec.executables -= %w[bundler bundle_ruby]
358
+ Dir.entries(Gem::Specification.default_specifications_dir).
359
+ select {|gs| gs.start_with?("bundler-") }.
360
+ each {|gs| File.delete(File.join(Gem::Specification.default_specifications_dir, gs)) }
361
+
362
+ default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
363
+ Gem.write_binary(default_spec_path, bundler_spec.to_ruby)
364
+
365
+ bundler_spec = Gem::Specification.load(default_spec_path)
366
+
367
+ Dir.entries(bundler_spec.gems_dir).
368
+ select {|default_gem| default_gem.start_with?("bundler-") }.
369
+ each {|default_gem| rm_r File.join(bundler_spec.gems_dir, default_gem) }
370
+
371
+ mkdir_p bundler_spec.bin_dir
372
+ bundler_spec.executables.each {|e| cp File.join("bundler", bundler_spec.bindir, e), File.join(bundler_spec.bin_dir, e) }
373
+ end
374
+
329
375
  def make_destination_dirs(install_destdir)
330
376
  lib_dir, bin_dir = Gem.default_rubygems_dirs
331
377
 
@@ -397,7 +443,7 @@ TEXT
397
443
  old_bin_path = File.join bin_dir, old_bin_file
398
444
  next unless File.exist? old_bin_path
399
445
 
400
- deprecation_message = "`#{old_bin_file}` has been deprecated. Use `#{new_name}` instead."
446
+ deprecation_message = "`#{old_bin_file}` has been deprecated. Use `#{new_name}` instead."
401
447
 
402
448
  File.open old_bin_path, 'w' do |fp|
403
449
  fp.write <<-EOF
@@ -416,23 +462,26 @@ abort "#{deprecation_message}"
416
462
  end
417
463
 
418
464
  def remove_old_lib_files lib_dir
419
- rubygems_dir = File.join lib_dir, 'rubygems'
420
- lib_files = rb_files_in 'lib/rubygems'
465
+ lib_dirs = { File.join(lib_dir, 'rubygems') => 'lib/rubygems' }
466
+ lib_dirs[File.join(lib_dir, 'bundler')] = 'bundler/lib/bundler' if Gem::USE_BUNDLER_FOR_GEMDEPS
467
+ lib_dirs.each do |old_lib_dir, new_lib_dir|
468
+ lib_files = rb_files_in(new_lib_dir)
421
469
 
422
- old_lib_files = rb_files_in rubygems_dir
470
+ old_lib_files = rb_files_in(old_lib_dir)
423
471
 
424
- to_remove = old_lib_files - lib_files
472
+ to_remove = old_lib_files - lib_files
425
473
 
426
- to_remove.delete_if do |file|
427
- file.start_with? 'defaults'
428
- end
474
+ to_remove.delete_if do |file|
475
+ file.start_with? 'defaults'
476
+ end
429
477
 
430
- Dir.chdir rubygems_dir do
431
- to_remove.each do |file|
432
- FileUtils.rm_f file
478
+ Dir.chdir old_lib_dir do
479
+ to_remove.each do |file|
480
+ FileUtils.rm_f file
433
481
 
434
- warn "unable to remove old file #{file} please remove it by hand" if
435
- File.exist? file
482
+ warn "unable to remove old file #{file} please remove it by hand" if
483
+ File.exist? file
484
+ end
436
485
  end
437
486
  end
438
487
  end
@@ -480,5 +529,11 @@ abort "#{deprecation_message}"
480
529
  rescue Gem::InstallError
481
530
  end
482
531
 
483
- end
532
+ def regenerate_binstubs
533
+ require "rubygems/commands/pristine_command"
534
+ say "Regenerating binstubs"
535
+ command = Gem::Commands::PristineCommand.new
536
+ command.invoke(*%w[--all --only-executables --silent])
537
+ end
484
538
 
539
+ end