rubygems-update 2.6.11 → 2.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (405) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -22
  3. data/CONTRIBUTING.rdoc +53 -54
  4. data/History.txt +405 -0
  5. data/Manifest.txt +46 -15
  6. data/POLICIES.rdoc +3 -3
  7. data/README.md +72 -0
  8. data/Rakefile +55 -12
  9. data/appveyor.yml +29 -1
  10. data/bin/gem +1 -1
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +412 -9
  13. data/bundler/CODE_OF_CONDUCT.md +1 -1
  14. data/bundler/CONTRIBUTING.md +10 -29
  15. data/bundler/README.md +27 -11
  16. data/bundler/bundler.gemspec +58 -0
  17. data/bundler/exe/bundle +5 -7
  18. data/bundler/exe/bundle_ruby +4 -3
  19. data/bundler/lib/bundler.rb +103 -79
  20. data/bundler/lib/bundler/build_metadata.rb +53 -0
  21. data/bundler/lib/bundler/capistrano.rb +5 -0
  22. data/bundler/lib/bundler/cli.rb +231 -66
  23. data/bundler/lib/bundler/cli/add.rb +25 -0
  24. data/bundler/lib/bundler/cli/binstubs.rb +9 -7
  25. data/bundler/lib/bundler/cli/cache.rb +5 -4
  26. data/bundler/lib/bundler/cli/check.rb +3 -5
  27. data/bundler/lib/bundler/cli/clean.rb +5 -6
  28. data/bundler/lib/bundler/cli/common.rb +18 -2
  29. data/bundler/lib/bundler/cli/config.rb +26 -7
  30. data/bundler/lib/bundler/cli/console.rb +2 -1
  31. data/bundler/lib/bundler/cli/doctor.rb +1 -0
  32. data/bundler/lib/bundler/cli/exec.rb +6 -5
  33. data/bundler/lib/bundler/cli/gem.rb +42 -18
  34. data/bundler/lib/bundler/cli/info.rb +50 -0
  35. data/bundler/lib/bundler/cli/init.rb +21 -7
  36. data/bundler/lib/bundler/cli/inject.rb +13 -4
  37. data/bundler/lib/bundler/cli/install.rb +61 -77
  38. data/bundler/lib/bundler/cli/issue.rb +40 -0
  39. data/bundler/lib/bundler/cli/list.rb +22 -0
  40. data/bundler/lib/bundler/cli/lock.rb +4 -2
  41. data/bundler/lib/bundler/cli/open.rb +2 -2
  42. data/bundler/lib/bundler/cli/outdated.rb +30 -28
  43. data/bundler/lib/bundler/cli/package.rb +9 -6
  44. data/bundler/lib/bundler/cli/platform.rb +1 -0
  45. data/bundler/lib/bundler/cli/plugin.rb +1 -0
  46. data/bundler/lib/bundler/cli/pristine.rb +43 -0
  47. data/bundler/lib/bundler/cli/show.rb +1 -1
  48. data/bundler/lib/bundler/cli/update.rb +36 -13
  49. data/bundler/lib/bundler/cli/viz.rb +5 -1
  50. data/bundler/lib/bundler/compact_index_client.rb +1 -0
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -2
  52. data/bundler/lib/bundler/compact_index_client/updater.rb +36 -8
  53. data/bundler/lib/bundler/compatibility_guard.rb +14 -0
  54. data/bundler/lib/bundler/constants.rb +1 -0
  55. data/bundler/lib/bundler/current_ruby.rb +16 -8
  56. data/bundler/lib/bundler/definition.rb +252 -170
  57. data/bundler/lib/bundler/dep_proxy.rb +3 -1
  58. data/bundler/lib/bundler/dependency.rb +7 -7
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/deprecate.rb +15 -3
  61. data/bundler/lib/bundler/dsl.rb +103 -62
  62. data/bundler/lib/bundler/endpoint_specification.rb +13 -3
  63. data/bundler/lib/bundler/env.rb +101 -38
  64. data/bundler/lib/bundler/environment_preserver.rb +27 -6
  65. data/bundler/lib/bundler/errors.rb +3 -1
  66. data/bundler/lib/bundler/feature_flag.rb +39 -4
  67. data/bundler/lib/bundler/fetcher.rb +18 -11
  68. data/bundler/lib/bundler/fetcher/base.rb +1 -0
  69. data/bundler/lib/bundler/fetcher/compact_index.rb +2 -12
  70. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  71. data/bundler/lib/bundler/fetcher/downloader.rb +14 -7
  72. data/bundler/lib/bundler/fetcher/index.rb +3 -2
  73. data/bundler/lib/bundler/friendly_errors.rb +7 -2
  74. data/bundler/lib/bundler/gem_helper.rb +24 -10
  75. data/bundler/lib/bundler/gem_helpers.rb +1 -0
  76. data/bundler/lib/bundler/gem_remote_fetcher.rb +1 -0
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -0
  78. data/bundler/lib/bundler/gem_version_promoter.rb +13 -0
  79. data/bundler/lib/bundler/gemdeps.rb +1 -0
  80. data/bundler/lib/bundler/graph.rb +1 -0
  81. data/bundler/lib/bundler/index.rb +19 -11
  82. data/bundler/lib/bundler/injector.rb +54 -30
  83. data/bundler/lib/bundler/inline.rb +10 -10
  84. data/bundler/lib/bundler/installer.rb +114 -52
  85. data/bundler/lib/bundler/installer/gem_installer.rb +14 -4
  86. data/bundler/lib/bundler/installer/parallel_installer.rb +91 -42
  87. data/bundler/lib/bundler/installer/standalone.rb +1 -0
  88. data/bundler/lib/bundler/lazy_specification.rb +17 -4
  89. data/bundler/lib/bundler/lockfile_generator.rb +95 -0
  90. data/bundler/lib/bundler/lockfile_parser.rb +49 -35
  91. data/bundler/lib/bundler/match_platform.rb +1 -0
  92. data/bundler/lib/bundler/mirror.rb +10 -5
  93. data/bundler/lib/bundler/plugin.rb +8 -3
  94. data/bundler/lib/bundler/plugin/api/source.rb +16 -3
  95. data/bundler/lib/bundler/plugin/index.rb +9 -2
  96. data/bundler/lib/bundler/plugin/installer.rb +7 -6
  97. data/bundler/lib/bundler/plugin/source_list.rb +7 -8
  98. data/bundler/lib/bundler/process_lock.rb +24 -0
  99. data/bundler/lib/bundler/psyched_yaml.rb +10 -0
  100. data/bundler/lib/bundler/remote_specification.rb +25 -1
  101. data/bundler/lib/bundler/resolver.rb +176 -193
  102. data/bundler/lib/bundler/resolver/spec_group.rb +106 -0
  103. data/bundler/lib/bundler/retry.rb +1 -0
  104. data/bundler/lib/bundler/ruby_dsl.rb +1 -0
  105. data/bundler/lib/bundler/ruby_version.rb +7 -2
  106. data/bundler/lib/bundler/rubygems_ext.rb +18 -8
  107. data/bundler/lib/bundler/rubygems_gem_installer.rb +25 -2
  108. data/bundler/lib/bundler/rubygems_integration.rb +166 -69
  109. data/bundler/lib/bundler/runtime.rb +29 -19
  110. data/bundler/lib/bundler/settings.rb +202 -87
  111. data/bundler/lib/bundler/settings/validator.rb +79 -0
  112. data/bundler/lib/bundler/setup.rb +4 -7
  113. data/bundler/lib/bundler/shared_helpers.rb +143 -27
  114. data/bundler/lib/bundler/similarity_detector.rb +1 -0
  115. data/bundler/lib/bundler/source.rb +53 -1
  116. data/bundler/lib/bundler/source/gemspec.rb +1 -0
  117. data/bundler/lib/bundler/source/git.rb +51 -22
  118. data/bundler/lib/bundler/source/git/git_proxy.rb +23 -13
  119. data/bundler/lib/bundler/source/metadata.rb +63 -0
  120. data/bundler/lib/bundler/source/path.rb +38 -17
  121. data/bundler/lib/bundler/source/path/installer.rb +4 -2
  122. data/bundler/lib/bundler/source/rubygems.rb +161 -82
  123. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -2
  124. data/bundler/lib/bundler/source_list.rb +75 -15
  125. data/bundler/lib/bundler/spec_set.rb +37 -21
  126. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  127. data/bundler/lib/bundler/stub_specification.rb +86 -2
  128. data/bundler/lib/bundler/templates/.document +1 -0
  129. data/bundler/lib/bundler/templates/Executable +13 -1
  130. data/bundler/lib/bundler/templates/Executable.bundler +105 -0
  131. data/bundler/lib/bundler/templates/Executable.standalone +5 -5
  132. data/bundler/lib/bundler/templates/Gemfile +3 -0
  133. data/bundler/lib/bundler/templates/gems.rb +8 -0
  134. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +4 -2
  135. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  136. data/bundler/lib/bundler/templates/newgem/README.md.tt +14 -8
  137. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +5 -5
  138. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  139. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  140. data/bundler/lib/bundler/templates/newgem/gitignore.tt +0 -1
  141. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +6 -6
  142. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
  143. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +21 -12
  144. data/bundler/lib/bundler/templates/newgem/rspec.tt +1 -0
  145. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
  146. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +3 -0
  147. data/bundler/lib/bundler/templates/newgem/test/newgem_test.rb.tt +1 -1
  148. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +3 -3
  149. data/bundler/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
  150. data/bundler/lib/bundler/ui.rb +1 -0
  151. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -0
  152. data/bundler/lib/bundler/ui/shell.rb +26 -10
  153. data/bundler/lib/bundler/ui/silent.rb +12 -1
  154. data/bundler/lib/bundler/uri_credentials_filter.rb +1 -0
  155. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  156. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  157. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  158. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  159. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  160. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +16 -5
  161. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  162. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +10 -2
  163. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
  164. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
  165. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
  166. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
  167. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
  168. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
  169. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +16 -5
  170. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
  171. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  172. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  173. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  174. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +501 -138
  175. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  176. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  177. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +3 -1
  178. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +46 -21
  179. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +24 -22
  180. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
  181. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  182. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +2 -2
  183. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +66 -18
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +17 -15
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +55 -32
  187. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -11
  188. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  189. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +7 -5
  190. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +94 -63
  191. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +3 -3
  192. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +13 -13
  193. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +4 -5
  194. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  195. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
  196. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +16 -16
  197. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +42 -21
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +13 -10
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +31 -29
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +49 -33
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  203. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -4
  204. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  205. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  206. data/bundler/lib/bundler/vendored_fileutils.rb +9 -0
  207. data/bundler/lib/bundler/vendored_molinillo.rb +1 -0
  208. data/bundler/lib/bundler/vendored_persistent.rb +35 -0
  209. data/bundler/lib/bundler/vendored_thor.rb +6 -2
  210. data/bundler/lib/bundler/version.rb +19 -2
  211. data/bundler/lib/bundler/version_ranges.rb +76 -0
  212. data/bundler/lib/bundler/vlad.rb +5 -0
  213. data/bundler/lib/bundler/worker.rb +3 -1
  214. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  215. data/bundler/man/bundle-add.ronn +29 -0
  216. data/bundler/man/bundle-binstubs.ronn +15 -1
  217. data/bundler/man/bundle-check.ronn +26 -0
  218. data/bundler/man/bundle-clean.ronn +18 -0
  219. data/bundler/man/bundle-config.ronn +193 -69
  220. data/bundler/man/bundle-doctor.ronn +33 -0
  221. data/bundler/man/bundle-exec.ronn +10 -3
  222. data/bundler/man/bundle-gem.ronn +3 -2
  223. data/bundler/man/bundle-info.ronn +17 -0
  224. data/bundler/man/bundle-init.ronn +29 -0
  225. data/bundler/man/bundle-inject.ronn +22 -0
  226. data/bundler/man/bundle-install.ronn +44 -35
  227. data/bundler/man/bundle-list.ronn +15 -0
  228. data/bundler/man/bundle-lock.ronn +1 -1
  229. data/bundler/man/bundle-open.ronn +19 -0
  230. data/bundler/man/bundle-outdated.ronn +2 -2
  231. data/bundler/man/bundle-package.ronn +7 -2
  232. data/bundler/man/bundle-pristine.ronn +34 -0
  233. data/bundler/man/bundle-show.ronn +21 -0
  234. data/bundler/man/bundle-update.ronn +24 -17
  235. data/bundler/man/bundle-viz.ronn +30 -0
  236. data/bundler/man/bundle.ronn +36 -45
  237. data/bundler/man/gemfile.5.ronn +77 -71
  238. data/lib/rubygems.rb +102 -46
  239. data/lib/rubygems/basic_specification.rb +8 -4
  240. data/lib/rubygems/bundler_version_finder.rb +99 -0
  241. data/lib/rubygems/command.rb +10 -2
  242. data/lib/rubygems/command_manager.rb +8 -4
  243. data/lib/rubygems/commands/cert_command.rb +31 -6
  244. data/lib/rubygems/commands/cleanup_command.rb +10 -3
  245. data/lib/rubygems/commands/generate_index_command.rb +1 -1
  246. data/lib/rubygems/commands/help_command.rb +1 -1
  247. data/lib/rubygems/commands/install_command.rb +7 -0
  248. data/lib/rubygems/commands/open_command.rb +1 -1
  249. data/lib/rubygems/commands/owner_command.rb +7 -2
  250. data/lib/rubygems/commands/pristine_command.rb +11 -8
  251. data/lib/rubygems/commands/push_command.rb +39 -5
  252. data/lib/rubygems/commands/query_command.rb +17 -17
  253. data/lib/rubygems/commands/setup_command.rb +174 -69
  254. data/lib/rubygems/commands/signin_command.rb +33 -0
  255. data/lib/rubygems/commands/signout_command.rb +33 -0
  256. data/lib/rubygems/commands/sources_command.rb +1 -1
  257. data/lib/rubygems/commands/uninstall_command.rb +5 -4
  258. data/lib/rubygems/commands/unpack_command.rb +19 -7
  259. data/lib/rubygems/commands/update_command.rb +1 -1
  260. data/lib/rubygems/commands/which_command.rb +1 -1
  261. data/lib/rubygems/commands/yank_command.rb +4 -11
  262. data/lib/rubygems/config_file.rb +15 -26
  263. data/lib/rubygems/core_ext/kernel_require.rb +12 -16
  264. data/lib/rubygems/dependency.rb +3 -0
  265. data/lib/rubygems/dependency_installer.rb +8 -2
  266. data/lib/rubygems/dependency_list.rb +1 -1
  267. data/lib/rubygems/errors.rb +3 -0
  268. data/lib/rubygems/exceptions.rb +11 -1
  269. data/lib/rubygems/ext/builder.rb +2 -2
  270. data/lib/rubygems/ext/ext_conf_builder.rb +2 -4
  271. data/lib/rubygems/ext/rake_builder.rb +1 -1
  272. data/lib/rubygems/gem_runner.rb +5 -1
  273. data/lib/rubygems/gemcutter_utilities.rb +5 -2
  274. data/lib/rubygems/indexer.rb +6 -5
  275. data/lib/rubygems/install_update_options.rb +6 -29
  276. data/lib/rubygems/installer.rb +60 -13
  277. data/lib/rubygems/installer_test_case.rb +6 -3
  278. data/lib/rubygems/package.rb +55 -8
  279. data/lib/rubygems/package/file_source.rb +2 -2
  280. data/lib/rubygems/package/old.rb +3 -3
  281. data/lib/rubygems/package/tar_header.rb +17 -10
  282. data/lib/rubygems/package/tar_writer.rb +4 -3
  283. data/lib/rubygems/platform.rb +1 -1
  284. data/lib/rubygems/remote_fetcher.rb +2 -2
  285. data/lib/rubygems/request.rb +1 -1
  286. data/lib/rubygems/request_set.rb +47 -19
  287. data/lib/rubygems/request_set/gem_dependency_api.rb +3 -3
  288. data/lib/rubygems/request_set/lockfile.rb +1 -1
  289. data/lib/rubygems/requirement.rb +19 -4
  290. data/lib/rubygems/resolver.rb +24 -3
  291. data/lib/rubygems/resolver/api_specification.rb +5 -0
  292. data/lib/rubygems/resolver/installer_set.rb +4 -6
  293. data/lib/rubygems/safe_yaml.rb +51 -0
  294. data/lib/rubygems/security.rb +18 -6
  295. data/lib/rubygems/security/trust_dir.rb +1 -1
  296. data/lib/rubygems/security_option.rb +43 -0
  297. data/lib/rubygems/server.rb +21 -17
  298. data/lib/rubygems/source.rb +9 -6
  299. data/lib/rubygems/source/git.rb +2 -1
  300. data/lib/rubygems/source/local.rb +38 -35
  301. data/lib/rubygems/source/lock.rb +4 -1
  302. data/lib/rubygems/source_local.rb +3 -1
  303. data/lib/rubygems/source_specific_file.rb +3 -2
  304. data/lib/rubygems/spec_fetcher.rb +7 -3
  305. data/lib/rubygems/specification.rb +315 -249
  306. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  307. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  308. data/lib/rubygems/stub_specification.rb +4 -3
  309. data/lib/rubygems/test_case.rb +51 -11
  310. data/lib/rubygems/test_utilities.rb +2 -2
  311. data/lib/rubygems/text.rb +14 -1
  312. data/lib/rubygems/user_interaction.rb +24 -15
  313. data/lib/rubygems/util.rb +6 -16
  314. data/lib/rubygems/util/licenses.rb +72 -4
  315. data/lib/rubygems/validator.rb +3 -3
  316. data/lib/rubygems/version.rb +24 -4
  317. data/lib/rubygems/version_option.rb +6 -1
  318. data/lib/ubygems.rb +3 -0
  319. data/setup.rb +1 -1
  320. data/test/rubygems/private3072_key.pem +40 -0
  321. data/test/rubygems/public3072_cert.pem +25 -0
  322. data/test/rubygems/test_bundled_ca.rb +7 -4
  323. data/test/rubygems/test_config.rb +1 -1
  324. data/test/rubygems/test_gem.rb +158 -39
  325. data/test/rubygems/test_gem_bundler_version_finder.rb +126 -0
  326. data/test/rubygems/test_gem_command.rb +7 -1
  327. data/test/rubygems/test_gem_command_manager.rb +2 -2
  328. data/test/rubygems/test_gem_commands_build_command.rb +29 -1
  329. data/test/rubygems/test_gem_commands_cert_command.rb +64 -0
  330. data/test/rubygems/test_gem_commands_cleanup_command.rb +44 -1
  331. data/test/rubygems/test_gem_commands_install_command.rb +73 -2
  332. data/test/rubygems/test_gem_commands_open_command.rb +2 -1
  333. data/test/rubygems/test_gem_commands_owner_command.rb +25 -0
  334. data/test/rubygems/test_gem_commands_pristine_command.rb +1 -1
  335. data/test/rubygems/test_gem_commands_push_command.rb +25 -5
  336. data/test/rubygems/test_gem_commands_query_command.rb +154 -1
  337. data/test/rubygems/test_gem_commands_setup_command.rb +140 -10
  338. data/test/rubygems/test_gem_commands_signin_command.rb +98 -0
  339. data/test/rubygems/test_gem_commands_signout_command.rb +37 -0
  340. data/test/rubygems/test_gem_commands_sources_command.rb +52 -0
  341. data/test/rubygems/test_gem_commands_uninstall_command.rb +15 -3
  342. data/test/rubygems/test_gem_commands_update_command.rb +1 -7
  343. data/test/rubygems/test_gem_commands_which_command.rb +3 -3
  344. data/test/rubygems/test_gem_dependency.rb +28 -0
  345. data/test/rubygems/test_gem_dependency_installer.rb +1 -1
  346. data/test/rubygems/test_gem_doctor.rb +2 -2
  347. data/test/rubygems/test_gem_ext_builder.rb +8 -8
  348. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -1
  349. data/test/rubygems/test_gem_ext_rake_builder.rb +2 -6
  350. data/test/rubygems/test_gem_gemcutter_utilities.rb +4 -4
  351. data/test/rubygems/test_gem_indexer.rb +1 -2
  352. data/test/rubygems/test_gem_install_update_options.rb +6 -1
  353. data/test/rubygems/test_gem_installer.rb +168 -31
  354. data/test/rubygems/test_gem_package.rb +183 -26
  355. data/test/rubygems/test_gem_package_old.rb +1 -1
  356. data/test/rubygems/test_gem_package_tar_header.rb +21 -0
  357. data/test/rubygems/test_gem_rdoc.rb +2 -0
  358. data/test/rubygems/test_gem_remote_fetcher.rb +24 -5
  359. data/test/rubygems/test_gem_request.rb +5 -2
  360. data/test/rubygems/test_gem_request_connection_pools.rb +6 -7
  361. data/test/rubygems/test_gem_request_set.rb +7 -7
  362. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -3
  363. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -4
  364. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +1 -1
  365. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
  366. data/test/rubygems/test_gem_requirement.rb +12 -0
  367. data/test/rubygems/test_gem_resolver.rb +26 -0
  368. data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
  369. data/test/rubygems/test_gem_resolver_conflict.rb +1 -1
  370. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
  371. data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
  372. data/test/rubygems/test_gem_security.rb +5 -0
  373. data/test/rubygems/test_gem_security_policy.rb +27 -27
  374. data/test/rubygems/test_gem_security_signer.rb +6 -6
  375. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  376. data/test/rubygems/test_gem_server.rb +194 -12
  377. data/test/rubygems/test_gem_source.rb +12 -3
  378. data/test/rubygems/test_gem_source_git.rb +1 -1
  379. data/test/rubygems/test_gem_spec_fetcher.rb +20 -0
  380. data/test/rubygems/test_gem_specification.rb +180 -42
  381. data/test/rubygems/test_gem_stream_ui.rb +8 -8
  382. data/test/rubygems/test_gem_stub_specification.rb +26 -8
  383. data/test/rubygems/test_gem_text.rb +16 -0
  384. data/test/rubygems/test_gem_util.rb +26 -0
  385. data/test/rubygems/test_gem_version.rb +68 -9
  386. data/test/rubygems/test_gem_version_option.rb +15 -0
  387. data/test/rubygems/test_kernel.rb +30 -0
  388. data/test/rubygems/test_require.rb +70 -21
  389. data/util/ci +1 -0
  390. data/util/generate_spdx_license_list.rb +16 -6
  391. data/util/update_bundled_ca_certificates.rb +1 -3
  392. metadata +61 -57
  393. data/README.rdoc +0 -54
  394. data/bundler/DEVELOPMENT.md +0 -150
  395. data/bundler/ISSUES.md +0 -117
  396. data/bundler/lib/bundler/postit_trampoline.rb +0 -73
  397. data/bundler/lib/bundler/vendor/postit/lib/postit.rb +0 -15
  398. data/bundler/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
  399. data/bundler/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
  400. data/bundler/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
  401. data/bundler/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
  402. data/bundler/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
  403. data/bundler/man/index.txt +0 -8
  404. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  405. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -23,11 +23,11 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
