rubygems-update 3.2.0.rc.1 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (497) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +23 -8
  3. data/History.txt +307 -239
  4. data/Manifest.txt +36 -54
  5. data/POLICIES.md +4 -3
  6. data/Rakefile +29 -51
  7. data/bundler/CHANGELOG.md +786 -690
  8. data/bundler/UPGRADING.md +3 -3
  9. data/bundler/lib/bundler.rb +17 -3
  10. data/bundler/lib/bundler/build_metadata.rb +4 -12
  11. data/bundler/lib/bundler/cli.rb +31 -15
  12. data/bundler/lib/bundler/cli/add.rb +1 -1
  13. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  14. data/bundler/lib/bundler/cli/cache.rb +1 -7
  15. data/bundler/lib/bundler/cli/clean.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +14 -0
  17. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  18. data/bundler/lib/bundler/cli/exec.rb +4 -4
  19. data/bundler/lib/bundler/cli/fund.rb +36 -0
  20. data/bundler/lib/bundler/cli/gem.rb +1 -1
  21. data/bundler/lib/bundler/cli/info.rb +2 -1
  22. data/bundler/lib/bundler/cli/init.rb +1 -1
  23. data/bundler/lib/bundler/cli/inject.rb +1 -1
  24. data/bundler/lib/bundler/cli/install.rb +18 -7
  25. data/bundler/lib/bundler/cli/list.rb +1 -1
  26. data/bundler/lib/bundler/cli/outdated.rb +1 -3
  27. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  28. data/bundler/lib/bundler/cli/show.rb +1 -1
  29. data/bundler/lib/bundler/cli/update.rb +3 -1
  30. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  31. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  32. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  33. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -5
  34. data/bundler/lib/bundler/definition.rb +49 -60
  35. data/bundler/lib/bundler/dep_proxy.rb +1 -1
  36. data/bundler/lib/bundler/dependency.rb +3 -1
  37. data/bundler/lib/bundler/dsl.rb +4 -4
  38. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  39. data/bundler/lib/bundler/env.rb +1 -1
  40. data/bundler/lib/bundler/feature_flag.rb +0 -1
  41. data/bundler/lib/bundler/fetcher.rb +3 -3
  42. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  43. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  44. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  45. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  46. data/bundler/lib/bundler/friendly_errors.rb +18 -3
  47. data/bundler/lib/bundler/gem_helper.rb +17 -9
  48. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  49. data/bundler/lib/bundler/gem_version_promoter.rb +1 -1
  50. data/bundler/lib/bundler/graph.rb +1 -1
  51. data/bundler/lib/bundler/index.rb +6 -2
  52. data/bundler/lib/bundler/injector.rb +10 -3
  53. data/bundler/lib/bundler/installer.rb +8 -6
  54. data/bundler/lib/bundler/installer/gem_installer.rb +1 -1
  55. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
  56. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  57. data/bundler/lib/bundler/lazy_specification.rb +22 -11
  58. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  59. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  60. data/bundler/lib/bundler/man/.document +1 -0
  61. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  62. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  63. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  64. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  65. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  66. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +14 -21
  67. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  68. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  69. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +0 -0
  70. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  71. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  72. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  73. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  74. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +0 -0
  75. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  76. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  77. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  78. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  79. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  80. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  81. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  82. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  83. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  84. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  85. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  86. data/bundler/lib/bundler/mirror.rb +2 -2
  87. data/bundler/lib/bundler/plugin.rb +5 -6
  88. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  89. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  90. data/bundler/lib/bundler/plugin/index.rb +1 -1
  91. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  92. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  93. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  94. data/bundler/lib/bundler/remote_specification.rb +1 -1
  95. data/bundler/lib/bundler/resolver.rb +26 -30
  96. data/bundler/lib/bundler/resolver/spec_group.rb +21 -27
  97. data/bundler/lib/bundler/retry.rb +1 -1
  98. data/bundler/lib/bundler/ruby_version.rb +1 -1
  99. data/bundler/lib/bundler/rubygems_ext.rb +46 -1
  100. data/bundler/lib/bundler/rubygems_gem_installer.rb +2 -2
  101. data/bundler/lib/bundler/rubygems_integration.rb +22 -12
  102. data/bundler/lib/bundler/runtime.rb +2 -2
  103. data/bundler/lib/bundler/settings.rb +49 -43
  104. data/bundler/lib/bundler/shared_helpers.rb +1 -1
  105. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  106. data/bundler/lib/bundler/source.rb +1 -1
  107. data/bundler/lib/bundler/source/git.rb +1 -1
  108. data/bundler/lib/bundler/source/git/git_proxy.rb +5 -3
  109. data/bundler/lib/bundler/source/path.rb +2 -2
  110. data/bundler/lib/bundler/source/path/installer.rb +1 -1
  111. data/bundler/lib/bundler/source/rubygems.rb +2 -2
  112. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  113. data/bundler/lib/bundler/source_list.rb +2 -2
  114. data/bundler/lib/bundler/spec_set.rb +7 -9
  115. data/bundler/lib/bundler/stub_specification.rb +1 -3
  116. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  117. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -2
  118. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -2
  119. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  120. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +0 -1
  121. data/bundler/lib/bundler/ui/shell.rb +5 -5
  122. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  123. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  124. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  125. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  126. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  127. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  128. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +38 -40
  129. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +8 -1
  130. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  131. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  132. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  133. data/bundler/lib/bundler/version.rb +1 -1
  134. data/bundler/lib/bundler/worker.rb +1 -1
  135. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  136. data/bundler/man/bundle-add.1 +1 -1
  137. data/bundler/man/bundle-binstubs.1 +5 -3
  138. data/bundler/man/bundle-cache.1 +1 -1
  139. data/bundler/man/bundle-check.1 +1 -1
  140. data/bundler/man/bundle-clean.1 +1 -1
  141. data/bundler/man/bundle-config.1 +14 -17
  142. data/bundler/man/bundle-doctor.1 +1 -1
  143. data/bundler/man/bundle-exec.1 +1 -1
  144. data/bundler/man/bundle-gem.1 +1 -1
  145. data/bundler/man/bundle-info.1 +1 -1
  146. data/bundler/man/bundle-init.1 +1 -1
  147. data/bundler/man/bundle-inject.1 +1 -1
  148. data/bundler/man/bundle-install.1 +30 -3
  149. data/bundler/man/bundle-list.1 +1 -1
  150. data/bundler/man/bundle-lock.1 +1 -1
  151. data/bundler/man/bundle-open.1 +1 -1
  152. data/bundler/man/bundle-outdated.1 +1 -1
  153. data/bundler/man/bundle-platform.1 +1 -1
  154. data/bundler/man/bundle-pristine.1 +1 -1
  155. data/bundler/man/bundle-remove.1 +1 -1
  156. data/bundler/man/bundle-show.1 +1 -1
  157. data/bundler/man/bundle-update.1 +1 -1
  158. data/bundler/man/bundle-viz.1 +1 -1
  159. data/bundler/man/bundle.1 +1 -1
  160. data/bundler/man/gemfile.5 +4 -4
  161. data/lib/rubygems.rb +8 -7
  162. data/lib/rubygems/available_set.rb +1 -3
  163. data/lib/rubygems/basic_specification.rb +0 -4
  164. data/lib/rubygems/command.rb +0 -2
  165. data/lib/rubygems/command_manager.rb +2 -4
  166. data/lib/rubygems/commands/build_command.rb +40 -20
  167. data/lib/rubygems/commands/cert_command.rb +1 -9
  168. data/lib/rubygems/commands/check_command.rb +0 -2
  169. data/lib/rubygems/commands/cleanup_command.rb +8 -4
  170. data/lib/rubygems/commands/contents_command.rb +0 -2
  171. data/lib/rubygems/commands/dependency_command.rb +0 -2
  172. data/lib/rubygems/commands/environment_command.rb +1 -3
  173. data/lib/rubygems/commands/fetch_command.rb +0 -2
  174. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  175. data/lib/rubygems/commands/help_command.rb +2 -2
  176. data/lib/rubygems/commands/info_command.rb +0 -2
  177. data/lib/rubygems/commands/install_command.rb +0 -2
  178. data/lib/rubygems/commands/list_command.rb +0 -2
  179. data/lib/rubygems/commands/lock_command.rb +0 -2
  180. data/lib/rubygems/commands/mirror_command.rb +0 -2
  181. data/lib/rubygems/commands/open_command.rb +0 -2
  182. data/lib/rubygems/commands/outdated_command.rb +0 -2
  183. data/lib/rubygems/commands/owner_command.rb +9 -4
  184. data/lib/rubygems/commands/pristine_command.rb +1 -3
  185. data/lib/rubygems/commands/push_command.rb +6 -5
  186. data/lib/rubygems/commands/query_command.rb +16 -1
  187. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  188. data/lib/rubygems/commands/search_command.rb +0 -2
  189. data/lib/rubygems/commands/server_command.rb +3 -1
  190. data/lib/rubygems/commands/setup_command.rb +21 -44
  191. data/lib/rubygems/commands/signin_command.rb +0 -2
  192. data/lib/rubygems/commands/signout_command.rb +0 -2
  193. data/lib/rubygems/commands/sources_command.rb +6 -4
  194. data/lib/rubygems/commands/specification_command.rb +6 -2
  195. data/lib/rubygems/commands/stale_command.rb +0 -2
  196. data/lib/rubygems/commands/uninstall_command.rb +0 -2
  197. data/lib/rubygems/commands/unpack_command.rb +0 -2
  198. data/lib/rubygems/commands/update_command.rb +20 -5
  199. data/lib/rubygems/commands/which_command.rb +0 -2
  200. data/lib/rubygems/commands/yank_command.rb +4 -7
  201. data/lib/rubygems/config_file.rb +0 -2
  202. data/lib/rubygems/core_ext/kernel_require.rb +3 -0
  203. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  204. data/lib/rubygems/defaults.rb +2 -2
  205. data/lib/rubygems/dependency.rb +1 -3
  206. data/lib/rubygems/dependency_installer.rb +5 -5
  207. data/lib/rubygems/dependency_list.rb +0 -2
  208. data/lib/rubygems/doctor.rb +0 -2
  209. data/lib/rubygems/errors.rb +0 -12
  210. data/lib/rubygems/exceptions.rb +0 -20
  211. data/lib/rubygems/ext/builder.rb +13 -34
  212. data/lib/rubygems/ext/cmake_builder.rb +4 -6
  213. data/lib/rubygems/ext/configure_builder.rb +4 -6
  214. data/lib/rubygems/ext/ext_conf_builder.rb +19 -16
  215. data/lib/rubygems/ext/rake_builder.rb +4 -6
  216. data/lib/rubygems/gem_runner.rb +0 -2
  217. data/lib/rubygems/gemcutter_utilities.rb +101 -20
  218. data/lib/rubygems/indexer.rb +0 -3
  219. data/lib/rubygems/install_update_options.rb +2 -2
  220. data/lib/rubygems/installer.rb +16 -40
  221. data/lib/rubygems/installer_test_case.rb +7 -10
  222. data/lib/rubygems/mock_gem_ui.rb +0 -6
  223. data/lib/rubygems/name_tuple.rb +1 -3
  224. data/lib/rubygems/openssl.rb +7 -0
  225. data/lib/rubygems/package.rb +6 -12
  226. data/lib/rubygems/package/digest_io.rb +0 -2
  227. data/lib/rubygems/package/file_source.rb +0 -2
  228. data/lib/rubygems/package/io_source.rb +0 -2
  229. data/lib/rubygems/package/old.rb +0 -2
  230. data/lib/rubygems/package/tar_header.rb +1 -3
  231. data/lib/rubygems/package/tar_reader.rb +0 -2
  232. data/lib/rubygems/package/tar_reader/entry.rb +0 -2
  233. data/lib/rubygems/package/tar_test_case.rb +1 -3
  234. data/lib/rubygems/package/tar_writer.rb +0 -6
  235. data/lib/rubygems/package_task.rb +0 -2
  236. data/lib/rubygems/path_support.rb +0 -2
  237. data/lib/rubygems/platform.rb +18 -9
  238. data/lib/rubygems/psych_tree.rb +0 -2
  239. data/lib/rubygems/query_utils.rb +0 -9
  240. data/lib/rubygems/remote_fetcher.rb +6 -9
  241. data/lib/rubygems/request.rb +4 -11
  242. data/lib/rubygems/request/connection_pools.rb +0 -4
  243. data/lib/rubygems/request/http_pool.rb +0 -2
  244. data/lib/rubygems/request/https_pool.rb +0 -2
  245. data/lib/rubygems/request_set.rb +2 -15
  246. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -6
  247. data/lib/rubygems/request_set/lockfile.rb +0 -4
  248. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  249. data/lib/rubygems/request_set/lockfile/tokenizer.rb +0 -2
  250. data/lib/rubygems/requirement.rb +8 -8
  251. data/lib/rubygems/resolver.rb +7 -4
  252. data/lib/rubygems/resolver/activation_request.rb +9 -3
  253. data/lib/rubygems/resolver/api_set.rb +27 -20
  254. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  255. data/lib/rubygems/resolver/api_specification.rb +23 -9
  256. data/lib/rubygems/resolver/best_set.rb +1 -3
  257. data/lib/rubygems/resolver/composed_set.rb +0 -2
  258. data/lib/rubygems/resolver/conflict.rb +1 -3
  259. data/lib/rubygems/resolver/current_set.rb +0 -2
  260. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  261. data/lib/rubygems/resolver/git_set.rb +0 -2
  262. data/lib/rubygems/resolver/git_specification.rb +0 -2
  263. data/lib/rubygems/resolver/index_set.rb +0 -2
  264. data/lib/rubygems/resolver/index_specification.rb +26 -2
  265. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  266. data/lib/rubygems/resolver/installer_set.rb +57 -10
  267. data/lib/rubygems/resolver/local_specification.rb +0 -2
  268. data/lib/rubygems/resolver/lock_set.rb +1 -3
  269. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  270. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  271. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  272. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  273. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  274. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  275. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  276. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  277. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  278. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  279. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  280. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  281. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  282. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  283. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  284. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  285. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  286. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  287. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  288. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  289. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  290. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  291. data/lib/rubygems/resolver/set.rb +0 -2
  292. data/lib/rubygems/resolver/source_set.rb +0 -2
  293. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  294. data/lib/rubygems/resolver/specification.rb +13 -3
  295. data/lib/rubygems/resolver/stats.rb +0 -2
  296. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  297. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  298. data/lib/rubygems/s3_uri_signer.rb +2 -8
  299. data/lib/rubygems/security.rb +2 -9
  300. data/lib/rubygems/security/policy.rb +1 -5
  301. data/lib/rubygems/security/signer.rb +1 -3
  302. data/lib/rubygems/security/trust_dir.rb +0 -2
  303. data/lib/rubygems/server.rb +7 -4
  304. data/lib/rubygems/source.rb +23 -12
  305. data/lib/rubygems/source/git.rb +0 -2
  306. data/lib/rubygems/source/installed.rb +0 -2
  307. data/lib/rubygems/source/local.rb +0 -2
  308. data/lib/rubygems/source/lock.rb +0 -2
  309. data/lib/rubygems/source/specific_file.rb +0 -2
  310. data/lib/rubygems/source/vendor.rb +0 -2
  311. data/lib/rubygems/source_list.rb +0 -2
  312. data/lib/rubygems/spec_fetcher.rb +1 -3
  313. data/lib/rubygems/specification.rb +27 -19
  314. data/lib/rubygems/specification_policy.rb +0 -2
  315. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  316. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  317. data/lib/rubygems/stub_specification.rb +1 -5
  318. data/lib/rubygems/syck_hack.rb +0 -2
  319. data/lib/rubygems/test_case.rb +18 -42
  320. data/lib/rubygems/test_utilities.rb +6 -13
  321. data/lib/rubygems/uninstaller.rb +0 -2
  322. data/lib/rubygems/uri_formatter.rb +2 -3
  323. data/lib/rubygems/uri_parser.rb +0 -2
  324. data/lib/rubygems/user_interaction.rb +0 -16
  325. data/lib/rubygems/util.rb +0 -2
  326. data/lib/rubygems/util/licenses.rb +0 -2
  327. data/lib/rubygems/util/list.rb +0 -2
  328. data/lib/rubygems/validator.rb +0 -2
  329. data/lib/rubygems/version.rb +0 -2
  330. data/lib/rubygems/version_option.rb +6 -0
  331. data/rubygems-update.gemspec +1 -1
  332. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  333. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  334. data/test/rubygems/rubygems_plugin.rb +0 -2
  335. data/test/rubygems/test_bundled_ca.rb +42 -41
  336. data/test/rubygems/test_config.rb +0 -2
  337. data/test/rubygems/test_deprecate.rb +0 -6
  338. data/test/rubygems/test_gem.rb +3 -5
  339. data/test/rubygems/test_gem_available_set.rb +0 -2
  340. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -2
  341. data/test/rubygems/test_gem_command.rb +0 -4
  342. data/test/rubygems/test_gem_command_manager.rb +0 -2
  343. data/test/rubygems/test_gem_commands_build_command.rb +226 -13
  344. data/test/rubygems/test_gem_commands_cert_command.rb +2 -4
  345. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  346. data/test/rubygems/test_gem_commands_cleanup_command.rb +13 -4
  347. data/test/rubygems/test_gem_commands_contents_command.rb +2 -4
  348. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  349. data/test/rubygems/test_gem_commands_environment_command.rb +0 -2
  350. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  351. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -2
  352. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  353. data/test/rubygems/test_gem_commands_info_command.rb +0 -2
  354. data/test/rubygems/test_gem_commands_install_command.rb +132 -3
  355. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  356. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  357. data/test/rubygems/test_gem_commands_mirror.rb +0 -2
  358. data/test/rubygems/test_gem_commands_open_command.rb +0 -2
  359. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  360. data/test/rubygems/test_gem_commands_owner_command.rb +48 -2
  361. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -4
  362. data/test/rubygems/test_gem_commands_push_command.rb +70 -7
  363. data/test/rubygems/test_gem_commands_query_command.rb +3 -7
  364. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  365. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  366. data/test/rubygems/test_gem_commands_setup_command.rb +19 -30
  367. data/test/rubygems/test_gem_commands_signin_command.rb +27 -5
  368. data/test/rubygems/test_gem_commands_signout_command.rb +0 -2
  369. data/test/rubygems/test_gem_commands_sources_command.rb +60 -2
  370. data/test/rubygems/test_gem_commands_specification_command.rb +28 -2
  371. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  372. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -2
  373. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  374. data/test/rubygems/test_gem_commands_update_command.rb +50 -4
  375. data/test/rubygems/test_gem_commands_which_command.rb +0 -2
  376. data/test/rubygems/test_gem_commands_yank_command.rb +30 -2
  377. data/test/rubygems/test_gem_config_file.rb +0 -2
  378. data/test/rubygems/test_gem_dependency.rb +0 -2
  379. data/test/rubygems/test_gem_dependency_installer.rb +38 -4
  380. data/test/rubygems/test_gem_dependency_list.rb +2 -4
  381. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -2
  382. data/test/rubygems/test_gem_doctor.rb +0 -2
  383. data/test/rubygems/test_gem_ext_builder.rb +12 -22
  384. data/test/rubygems/test_gem_ext_cmake_builder.rb +3 -11
  385. data/test/rubygems/test_gem_ext_configure_builder.rb +3 -11
  386. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -28
  387. data/test/rubygems/test_gem_ext_rake_builder.rb +30 -15
  388. data/test/rubygems/test_gem_gem_runner.rb +7 -6
  389. data/test/rubygems/test_gem_gemcutter_utilities.rb +3 -5
  390. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  391. data/test/rubygems/test_gem_indexer.rb +0 -2
  392. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  393. data/test/rubygems/test_gem_installer.rb +113 -74
  394. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  395. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  396. data/test/rubygems/test_gem_package.rb +25 -19
  397. data/test/rubygems/test_gem_package_old.rb +4 -6
  398. data/test/rubygems/test_gem_package_tar_header.rb +0 -2
  399. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  400. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  401. data/test/rubygems/test_gem_package_tar_writer.rb +1 -3
  402. data/test/rubygems/test_gem_package_task.rb +0 -2
  403. data/test/rubygems/test_gem_path_support.rb +0 -2
  404. data/test/rubygems/test_gem_platform.rb +63 -6
  405. data/test/rubygems/test_gem_rdoc.rb +0 -2
  406. data/test/rubygems/test_gem_remote_fetcher.rb +18 -23
  407. data/test/rubygems/test_gem_request.rb +2 -6
  408. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  409. data/test/rubygems/test_gem_request_set.rb +0 -2
  410. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -2
  411. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  412. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -2
  413. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -2
  414. data/test/rubygems/test_gem_requirement.rb +8 -2
  415. data/test/rubygems/test_gem_resolver.rb +0 -2
  416. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  417. data/test/rubygems/test_gem_resolver_api_set.rb +58 -57
  418. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  419. data/test/rubygems/test_gem_resolver_best_set.rb +3 -5
  420. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  421. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  422. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  423. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  424. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  425. data/test/rubygems/test_gem_resolver_index_set.rb +0 -2
  426. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  427. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  428. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -2
  429. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  430. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -2
  431. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  432. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  433. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  434. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  435. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  436. data/test/rubygems/test_gem_security.rb +2 -4
  437. data/test/rubygems/test_gem_security_policy.rb +2 -4
  438. data/test/rubygems/test_gem_security_signer.rb +2 -4
  439. data/test/rubygems/test_gem_security_trust_dir.rb +2 -4
  440. data/test/rubygems/test_gem_server.rb +0 -4
  441. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  442. data/test/rubygems/test_gem_source.rb +7 -4
  443. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  444. data/test/rubygems/test_gem_source_git.rb +0 -2
  445. data/test/rubygems/test_gem_source_installed.rb +0 -2
  446. data/test/rubygems/test_gem_source_list.rb +1 -2
  447. data/test/rubygems/test_gem_source_local.rb +0 -2
  448. data/test/rubygems/test_gem_source_lock.rb +0 -2
  449. data/test/rubygems/test_gem_source_specific_file.rb +0 -2
  450. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  451. data/test/rubygems/test_gem_source_vendor.rb +0 -2
  452. data/test/rubygems/test_gem_spec_fetcher.rb +0 -2
  453. data/test/rubygems/test_gem_specification.rb +15 -14
  454. data/test/rubygems/test_gem_stream_ui.rb +0 -2
  455. data/test/rubygems/test_gem_stub_specification.rb +4 -6
  456. data/test/rubygems/test_gem_text.rb +0 -2
  457. data/test/rubygems/test_gem_uninstaller.rb +7 -9
  458. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  459. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  460. data/test/rubygems/test_gem_util.rb +0 -2
  461. data/test/rubygems/test_gem_validator.rb +1 -3
  462. data/test/rubygems/test_gem_version.rb +0 -2
  463. data/test/rubygems/test_gem_version_option.rb +1 -3
  464. data/test/rubygems/test_kernel.rb +0 -2
  465. data/test/rubygems/test_project_sanity.rb +0 -2
  466. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  467. data/test/rubygems/test_require.rb +50 -17
  468. data/test/test_changelog_generator.rb +17 -0
  469. metadata +59 -77
  470. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  471. data/bundler/man/bundle-add.1.txt +0 -58
  472. data/bundler/man/bundle-binstubs.1.txt +0 -48
  473. data/bundler/man/bundle-cache.1.txt +0 -78
  474. data/bundler/man/bundle-check.1.txt +0 -33
  475. data/bundler/man/bundle-clean.1.txt +0 -26
  476. data/bundler/man/bundle-config.1.txt +0 -527
  477. data/bundler/man/bundle-doctor.1.txt +0 -44
  478. data/bundler/man/bundle-exec.1.txt +0 -181
  479. data/bundler/man/bundle-gem.1.txt +0 -117
  480. data/bundler/man/bundle-info.1.txt +0 -21
  481. data/bundler/man/bundle-init.1.txt +0 -34
  482. data/bundler/man/bundle-inject.1.txt +0 -32
  483. data/bundler/man/bundle-install.1.txt +0 -401
  484. data/bundler/man/bundle-list.1.txt +0 -44
  485. data/bundler/man/bundle-lock.1.txt +0 -93
  486. data/bundler/man/bundle-open.1.txt +0 -29
  487. data/bundler/man/bundle-outdated.1.txt +0 -131
  488. data/bundler/man/bundle-platform.1.txt +0 -57
  489. data/bundler/man/bundle-pristine.1.txt +0 -44
  490. data/bundler/man/bundle-remove.1.txt +0 -34
  491. data/bundler/man/bundle-show.1.txt +0 -27
  492. data/bundler/man/bundle-update.1.txt +0 -391
  493. data/bundler/man/bundle-viz.1.txt +0 -39
  494. data/bundler/man/bundle.1.txt +0 -116
  495. data/bundler/man/gemfile.5.txt +0 -651
  496. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  497. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -8,10 +8,9 @@