23
23
  end
24
24
 
25
25
  def with_write_io &block
26
- open path, 'wb', &block
26
+ File.open path, 'wb', &block
27
27
  end
28
28
 
29
29
  def with_read_io &block
30
- open path, 'rb', &block
30
+ File.open path, 'rb', &block
31
31
  end
32
32
 
33
33
  end
@@ -80,7 +80,7 @@ class Gem::Package::Old < Gem::Package
80
80
 
81
81
  FileUtils.mkdir_p File.dirname destination
82
82
 
83
- open destination, 'wb', entry['mode'] do |out|
83
+ File.open destination, 'wb', entry['mode'] do |out|
84
84
  out.write file_data
85
85
  end
86
86
 
@@ -101,7 +101,7 @@ class Gem::Package::Old < Gem::Package
101
101
  header << line
102
102
  end
103
103
 
104
- YAML.load header
104
+ Gem::SafeYAML.safe_load header
105
105
  end
106
106
 
107
107
  ##
@@ -124,7 +124,7 @@ class Gem::Package::Old < Gem::Package
124
124
  break unless line
125
125
  end
126
126
 
127
- raise Gem::Exception, "Failed to find end of ruby script while reading gem"
127
+ raise Gem::Exception, "Failed to find end of Ruby script while reading gem"
128
128
  end
129
129
 
130
130
  ##
@@ -94,35 +94,42 @@ class Gem::Package::TarHeader
94
94
 
95
95
  attr_reader(*FIELDS)
96
96
 
97
+ EMPTY_HEADER = ("\0" * 512).freeze # :nodoc:
98
+
97
99
  ##
98
100
  # Creates a tar header from IO +stream+
99
101
 
100
102
  def self.from(stream)
101
103
  header = stream.read 512
102
- empty = (header == "\0" * 512)
104
+ empty = (EMPTY_HEADER == header)
103
105
 
104
106
  fields = header.unpack UNPACK_FORMAT
105
107
 
106
108
  new :name => fields.shift,
107
- :mode => fields.shift.oct,
108
- :uid => fields.shift.oct,
109
- :gid => fields.shift.oct,
110
- :size => fields.shift.oct,
111
- :mtime => fields.shift.oct,
112
- :checksum => fields.shift.oct,
109
+ :mode => strict_oct(fields.shift),
110
+ :uid => strict_oct(fields.shift),
111
+ :gid => strict_oct(fields.shift),
112
+ :size => strict_oct(fields.shift),
113
+ :mtime => strict_oct(fields.shift),
114
+ :checksum => strict_oct(fields.shift),
113
115
  :typeflag => fields.shift,