8
8
  require "shellwords"
9
9
 
10
10
  class Gem::Ext::RakeBuilder < Gem::Ext::Builder
11
-
12
- def self.build(extension, dest_path, results, args=[], lib_dir=nil)
11
+ def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd)
13
12
  if File.basename(extension) =~ /mkrf_conf/i
14
- run([Gem.ruby, File.basename(extension), *args], results)
13
+ run([Gem.ruby, File.basename(extension), *args], results, class_name, extension_dir)
15
14
  end
16
15
 
17
16
  rake = ENV['rake']
@@ -20,16 +19,15 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
20
19
  rake = rake.shellsplit
21
20
  else
22
21
  begin
23
- rake = [Gem.ruby, "-I#{File.expand_path("..", __dir__)}", "-rrubygems", Gem.bin_path('rake', 'rake')]
22
+ rake = [Gem.ruby, "-I#{File.expand_path("../..", __dir__)}", "-rrubygems", Gem.bin_path('rake', 'rake')]
24
23
  rescue Gem::Exception
25
24
  rake = [Gem.default_exec_format % 'rake']
26
25
  end
27
26
  end
28
27
 
29
28
  rake_args = ["RUBYARCHDIR=#{dest_path}", "RUBYLIBDIR=#{dest_path}", *args]
30
- run(rake + rake_args, results)
29
+ run(rake + rake_args, results, class_name, extension_dir)
31
30
 
32
31
  results
33
32
  end
34
-
35
33
  end
@@ -24,7 +24,6 @@ Gem.load_env_plugins rescue nil
24
24
  # classes they call directly.
25
25
 
26
26
  class Gem::GemRunner
27
-
28
27
  def initialize
29
28
  @command_manager_class = Gem::CommandManager
30
29
  @config_file_class = Gem::ConfigFile
@@ -75,7 +74,6 @@ class Gem::GemRunner
75
74
  Gem.use_paths Gem.configuration[:gemhome], Gem.configuration[:gempath]
76
75
  Gem::Command.extra_args = Gem.configuration[:gem]
77
76
  end
78
-
79
77
  end
80
78
 
81
79
  Gem.load_plugins
@@ -8,10 +8,12 @@ require 'rubygems/text'
8
8
  module Gem::GemcutterUtilities
9
9
 
10
10
  ERROR_CODE = 1
11
+ API_SCOPES = %i[index_rubygems push_rubygem yank_rubygem add_owner remove_owner access_webhooks show_dashboard].freeze
11
12
 
12
13
  include Gem::Text
13
14
 
14
15
  attr_writer :host
16
+ attr_writer :scope
15
17
 