114
116
  :linkname => fields.shift,
115
117
  :magic => fields.shift,
116
- :version => fields.shift.oct,
118
+ :version => strict_oct(fields.shift),
117
119
  :uname => fields.shift,
118
120
  :gname => fields.shift,
119
- :devmajor => fields.shift.oct,
120
- :devminor => fields.shift.oct,
121
+ :devmajor => strict_oct(fields.shift),
122
+ :devminor => strict_oct(fields.shift),
121
123
  :prefix => fields.shift,
122
124
 
123
125
  :empty => empty
124
126
  end
125
127
 
128
+ def self.strict_oct(str)
129
+ return str.oct if str =~ /\A[0-7]*\z/
130
+ raise ArgumentError, "#{str.inspect} is not an octal string"
131
+ end
132
+
126
133
  ##
127
134
  # Creates a new TarHeader using +vals+
128
135
 
@@ -111,7 +111,7 @@ class Gem::Package::TarWriter
111
111
  name, prefix = split_name name
112
112
 
113
113
  init_pos = @io.pos
114
- @io.write "\0" * 512 # placeholder for the header
114
+ @io.write Gem::Package::TarHeader::EMPTY_HEADER # placeholder for the header
115
115
 
116
116
  yield RestrictedStream.new(@io) if block_given?