16
18
  ##
17
19
  # Add the --key option
@@ -72,7 +74,7 @@ module Gem::GemcutterUtilities
72
74
  #
73
75
  # If +allowed_push_host+ metadata is present, then it will only allow that host.
74
76
 
75
- def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, &block)
77
+ def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, &block)
76
78
  require 'net/http'
77
79
 
78
80
  self.host = host if host
@@ -92,14 +94,18 @@ module Gem::GemcutterUtilities
92
94
  end
93
95
 
94
96
  uri = URI.parse "#{self.host}/#{path}"
97
+ response = request_with_otp(method, uri, &block)
95
98
 
96
- request_method = Net::HTTP.const_get method.to_s.capitalize
97
- response = Gem::RemoteFetcher.fetcher.request(uri, request_method, &block)
98
- return response unless mfa_unauthorized?(response)
99
+ if mfa_unauthorized?(response)
100
+ ask_otp
101
+ response = request_with_otp(method, uri, &block)
102
+ end
99
103
 
100
- Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
101
- req.add_field "OTP", get_otp
102
- block.call(req)
104
+ if api_key_forbidden?(response)
105
+ update_scope(scope)
106
+ request_with_otp(method, uri, &block)
107
+ else
108
+ response
103
109
  end
104
110
  end
105
111
 
@@ -107,24 +113,37 @@ module Gem::GemcutterUtilities
107
113
  response.kind_of?(Net::HTTPUnauthorized) && response.body.start_with?('You have enabled multifactor authentication')
108
114
  end
109
115
 
110
- def get_otp
111
- say 'You have enabled multi-factor authentication. Please enter OTP code.'
112
- ask 'Code: '
116
+ def update_scope(scope)
117
+ sign_in_host = self.host
118
+ pretty_host = pretty_host(sign_in_host)
119
+ update_scope_params = { scope => true }
120
+
121
+ say "The existing key doesn't have access of #{scope} on #{pretty_host}. Please sign in to update access."
122
+
123
+ email = ask " Email: "
124
+ password = ask_for_password "Password: "
125
+
126
+ response = rubygems_api_request(:put, "api/v1/api_key",
127
+ sign_in_host, scope: scope) do |request|
128
+ request.basic_auth email, password
129
+ request["OTP"] = options[:otp] if options[:otp]
130
+ request.body = URI.encode_www_form({:api_key => api_key }.merge(update_scope_params))
131
+ end
132
+
133
+ with_response response do |resp|
134
+ say "Added #{scope} scope to the existing API key"
135
+ end
113
136
  end
114
137
 
115
138
  ##
116
139
  # Signs in with the RubyGems API at +sign_in_host+ and sets the rubygems API