117
117
 
@@ -189,13 +189,14 @@ class Gem::Package::TarWriter
189
189
  if digest.respond_to? :name then
190
190
  digest.name
191
191
  else
192
- /::([^:]+)$/ =~ digest.class.name
193
- $1
192
+ digest.class.name[/::([^:]+)\z/, 1]
194
193
  end
195
194
 
196
195
  digest_name == signer.digest_name
197
196
  end
198
197
 
198
+ raise "no #{signer.digest_name} in #{digests.values.compact}" unless signature_digest
199
+
199
200
  if signer.key then
200
201
  signature = signer.sign signature_digest.digest
201
202
 
@@ -112,7 +112,7 @@ class Gem::Platform
112
112
  end
113
113
 
114
114
  def inspect
115
- "#<%s:0x%x @cpu=%p, @os=%p, @version=%p>" % [self.class, object_id, *to_a]
115
+ "%s @cpu=%p, @os=%p, @version=%p>" % [super[0..-2], *to_a]
116
116
  end
117
117
 
118
118
  def to_a
@@ -110,7 +110,7 @@ class Gem::RemoteFetcher
110
110
  else
111
111
  target = res.target.to_s.strip
112
112
 
113
- if /\.#{Regexp.quote(host)}\z/ =~ target
113
+ if URI("http://" + target).host.end_with?(".#{host}")
114
114
  return URI.parse "#{uri.scheme}://#{target}#{uri.path}"