117
140
  # key.
118
141
 
119
- def sign_in(sign_in_host = nil)
142
+ def sign_in(sign_in_host = nil, scope: nil)
120
143
  sign_in_host ||= self.host
121
144
  return if api_key
122
145
 
123
- pretty_host = if Gem::DEFAULT_HOST == sign_in_host
124
- 'RubyGems.org'
125
- else
126
- sign_in_host
127
- end
146
+ pretty_host = pretty_host(sign_in_host)
128
147
 
129
148
  say "Enter your #{pretty_host} credentials."
130
149
  say "Don't have an account yet? " +
@@ -134,14 +153,18 @@ module Gem::GemcutterUtilities
134
153
  password = ask_for_password "Password: "
135
154
  say "\n"
136
155
 
137
- response = rubygems_api_request(:get, "api/v1/api_key",
138
- sign_in_host) do |request|
156
+ key_name = get_key_name(scope)
157
+ scope_params = get_scope_params(scope)
158
+
159
+ response = rubygems_api_request(:post, "api/v1/api_key",
160
+ sign_in_host, scope: scope) do |request|
139
161
  request.basic_auth email, password
140
- request.add_field "OTP", options[:otp] if options[:otp]
162
+ request["OTP"] = options[:otp] if options[:otp]
163
+ request.body = URI.encode_www_form({ name: key_name }.merge(scope_params))
141
164
  end
142
165
 
143
166
  with_response response do |resp|
144
- say "Signed in."
167
+ say "Signed in with API key: #{key_name}."
145
168
  set_api_key host, resp.body
146
169
  end
147
170
  end
@@ -195,4 +218,62 @@ module Gem::GemcutterUtilities
195
218
  end
196
219
  end
197
220
 
221
+ private
222
+
223
+ def request_with_otp(method, uri, &block)
224
+ request_method = Net::HTTP.const_get method.to_s.capitalize
225
+
226
+ Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
227
+ req["OTP"] = options[:otp] if options[:otp]
228
+ block.call(req)
229
+ end
230
+ end
231
+
232
+ def ask_otp
233
+ say 'You have enabled multi-factor authentication. Please enter OTP code.'
234
+ options[:otp] = ask 'Code: '
235
+ end
236
+
237
+ def pretty_host(host)
238
+ if Gem::DEFAULT_HOST == host
239
+ 'RubyGems.org'
240
+ else
241
+ host
242
+ end
243
+ end
244
+
245
+ def get_scope_params(scope)
246
+ scope_params = {}
247
+
248
+ if scope
249
+ scope_params = { scope => true }
250
+ else
251
+ say "Please select scopes you want to enable for the API key (y/n)"
252
+ API_SCOPES.each do |scope|
253
+ selected = ask "#{scope} [y/N]: "
254
+ scope_params[scope] = true if selected =~ /^[yY](es)?$/
255
+ end
256
+ say "\n"
257
+ end
258
+
259
+ scope_params
260
+ end
261
+
262
+ def get_key_name(scope)
263
+ hostname = Socket.gethostname || "unknown-host"
264
+ user = ENV["USER"] || ENV["USERNAME"] || "unknown-user"
265
+ ts = Time.now.strftime("%Y%m%d%H%M%S")
266
+ default_key_name = "#{hostname}-#{user}-#{ts}"
267
+
268
+ key_name = ask "API Key name [#{default_key_name}]: " unless scope
269
+ if key_name.nil? || key_name.empty?
270
+ default_key_name
271
+ else
272
+ key_name
273
+ end
274
+ end
275
+
276
+ def api_key_forbidden?(response)
277
+ response.kind_of?(Net::HTTPForbidden) && response.body.start_with?("The API key doesn't have access")
278
+ end
198
279
  end
@@ -1,14 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems'
3
3
  require 'rubygems/package'
4
- require 'time'
5
4
  require 'tmpdir'
6
5
 
7
6
  ##
8
7
  # Top level class for building the gem repository index.
9
8
 
10
9
  class Gem::Indexer
11
-
12
10
  include Gem::UserInteraction
13
11
 
14
12
  ##
@@ -424,5 +422,4 @@ class Gem::Indexer
424
422
  Marshal.dump specs_index, io
425
423
  end
426
424
  end
427
-
428
425
  end
@@ -122,10 +122,10 @@ module Gem::InstallUpdateOptions
122
122
  options[:minimal_deps] = true
123
123
  end
124
124
 
125
- add_option(:"Install/Update", "--minimal-deps",
125
+ add_option(:"Install/Update", "--[no-]minimal-deps",
126
126
  "Don't upgrade any dependencies that already",
127
127
  "meet version requirements") do |value, options|
128
- options[:minimal_deps] = true
128
+ options[:minimal_deps] = value
129
129
  end
130
130
 
131
131
  add_option(:"Install/Update", "--[no-]post-install-message",
@@ -12,7 +12,6 @@ require 'rubygems/deprecate'
12
12
  require 'rubygems/package'
13
13
  require 'rubygems/ext'
14
14
  require 'rubygems/user_interaction'
15
- require 'fileutils'
16
15
 
17
16
  ##
18
17
  # The installer installs the files contained in the .gem into the Gem.home.
@@ -28,7 +27,6 @@ require 'fileutils'
28
27
  # file. See Gem.pre_install and Gem.post_install for details.
29
28
 
30
29
  class Gem::Installer
31
-
32
30
  extend Gem::Deprecate
33
31
 
34
32
  ##
@@ -73,7 +71,6 @@ class Gem::Installer
73
71
  @install_lock = Mutex.new
74
72
 
75
73
  class << self
76
-
77
74
  ##
78
75
  # True if we've warned about PATH not including Gem.bindir
79
76
 
@@ -98,7 +95,6 @@ class Gem::Installer
98
95
  def exec_format
99
96
  @exec_format ||= Gem.default_exec_format
100
97
  end
101
-
102
98
  end
103
99
 
104
100
  ##
@@ -111,7 +107,6 @@ class Gem::Installer
111
107
  end
112
108
 
113
109
  class FakePackage
114
-
115
110
  attr_accessor :spec
116
111
 
117
112
  attr_accessor :dir_mode
@@ -137,7 +132,6 @@ class Gem::Installer
137
132
 
138
133
  def copy_to(path)
139
134
  end
140
-
141
135
  end
142
136
 
143
137
  ##
@@ -189,6 +183,7 @@ class Gem::Installer
189
183
  if options[:user_install]
190
184
  @gem_home = Gem.user_dir
191
185
  @bin_dir = Gem.bindir gem_home unless options[:bin_dir]
186
+ @plugins_dir = Gem.plugindir(gem_home)
192
187
  check_that_user_bin_dir_is_in_path
193
188
  end
194
189
  end
@@ -437,7 +432,7 @@ class Gem::Installer
437
432
  #
438
433
 
439
434
  def default_spec_file
440
- File.join Gem.default_specifications_dir, "#{spec.full_name}.gemspec"
435
+ File.join gem_home, "specifications", "default", "#{spec.full_name}.gemspec"
441
436
  end
442
437
 
443
438
  ##
@@ -496,7 +491,11 @@ class Gem::Installer
496
491
 
497
492
  mode = File.stat(bin_path).mode
498
493
  dir_mode = options[:prog_mode] || (mode | 0111)
499
- FileUtils.chmod dir_mode, bin_path unless dir_mode == mode
494
+
495
+ unless dir_mode == mode
496
+ require 'fileutils'
497
+ FileUtils.chmod dir_mode, bin_path
498
+ end
500
499
 
501
500
  check_executable_overwrite filename
502
501
 
@@ -531,6 +530,7 @@ class Gem::Installer
531
530
  def generate_bin_script(filename, bindir)
532
531
  bin_script_path = File.join bindir, formatted_program_filename(filename)
533
532
 
533
+ require 'fileutils'
534
534
  FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers
535
535
 
536
536
  File.open bin_script_path, 'wb', 0755 do |file|
@@ -638,27 +638,6 @@ class Gem::Installer
638
638
  end
639
639
  end
640
640
 
641
- def ensure_required_ruby_version_met # :nodoc:
642
- if rrv = spec.required_ruby_version
643
- ruby_version = Gem.ruby_version
644
- unless rrv.satisfied_by? ruby_version
645
- raise Gem::RuntimeRequirementNotMetError,
646
- "#{spec.name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}."
647
- end
648
- end
649
- end
650
-
651
- def ensure_required_rubygems_version_met # :nodoc:
652
- if rrgv = spec.required_rubygems_version
653
- unless rrgv.satisfied_by? Gem.rubygems_version
654
- rg_version = Gem::VERSION
655
- raise Gem::RuntimeRequirementNotMetError,
656
- "#{spec.name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " +
657
- "Try 'gem update --system' to update RubyGems itself."
658
- end
659
- end
660
- end
661
-
662
641
  def ensure_dependencies_met # :nodoc:
663
642
  deps = spec.runtime_dependencies
664
643
  deps |= spec.development_dependencies if @development
@@ -674,7 +653,7 @@ class Gem::Installer
674
653
  :env_shebang => false,
675
654
  :force => false,
676
655
  :only_install_dir => false,
677
- :post_install_message => true
656
+ :post_install_message => true,
678
657
  }.merge options
679
658
 
680
659
  @env_shebang = options[:env_shebang]
@@ -697,11 +676,10 @@ class Gem::Installer
697
676
  @build_args = options[:build_args] || Gem::Command.build_args
698
677
 
699
678
  unless @build_root.nil?
700
- require 'pathname'
701
- @build_root = Pathname.new(@build_root).expand_path
702
- @bin_dir = File.join(@build_root, options[:bin_dir] || Gem.bindir(@gem_home))
703
- @gem_home = File.join(@build_root, @gem_home)
704
- alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}"
679
+ @bin_dir = File.join(@build_root, @bin_dir.gsub(/^[a-zA-Z]:/, ''))
680
+ @gem_home = File.join(@build_root, @gem_home.gsub(/^[a-zA-Z]:/, ''))
681
+ @plugins_dir = File.join(@build_root, @plugins_dir.gsub(/^[a-zA-Z]:/, ''))
682
+ alert_warning "You build with buildroot.\n Build root: #{@build_root}\n Bin dir: #{@bin_dir}\n Gem home: #{@gem_home}\n Plugins dir: #{@plugins_dir}"
705
683
  end