115
115
  end
116
116
 
@@ -293,7 +293,7 @@ class Gem::RemoteFetcher
293
293
 
294
294
  if data and !head and uri.to_s =~ /\.gz$/
295
295
  begin
296
- data = Gem.gunzip data
296
+ data = Gem::Util.gunzip data
297
297
  rescue Zlib::GzipFile::Error
298
298
  raise FetchError.new("server did not return a valid file", uri.to_s)
299
299
  end
@@ -83,7 +83,7 @@ class Gem::Request
83
83
  e.message =~ / -- openssl$/
84
84
 
85
85
  raise Gem::Exception.new(
86
- 'Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources')
86
+ 'Unable to require openssl, install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources')
87
87
  end
88
88
 
89
89
  def self.verify_certificate store_context
@@ -163,31 +163,35 @@ class Gem::RequestSet
163
163
  end
164
164
  end
165
165
 
166
- spec = req.spec.install options do |installer|
167
- yield req, installer if block_given?
168
- end
166
+ spec =
167
+ begin
168
+ req.spec.install options do |installer|
169
+ yield req, installer if block_given?
170
+ end
171
+ rescue Gem::RuntimeRequirementNotMetError => e
172
+ recent_match = req.spec.set.find_all(req.request).sort_by(&:version).reverse_each.find do |s|
173
+ s = s.spec
174
+ s.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
175
+ s.required_rubygems_version.satisfied_by?(Gem.rubygems_version) &&
176
+ Gem::Platform.installable?(s)
177
+ end
178
+ if recent_match
179
+ suggestion = "The last version of #{req.request} to support your Ruby & RubyGems was #{recent_match.version}. Try installing it with `gem install #{recent_match.name} -v #{recent_match.version}`"
180
+ suggestion += " and then running the current command again" unless @always_install.include?(req.spec.spec)
181
+ else
182
+ suggestion = "There are no versions of #{req.request} compatible with your Ruby & RubyGems"
183
+ suggestion += ". Maybe try installing an older version of the gem you're looking for?" unless @always_install.include?(req.spec.spec)
184
+ end
185
+ e.suggestion = suggestion
186
+ raise
187
+ end
169
188
 