706
684
  end
707
685
 
@@ -709,10 +687,11 @@ class Gem::Installer
709
687
  return if self.class.path_warning
710
688
 
711
689
  user_bin_dir = @bin_dir || Gem.bindir(gem_home)
712
- user_bin_dir = user_bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR) if
713
- File::ALT_SEPARATOR
690
+ user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
714
691
 
715
692
  path = ENV['PATH']
693
+ path = path.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
694
+
716
695
  if Gem.win_platform?
717
696
  path = path.downcase
718
697
  user_bin_dir = user_bin_dir.downcase
@@ -914,8 +893,6 @@ TEXT
914
893
 
915
894
  return true if @force
916
895
 
917
- ensure_required_ruby_version_met
918
- ensure_required_rubygems_version_met
919
896
  ensure_dependencies_met unless @ignore_dependencies
920
897
 
921
898
  true
@@ -961,5 +938,4 @@ TEXT
961
938
 
962
939
  raise Gem::FilePermissionError.new(dir) unless File.writable? dir
963
940
  end
964
-
965
941
  end
@@ -3,7 +3,6 @@ require 'rubygems/test_case'
3
3
  require 'rubygems/installer'
4
4
 
5
5
  class Gem::Installer
6
-
7
6
  ##
8
7
  # Available through requiring rubygems/installer_test_case
9
8
 
@@ -58,14 +57,12 @@ class Gem::Installer
58
57
  # Available through requiring rubygems/installer_test_case
59
58
 
60
59
  attr_writer :wrappers
61
-
62
60
  end
63
61
 
64
62
  ##
65
63
  # A test case for Gem::Installer.
66
64
 
67
65
  class Gem::InstallerTestCase < Gem::TestCase
68
-
69
66
  def setup
70
67
  super
71
68
 
@@ -111,9 +108,9 @@ class Gem::InstallerTestCase < Gem::TestCase
111
108
  #
112
109
  # And returns a Gem::Installer for the @spec that installs into @gemhome
113
110
 
114
- def setup_base_installer
111
+ def setup_base_installer(force = true)
115
112
  @gem = setup_base_gem
116
- util_installer @spec, @gemhome
113
+ util_installer @spec, @gemhome, false, force
117
114
  end
118
115
 
119
116
  ##
@@ -185,7 +182,7 @@ class Gem::InstallerTestCase < Gem::TestCase
185
182
  # lib/code.rb
186
183
  # ext/a/mkrf_conf.rb
187
184
 
188
- def util_setup_gem(ui = @ui)
185
+ def util_setup_gem(ui = @ui, force = true)
189
186
  @spec.files << File.join('lib', 'code.rb')
190
187
  @spec.extensions << File.join('ext', 'a', 'mkrf_conf.rb')
191
188
 
@@ -217,17 +214,18 @@ class Gem::InstallerTestCase < Gem::TestCase
217
214
  end
218
215
  end
219
216
 
220
- Gem::Installer.at @gem
217
+ Gem::Installer.at @gem, :force => force
221
218
  end
222
219
 
223
220
  ##
224
221
  # Creates an installer for +spec+ that will install into +gem_home+. If
225
222
  # +user+ is true a user-install will be performed.
226
223
 
227
- def util_installer(spec, gem_home, user=false)
224
+ def util_installer(spec, gem_home, user=false, force=true)
228
225
  Gem::Installer.at(spec.cache_file,
229
226
  :install_dir => gem_home,
230
- :user_install => user)
227
+ :user_install => user,
228
+ :force => force)
231
229
  end
232
230
 
233
231
  @@symlink_supported = nil
@@ -246,5 +244,4 @@ class Gem::InstallerTestCase < Gem::TestCase
246
244
  end
247
245
  @@symlink_supported
248
246
  end
249
-
250
247
  end