170
189
  requests << spec
171
190
  end
172
191
 
173
192
  return requests if options[:gemdeps]
174
193
 
175
- specs = requests.map do |request|
176
- case request
177
- when Gem::Resolver::ActivationRequest then
178
- request.spec.spec
179
- else
180
- request
181
- end
182
- end
183
-
184
- require 'rubygems/dependency_installer'
185
- inst = Gem::DependencyInstaller.new options
186
- inst.installed_gems.replace specs
187
-
188
- Gem.done_installing_hooks.each do |hook|
189
- hook.call inst, specs
190
- end unless Gem.done_installing_hooks.empty?
194
+ install_hooks requests, options
191
195
 
192
196
  requests
193
197
  end
@@ -264,11 +268,35 @@ class Gem::RequestSet
264
268
  installed << request
265
269
  end
266
270
 
271
+ install_hooks installed, options
272
+
267
273
  installed
268
274
  ensure
269
275
  ENV['GEM_HOME'] = gem_home
270
276
  end
271
277
 
278
+ ##
279
+ # Call hooks on installed gems
280
+
281
+ def install_hooks requests, options
282
+ specs = requests.map do |request|
283
+ case request
284
+ when Gem::Resolver::ActivationRequest then
285
+ request.spec.spec
286
+ else
287
+ request
288
+ end
289
+ end
290
+
291
+ require "rubygems/dependency_installer"
292
+ inst = Gem::DependencyInstaller.new options
293
+ inst.installed_gems.replace specs
294
+
295
+ Gem.done_installing_hooks.each do |hook|
296
+ hook.call inst, specs
297
+ end unless Gem.done_installing_hooks.empty?
298
+ end
299
+
272
300
  ##
273
301
  # Load a dependency management file.
274
302
 
@@ -786,7 +786,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
786
786
  engine_version = options[:engine_version]
787
787
 
788
788
  raise ArgumentError,
789
- 'you must specify engine_version along with the ruby engine' if
789
+ 'You must specify engine_version along with the Ruby engine' if
790
790
  engine and not engine_version
791
791
 
792
792
  return true if @installing
@@ -799,7 +799,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
799
799
  end
800
800
 
801
801
  if engine and engine != Gem.ruby_engine then
802
- message = "Your ruby engine is #{Gem.ruby_engine}, " +
802
+ message = "Your Ruby engine is #{Gem.ruby_engine}, " +
803
803
  "but your #{gem_deps_file} requires #{engine}"
804
804
 
805
805
  raise Gem::RubyVersionMismatch, message
@@ -810,7 +810,7 @@ Gem dependencies file #{@path} includes git reference for both ref/branch and ta
810
810
 
811
811
  if engine_version != my_engine_version then
812
812
  message =
813
- "Your ruby engine version is #{Gem.ruby_engine} #{my_engine_version}, " +
813
+ "Your Ruby engine version is #{Gem.ruby_engine} #{my_engine_version}, " +
814
814
  "but your #{gem_deps_file} requires #{engine} #{engine_version}"
815
815
 
816
816
  raise Gem::RubyVersionMismatch, message
@@ -223,7 +223,7 @@ class Gem::RequestSet::Lockfile
223
223
  def write
224
224
  content = to_s
225
225
 
226
- open "#{@gem_deps_file}.lock", 'w' do |io|
226
+ File.open "#{@gem_deps_file}.lock", 'w' do |io|
227
227
  io.write content
228
228
  end
229
229
  end
@@ -51,7 +51,11 @@ class Gem::Requirement
51
51
  # If the input is "weird", the default version requirement is
52
52
  # returned.
53
53
 
54
- def self.create input
54
+ def self.create *inputs
55
+ return new inputs if inputs.length > 1
56
+
57
+ input = inputs.shift
58
+
55
59
  case input
56
60
  when Gem::Requirement then
57
61
  input
@@ -129,6 +133,7 @@ class Gem::Requirement
129
133
  @requirements = [DefaultRequirement]
130
134
  else
131
135
  @requirements = requirements.map! { |r| self.class.parse r }
136
+ sort_requirements!
132
137
  end
133
138
  end
134
139
 
@@ -142,6 +147,7 @@ class Gem::Requirement
142
147
  new = new.map { |r| self.class.parse r }
143
148
 
144
149
  @requirements.concat new
150
+ sort_requirements!
145
151
  end
146
152
 
147
153
  ##
@@ -179,11 +185,11 @@ class Gem::Requirement
179
185
  end
180
186
 
181
187
  def as_list # :nodoc:
182
- requirements.map { |op, version| "#{op} #{version}" }.sort
188
+ requirements.map { |op, version| "#{op} #{version}" }
183
189
  end
184
190
 
185
191
  def hash # :nodoc:
186
- requirements.sort.hash
192
+ requirements.hash
187
193
  end
188
194
 
189
195
  def marshal_dump # :nodoc:
@@ -260,7 +266,8 @@ class Gem::Requirement
260
266
  end
261
267
 
262
268
  def == other # :nodoc:
263
- Gem::Requirement === other and to_s == other.to_s
269
+ return unless Gem::Requirement === other
270
+ requirements == other.requirements
264
271
  end
265
272
 
266
273
  private
@@ -275,6 +282,14 @@ class Gem::Requirement
275
282
  end
276
283
  end
277
284
  end
285
+
286
+ def sort_requirements! # :nodoc:
287
+ @requirements.sort! do |l, r|
288
+ comp = l.last <=> r.last # first, sort by the requirement's version
289
+ next comp unless comp == 0
290
+ l.first <=> r.first # then, sort by the operator (for stability)
291
+ end
292
+ end
278
293
  end
279
294
 
280
295
  class Gem::Version
@@ -230,8 +230,28 @@ class Gem::Resolver
230
230
  exc.errors = @set.errors
231
231
  raise exc
232
232
  end
233
- possibles.sort_by { |s| [s.source, s.version, Gem::Platform.local =~ s.platform ? 1 : 0] }.
234
- map { |s| ActivationRequest.new s, dependency, [] }
233
+
234
+ sources = []
235
+
236
+ groups = Hash.new { |hash, key| hash[key] = [] }
237
+
238
+ # create groups & sources in the same loop
239
+ sources = possibles.map { |spec|
240
+ source = spec.source
241
+ groups[source] << spec
242
+ source
243
+ }.uniq.reverse
244
+
245
+ activation_requests = []
246
+
247
+ sources.each do |source|
248
+ groups[source].
249
+ sort_by { |spec| [spec.version, Gem::Platform.local =~ spec.platform ? 1 : 0] }.
250
+ map { |spec| ActivationRequest.new spec, dependency, [] }.
251
+ each { |activation_request| activation_requests << activation_request }
252
+ end
253
+
254
+ activation_requests
235
255
  end
236
256
 
237
257
  def dependencies_for(specification)
@@ -254,13 +274,14 @@ class Gem::Resolver
254
274
  end
255
275
 
256
276
  def sort_dependencies(dependencies, activated, conflicts)
257
- dependencies.sort_by do |dependency|
277
+ dependencies.sort_by.with_index do |dependency, i|
258
278
  name = name_for(dependency)
259
279
  [
260
280
  activated.vertex_named(name).payload ? 0 : 1,
261
281
  amount_constrained(dependency),
262
282
  conflicts[name] ? 0 : 1,
263
283
  activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
284
+ i # for stable sort
264
285
  ]
265
286
  end
266
287
  end
@@ -21,6 +21,7 @@ class Gem::Resolver::APISpecification < Gem::Resolver::Specification
21
21
  @name = api_data[:name]
22
22
  @version = Gem::Version.new api_data[:number]
23
23
  @platform = Gem::Platform.new api_data[:platform]
24
+ @original_platform = api_data[:platform]
24
25
  @dependencies = api_data[:dependencies].map do |name, ver|
25
26
  Gem::Dependency.new name, ver.split(/\s*,\s*/)
26
27
  end
@@ -73,7 +74,11 @@ class Gem::Resolver::APISpecification < Gem::Resolver::Specification
73
74
  @spec ||=
74
75
  begin
75
76
  tuple = Gem::NameTuple.new @name, @version, @platform
77
+ source.fetch_spec tuple
78
+ rescue Gem::RemoteFetcher::FetchError
79
+ raise if @original_platform == @platform
76
80
 
81
+ tuple = Gem::NameTuple.new @name, @version, @original_platform
77
82
  source.fetch_spec tuple
78
83
  end
79
84
  end
@@ -41,6 +41,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
41
41
  @ignore_dependencies = false
42
42
  @ignore_installed = false
43
43
  @local = {}
44
+ @local_source = Gem::Source::Local.new
44
45
  @remote_set = Gem::Resolver::BestSet.new
45
46
  @specs = {}
46
47
  end
@@ -136,13 +137,11 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
136
137
 
137
138
  res.concat matching_local
138
139
 
139
- local_source = Gem::Source::Local.new
140
-
141
140
  begin
142
- if local_spec = local_source.find_gem(name, dep.requirement) then
141
+ if local_spec = @local_source.find_gem(name, dep.requirement) then
143
142
  res << Gem::Resolver::IndexSpecification.new(
144
143
  self, local_spec.name, local_spec.version,
145
- local_source, local_spec.platform)
144
+ @local_source, local_spec.platform)
146
145
  end
147
146
  rescue Gem::Package::FormatError
148
147
  # ignore
@@ -194,7 +193,7 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
194
193
  # Has a local gem for +dep_name+ been added to this set?
195
194
 
196
195
  def local? dep_name # :nodoc:
197
- spec, = @local[dep_name]
196
+ spec, _ = @local[dep_name]
198
197
 
199
198
  spec
200
199
  end
@@ -226,4 +225,3 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
226
225
  end
227
226
 
228
227
  end
229
-