rubygems-update 3.1.2 → 3.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +756 -489
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +25 -11
  5. data/Manifest.txt +75 -104
  6. data/POLICIES.md +6 -12
  7. data/README.md +5 -5
  8. data/Rakefile +64 -92
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +1636 -1422
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +18 -32
  13. data/bundler/bundler.gemspec +4 -4
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +32 -8
  16. data/bundler/lib/bundler/build_metadata.rb +4 -12
  17. data/bundler/lib/bundler/cli.rb +55 -21
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  20. data/bundler/lib/bundler/cli/cache.rb +1 -7
  21. data/bundler/lib/bundler/cli/clean.rb +1 -1
  22. data/bundler/lib/bundler/cli/common.rb +14 -0
  23. data/bundler/lib/bundler/cli/console.rb +1 -1
  24. data/bundler/lib/bundler/cli/doctor.rb +1 -1
  25. data/bundler/lib/bundler/cli/exec.rb +4 -4
  26. data/bundler/lib/bundler/cli/fund.rb +36 -0
  27. data/bundler/lib/bundler/cli/gem.rb +86 -11
  28. data/bundler/lib/bundler/cli/info.rb +15 -4
  29. data/bundler/lib/bundler/cli/init.rb +2 -2
  30. data/bundler/lib/bundler/cli/inject.rb +1 -1
  31. data/bundler/lib/bundler/cli/install.rb +16 -13
  32. data/bundler/lib/bundler/cli/issue.rb +2 -2
  33. data/bundler/lib/bundler/cli/list.rb +12 -10
  34. data/bundler/lib/bundler/cli/outdated.rb +87 -66
  35. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  36. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  37. data/bundler/lib/bundler/cli/show.rb +1 -1
  38. data/bundler/lib/bundler/cli/update.rb +3 -1
  39. data/bundler/lib/bundler/compact_index_client.rb +1 -1
  40. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  41. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  42. data/bundler/lib/bundler/compact_index_client/updater.rb +5 -13
  43. data/bundler/lib/bundler/definition.rb +66 -82
  44. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  45. data/bundler/lib/bundler/dependency.rb +3 -10
  46. data/bundler/lib/bundler/dsl.rb +5 -9
  47. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  48. data/bundler/lib/bundler/env.rb +1 -1
  49. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  50. data/bundler/lib/bundler/errors.rb +1 -0
  51. data/bundler/lib/bundler/feature_flag.rb +0 -3
  52. data/bundler/lib/bundler/fetcher.rb +4 -3
  53. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  54. data/bundler/lib/bundler/fetcher/compact_index.rb +1 -1
  55. data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
  56. data/bundler/lib/bundler/fetcher/index.rb +3 -4
  57. data/bundler/lib/bundler/friendly_errors.rb +22 -13
  58. data/bundler/lib/bundler/gem_helper.rb +33 -19
  59. data/bundler/lib/bundler/gem_helpers.rb +36 -25
  60. data/bundler/lib/bundler/gem_version_promoter.rb +4 -4
  61. data/bundler/lib/bundler/graph.rb +1 -1
  62. data/bundler/lib/bundler/index.rb +6 -2
  63. data/bundler/lib/bundler/injector.rb +22 -4
  64. data/bundler/lib/bundler/inline.rb +2 -2
  65. data/bundler/lib/bundler/installer.rb +35 -32
  66. data/bundler/lib/bundler/installer/gem_installer.rb +3 -3
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +10 -10
  68. data/bundler/lib/bundler/installer/standalone.rb +2 -2
  69. data/bundler/lib/bundler/lazy_specification.rb +35 -11
  70. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  71. data/bundler/lib/bundler/lockfile_parser.rb +1 -1
  72. data/bundler/lib/bundler/man/.document +1 -0
  73. data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
  74. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
  75. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
  76. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
  77. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
  78. data/bundler/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
  79. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  80. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  81. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
  82. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  83. data/bundler/{man → lib/bundler/man}/bundle-config.1 +16 -25
  84. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
  85. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  86. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  87. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
  88. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
  89. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +25 -3
  90. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  91. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  92. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  93. data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
  94. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
  95. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
  96. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  97. data/bundler/{man → lib/bundler/man}/bundle-install.1 +30 -3
  98. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
  99. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  100. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  101. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  102. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
  104. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  105. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
  106. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  107. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
  108. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  109. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  110. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  111. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  112. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  113. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  114. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  115. data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
  116. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
  117. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
  118. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  119. data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
  120. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
  121. data/bundler/{man → lib/bundler/man}/gemfile.5 +4 -4
  122. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
  123. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  124. data/bundler/lib/bundler/mirror.rb +2 -2
  125. data/bundler/lib/bundler/plugin.rb +30 -5
  126. data/bundler/lib/bundler/plugin/api/source.rb +1 -1
  127. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  128. data/bundler/lib/bundler/plugin/index.rb +10 -1
  129. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  131. data/bundler/lib/bundler/plugin/source_list.rb +1 -1
  132. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  133. data/bundler/lib/bundler/remote_specification.rb +5 -2
  134. data/bundler/lib/bundler/resolver.rb +43 -19
  135. data/bundler/lib/bundler/resolver/spec_group.rb +39 -24
  136. data/bundler/lib/bundler/retry.rb +1 -1
  137. data/bundler/lib/bundler/ruby_version.rb +1 -1
  138. data/bundler/lib/bundler/rubygems_ext.rb +69 -9
  139. data/bundler/lib/bundler/rubygems_gem_installer.rb +3 -9
  140. data/bundler/lib/bundler/rubygems_integration.rb +26 -61
  141. data/bundler/lib/bundler/runtime.rb +4 -14
  142. data/bundler/lib/bundler/settings.rb +49 -46
  143. data/bundler/lib/bundler/shared_helpers.rb +2 -2
  144. data/bundler/lib/bundler/similarity_detector.rb +1 -1
  145. data/bundler/lib/bundler/source.rb +1 -1
  146. data/bundler/lib/bundler/source/git.rb +23 -21
  147. data/bundler/lib/bundler/source/git/git_proxy.rb +82 -80
  148. data/bundler/lib/bundler/source/path.rb +7 -3
  149. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  150. data/bundler/lib/bundler/source/rubygems.rb +23 -17
  151. data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
  152. data/bundler/lib/bundler/source_list.rb +2 -2
  153. data/bundler/lib/bundler/spec_set.rb +8 -10
  154. data/bundler/lib/bundler/stub_specification.rb +17 -7
  155. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  156. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  157. data/bundler/lib/bundler/templates/newgem/README.md.tt +1 -2
  158. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  159. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  160. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  161. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  162. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  163. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  164. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  165. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  166. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
  167. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  168. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  169. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  170. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  171. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  172. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  173. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  174. data/bundler/lib/bundler/ui/shell.rb +5 -5
  175. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -1
  176. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
  177. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
  178. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
  179. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  180. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  181. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
  182. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -208
  183. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  184. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  185. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  186. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  187. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  188. data/bundler/lib/bundler/vendored_persistent.rb +0 -7
  189. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  190. data/bundler/lib/bundler/version.rb +1 -1
  191. data/bundler/lib/bundler/worker.rb +1 -1
  192. data/bundler/lib/bundler/yaml_serializer.rb +1 -1
  193. data/lib/rubygems.rb +138 -187
  194. data/lib/rubygems/available_set.rb +4 -6
  195. data/lib/rubygems/basic_specification.rb +12 -10
  196. data/lib/rubygems/bundler_version_finder.rb +14 -9
  197. data/lib/rubygems/command.rb +17 -17
  198. data/lib/rubygems/command_manager.rb +5 -6
  199. data/lib/rubygems/commands/build_command.rb +40 -20
  200. data/lib/rubygems/commands/cert_command.rb +2 -10
  201. data/lib/rubygems/commands/check_command.rb +0 -2
  202. data/lib/rubygems/commands/cleanup_command.rb +11 -7
  203. data/lib/rubygems/commands/contents_command.rb +4 -6
  204. data/lib/rubygems/commands/dependency_command.rb +6 -8
  205. data/lib/rubygems/commands/environment_command.rb +1 -3
  206. data/lib/rubygems/commands/fetch_command.rb +2 -4
  207. data/lib/rubygems/commands/generate_index_command.rb +0 -2
  208. data/lib/rubygems/commands/help_command.rb +4 -4
  209. data/lib/rubygems/commands/info_command.rb +8 -5
  210. data/lib/rubygems/commands/install_command.rb +3 -5
  211. data/lib/rubygems/commands/list_command.rb +8 -7
  212. data/lib/rubygems/commands/lock_command.rb +1 -3
  213. data/lib/rubygems/commands/mirror_command.rb +0 -2
  214. data/lib/rubygems/commands/open_command.rb +0 -4
  215. data/lib/rubygems/commands/outdated_command.rb +0 -2
  216. data/lib/rubygems/commands/owner_command.rb +9 -4
  217. data/lib/rubygems/commands/pristine_command.rb +11 -5
  218. data/lib/rubygems/commands/push_command.rb +10 -47
  219. data/lib/rubygems/commands/query_command.rb +14 -344
  220. data/lib/rubygems/commands/rdoc_command.rb +0 -2
  221. data/lib/rubygems/commands/search_command.rb +7 -7
  222. data/lib/rubygems/commands/server_command.rb +3 -1
  223. data/lib/rubygems/commands/setup_command.rb +101 -74
  224. data/lib/rubygems/commands/signin_command.rb +0 -2
  225. data/lib/rubygems/commands/signout_command.rb +0 -2
  226. data/lib/rubygems/commands/sources_command.rb +9 -7
  227. data/lib/rubygems/commands/specification_command.rb +8 -4
  228. data/lib/rubygems/commands/stale_command.rb +1 -3
  229. data/lib/rubygems/commands/uninstall_command.rb +2 -4
  230. data/lib/rubygems/commands/unpack_command.rb +1 -3
  231. data/lib/rubygems/commands/update_command.rb +59 -14
  232. data/lib/rubygems/commands/which_command.rb +0 -2
  233. data/lib/rubygems/commands/yank_command.rb +4 -7
  234. data/lib/rubygems/config_file.rb +11 -4
  235. data/lib/rubygems/core_ext/kernel_require.rb +29 -36
  236. data/lib/rubygems/core_ext/kernel_warn.rb +12 -13
  237. data/lib/rubygems/defaults.rb +101 -7
  238. data/lib/rubygems/dependency.rb +3 -8
  239. data/lib/rubygems/dependency_installer.rb +6 -78
  240. data/lib/rubygems/dependency_list.rb +7 -9
  241. data/lib/rubygems/deprecate.rb +46 -1
  242. data/lib/rubygems/doctor.rb +4 -4
  243. data/lib/rubygems/errors.rb +3 -14
  244. data/lib/rubygems/exceptions.rb +2 -33
  245. data/lib/rubygems/ext.rb +6 -6
  246. data/lib/rubygems/ext/build_error.rb +2 -0
  247. data/lib/rubygems/ext/builder.rb +21 -39
  248. data/lib/rubygems/ext/cmake_builder.rb +6 -9
  249. data/lib/rubygems/ext/configure_builder.rb +5 -8
  250. data/lib/rubygems/ext/ext_conf_builder.rb +21 -19
  251. data/lib/rubygems/ext/rake_builder.rb +4 -6
  252. data/lib/rubygems/gem_runner.rb +3 -10
  253. data/lib/rubygems/gemcutter_utilities.rb +102 -21
  254. data/lib/rubygems/indexer.rb +1 -22
  255. data/lib/rubygems/install_update_options.rb +7 -7
  256. data/lib/rubygems/installer.rb +59 -80
  257. data/lib/rubygems/installer_test_case.rb +25 -11
  258. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  259. data/lib/rubygems/local_remote_options.rb +1 -1
  260. data/lib/rubygems/mock_gem_ui.rb +0 -6
  261. data/lib/rubygems/name_tuple.rb +3 -7
  262. data/lib/rubygems/openssl.rb +7 -0
  263. data/lib/rubygems/package.rb +14 -25
  264. data/lib/rubygems/package/digest_io.rb +0 -2
  265. data/lib/rubygems/package/file_source.rb +0 -2
  266. data/lib/rubygems/package/io_source.rb +0 -2
  267. data/lib/rubygems/package/old.rb +1 -3
  268. data/lib/rubygems/package/tar_header.rb +4 -6
  269. data/lib/rubygems/package/tar_reader.rb +0 -3
  270. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  271. data/lib/rubygems/package/tar_test_case.rb +2 -4
  272. data/lib/rubygems/package/tar_writer.rb +2 -12
  273. data/lib/rubygems/package_task.rb +1 -7
  274. data/lib/rubygems/path_support.rb +1 -3
  275. data/lib/rubygems/platform.rb +21 -16
  276. data/lib/rubygems/psych_tree.rb +0 -2
  277. data/lib/rubygems/query_utils.rb +353 -0
  278. data/lib/rubygems/rdoc.rb +0 -12
  279. data/lib/rubygems/remote_fetcher.rb +14 -29
  280. data/lib/rubygems/request.rb +4 -11
  281. data/lib/rubygems/request/connection_pools.rb +1 -5
  282. data/lib/rubygems/request/http_pool.rb +0 -2
  283. data/lib/rubygems/request/https_pool.rb +0 -2
  284. data/lib/rubygems/request_set.rb +7 -20
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +6 -8
  286. data/lib/rubygems/request_set/lockfile.rb +8 -12
  287. data/lib/rubygems/request_set/lockfile/parser.rb +0 -2
  288. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -3
  289. data/lib/rubygems/requirement.rb +21 -22
  290. data/lib/rubygems/resolver.rb +14 -12
  291. data/lib/rubygems/resolver/activation_request.rb +9 -3
  292. data/lib/rubygems/resolver/api_set.rb +31 -24
  293. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  294. data/lib/rubygems/resolver/api_specification.rb +24 -10
  295. data/lib/rubygems/resolver/best_set.rb +2 -4
  296. data/lib/rubygems/resolver/composed_set.rb +3 -5
  297. data/lib/rubygems/resolver/conflict.rb +2 -4
  298. data/lib/rubygems/resolver/current_set.rb +0 -2
  299. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  300. data/lib/rubygems/resolver/git_set.rb +0 -2
  301. data/lib/rubygems/resolver/git_specification.rb +0 -2
  302. data/lib/rubygems/resolver/index_set.rb +1 -3
  303. data/lib/rubygems/resolver/index_specification.rb +29 -2
  304. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  305. data/lib/rubygems/resolver/installer_set.rb +60 -13
  306. data/lib/rubygems/resolver/local_specification.rb +0 -2
  307. data/lib/rubygems/resolver/lock_set.rb +2 -4
  308. data/lib/rubygems/resolver/lock_specification.rb +0 -2
  309. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  310. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  311. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  312. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -5
  313. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  314. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  315. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  316. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  317. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  318. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  319. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  320. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  321. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +43 -10
  322. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +75 -7
  323. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  324. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  325. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  326. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +506 -165
  327. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  328. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  329. data/lib/rubygems/resolver/requirement_list.rb +0 -2
  330. data/lib/rubygems/resolver/set.rb +0 -2
  331. data/lib/rubygems/resolver/source_set.rb +0 -2
  332. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  333. data/lib/rubygems/resolver/specification.rb +13 -3
  334. data/lib/rubygems/resolver/stats.rb +0 -2
  335. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  336. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  337. data/lib/rubygems/s3_uri_signer.rb +2 -8
  338. data/lib/rubygems/safe_yaml.rb +4 -4
  339. data/lib/rubygems/security.rb +27 -34
  340. data/lib/rubygems/security/policy.rb +4 -8
  341. data/lib/rubygems/security/signer.rb +5 -7
  342. data/lib/rubygems/security/trust_dir.rb +1 -3
  343. data/lib/rubygems/server.rb +16 -13
  344. data/lib/rubygems/source.rb +23 -12
  345. data/lib/rubygems/source/git.rb +7 -8
  346. data/lib/rubygems/source/installed.rb +0 -2
  347. data/lib/rubygems/source/local.rb +2 -4
  348. data/lib/rubygems/source/lock.rb +0 -2
  349. data/lib/rubygems/source/specific_file.rb +0 -2
  350. data/lib/rubygems/source/vendor.rb +0 -2
  351. data/lib/rubygems/source_list.rb +4 -7
  352. data/lib/rubygems/spec_fetcher.rb +19 -18
  353. data/lib/rubygems/specification.rb +122 -131
  354. data/lib/rubygems/specification_policy.rb +88 -30
  355. data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
  356. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  357. data/lib/rubygems/stub_specification.rb +1 -5
  358. data/lib/rubygems/syck_hack.rb +0 -2
  359. data/lib/rubygems/test_case.rb +120 -134
  360. data/lib/rubygems/test_utilities.rb +12 -19
  361. data/lib/rubygems/uninstaller.rb +35 -16
  362. data/lib/rubygems/uri_formatter.rb +2 -3
  363. data/lib/rubygems/uri_parser.rb +0 -2
  364. data/lib/rubygems/user_interaction.rb +1 -26
  365. data/lib/rubygems/util.rb +15 -3
  366. data/lib/rubygems/util/licenses.rb +4 -6
  367. data/lib/rubygems/util/list.rb +0 -2
  368. data/lib/rubygems/validator.rb +1 -3
  369. data/lib/rubygems/version.rb +5 -7
  370. data/lib/rubygems/version_option.rb +6 -0
  371. data/rubygems-update.gemspec +3 -3
  372. data/setup.rb +2 -7
  373. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  374. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -2
  375. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  376. data/test/rubygems/rubygems_plugin.rb +0 -2
  377. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  378. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  379. data/test/rubygems/test_bundled_ca.rb +42 -45
  380. data/test/rubygems/test_config.rb +0 -2
  381. data/test/rubygems/test_deprecate.rb +40 -7
  382. data/test/rubygems/test_gem.rb +156 -99
  383. data/test/rubygems/test_gem_available_set.rb +3 -5
  384. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -3
  385. data/test/rubygems/test_gem_command.rb +24 -7
  386. data/test/rubygems/test_gem_command_manager.rb +36 -5
  387. data/test/rubygems/test_gem_commands_build_command.rb +250 -15
  388. data/test/rubygems/test_gem_commands_cert_command.rb +4 -6
  389. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  390. data/test/rubygems/test_gem_commands_cleanup_command.rb +14 -5
  391. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  392. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -2
  393. data/test/rubygems/test_gem_commands_environment_command.rb +21 -23
  394. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  395. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -7
  396. data/test/rubygems/test_gem_commands_help_command.rb +15 -4
  397. data/test/rubygems/test_gem_commands_info_command.rb +6 -8
  398. data/test/rubygems/test_gem_commands_install_command.rb +163 -34
  399. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  400. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  401. data/test/rubygems/test_gem_commands_mirror.rb +1 -3
  402. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  403. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -2
  404. data/test/rubygems/test_gem_commands_owner_command.rb +59 -5
  405. data/test/rubygems/test_gem_commands_pristine_command.rb +43 -12
  406. data/test/rubygems/test_gem_commands_push_command.rb +77 -9
  407. data/test/rubygems/test_gem_commands_query_command.rb +12 -12
  408. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  409. data/test/rubygems/test_gem_commands_server_command.rb +0 -2
  410. data/test/rubygems/test_gem_commands_setup_command.rb +160 -135
  411. data/test/rubygems/test_gem_commands_signin_command.rb +33 -9
  412. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  413. data/test/rubygems/test_gem_commands_sources_command.rb +99 -3
  414. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  415. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  416. data/test/rubygems/test_gem_commands_uninstall_command.rb +2 -3
  417. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  418. data/test/rubygems/test_gem_commands_update_command.rb +116 -7
  419. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  420. data/test/rubygems/test_gem_commands_yank_command.rb +44 -8
  421. data/test/rubygems/test_gem_config_file.rb +7 -12
  422. data/test/rubygems/test_gem_dependency.rb +0 -2
  423. data/test/rubygems/test_gem_dependency_installer.rb +116 -239
  424. data/test/rubygems/test_gem_dependency_list.rb +10 -12
  425. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  426. data/test/rubygems/test_gem_doctor.rb +28 -2
  427. data/test/rubygems/test_gem_ext_builder.rb +50 -47
  428. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -25
  429. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -22
  430. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +9 -29
  431. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -24
  432. data/test/rubygems/test_gem_gem_runner.rb +44 -1
  433. data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
  434. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  435. data/test/rubygems/test_gem_indexer.rb +9 -15
  436. data/test/rubygems/test_gem_install_update_options.rb +14 -4
  437. data/test/rubygems/test_gem_installer.rb +258 -115
  438. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  439. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  440. data/test/rubygems/test_gem_package.rb +41 -39
  441. data/test/rubygems/test_gem_package_old.rb +4 -6
  442. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  443. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  444. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -2
  445. data/test/rubygems/test_gem_package_tar_writer.rb +9 -6
  446. data/test/rubygems/test_gem_package_task.rb +46 -13
  447. data/test/rubygems/test_gem_path_support.rb +0 -2
  448. data/test/rubygems/test_gem_platform.rb +71 -6
  449. data/test/rubygems/test_gem_rdoc.rb +0 -2
  450. data/test/rubygems/test_gem_remote_fetcher.rb +169 -212
  451. data/test/rubygems/test_gem_request.rb +13 -17
  452. data/test/rubygems/test_gem_request_connection_pools.rb +0 -4
  453. data/test/rubygems/test_gem_request_set.rb +72 -22
  454. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -5
  455. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -6
  456. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -11
  457. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -120
  458. data/test/rubygems/test_gem_requirement.rb +43 -3
  459. data/test/rubygems/test_gem_resolver.rb +6 -8
  460. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -2
  461. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  462. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  463. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  464. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  465. data/test/rubygems/test_gem_resolver_conflict.rb +1 -3
  466. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  467. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  468. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -2
  469. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  470. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -2
  471. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -2
  472. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -9
  473. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  474. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  475. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  476. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  477. data/test/rubygems/test_gem_resolver_specification.rb +0 -4
  478. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  479. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  480. data/test/rubygems/test_gem_security.rb +22 -24
  481. data/test/rubygems/test_gem_security_policy.rb +7 -12
  482. data/test/rubygems/test_gem_security_signer.rb +10 -12
  483. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  484. data/test/rubygems/test_gem_server.rb +10 -14
  485. data/test/rubygems/test_gem_silent_ui.rb +0 -2
  486. data/test/rubygems/test_gem_source.rb +19 -18
  487. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -2
  488. data/test/rubygems/test_gem_source_git.rb +12 -13
  489. data/test/rubygems/test_gem_source_installed.rb +7 -9
  490. data/test/rubygems/test_gem_source_list.rb +1 -2
  491. data/test/rubygems/test_gem_source_local.rb +8 -10
  492. data/test/rubygems/test_gem_source_lock.rb +10 -12
  493. data/test/rubygems/test_gem_source_specific_file.rb +7 -9
  494. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  495. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  496. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  497. data/test/rubygems/test_gem_specification.rb +188 -131
  498. data/test/rubygems/test_gem_stream_ui.rb +3 -3
  499. data/test/rubygems/test_gem_stub_specification.rb +4 -7
  500. data/test/rubygems/test_gem_text.rb +1 -3
  501. data/test/rubygems/test_gem_uninstaller.rb +134 -12
  502. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  503. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  504. data/test/rubygems/test_gem_util.rb +7 -7
  505. data/test/rubygems/test_gem_validator.rb +1 -3
  506. data/test/rubygems/test_gem_version.rb +1 -3
  507. data/test/rubygems/test_gem_version_option.rb +1 -3
  508. data/test/rubygems/test_kernel.rb +25 -10
  509. data/test/rubygems/test_project_sanity.rb +7 -2
  510. data/test/rubygems/test_remote_fetch_error.rb +0 -2
  511. data/test/rubygems/test_require.rb +291 -56
  512. data/test/test_changelog_generator.rb +17 -0
  513. metadata +79 -133
  514. data/.bundle/config +0 -2
  515. data/.rubocop.yml +0 -91
  516. data/Gemfile +0 -8
  517. data/Gemfile.lock +0 -43
  518. data/bundler/CODE_OF_CONDUCT.md +0 -136
  519. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  520. data/bundler/man/bundle-add.1.txt +0 -58
  521. data/bundler/man/bundle-binstubs.1.txt +0 -48
  522. data/bundler/man/bundle-cache.1.txt +0 -78
  523. data/bundler/man/bundle-check.1.txt +0 -33
  524. data/bundler/man/bundle-clean.1.txt +0 -26
  525. data/bundler/man/bundle-config.1.txt +0 -528
  526. data/bundler/man/bundle-doctor.1.txt +0 -44
  527. data/bundler/man/bundle-exec.1.txt +0 -178
  528. data/bundler/man/bundle-gem.1.txt +0 -91
  529. data/bundler/man/bundle-info.1.txt +0 -21
  530. data/bundler/man/bundle-init.1.txt +0 -34
  531. data/bundler/man/bundle-inject.1.txt +0 -32
  532. data/bundler/man/bundle-install.1.txt +0 -401
  533. data/bundler/man/bundle-list.1.txt +0 -43
  534. data/bundler/man/bundle-lock.1.txt +0 -93
  535. data/bundler/man/bundle-open.1.txt +0 -29
  536. data/bundler/man/bundle-outdated.1.txt +0 -131
  537. data/bundler/man/bundle-platform.1.txt +0 -57
  538. data/bundler/man/bundle-pristine.1.txt +0 -44
  539. data/bundler/man/bundle-remove.1.txt +0 -34
  540. data/bundler/man/bundle-show.1.txt +0 -27
  541. data/bundler/man/bundle-update.1.txt +0 -390
  542. data/bundler/man/bundle-viz.1.txt +0 -39
  543. data/bundler/man/bundle.1.txt +0 -116
  544. data/bundler/man/gemfile.5.txt +0 -649
  545. data/lib/rubygems/source_local.rb +0 -7
  546. data/lib/rubygems/source_specific_file.rb +0 -6
  547. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  548. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  549. data/lib/ubygems.rb +0 -14
  550. data/tmp/.keep +0 -0
  551. data/util/CL2notes +0 -55
  552. data/util/bisect +0 -10
  553. data/util/ci.sh +0 -62
  554. data/util/cops/deprecations.rb +0 -52
  555. data/util/create_certs.rb +0 -171
  556. data/util/create_certs.sh +0 -27
  557. data/util/create_encrypted_key.rb +0 -16
  558. data/util/generate_spdx_license_list.rb +0 -63
  559. data/util/patch_with_prs.rb +0 -77
  560. data/util/rubocop +0 -8
  561. data/util/update_bundled_ca_certificates.rb +0 -139
  562. data/util/update_changelog.rb +0 -67
@@ -5,7 +5,6 @@ require 'rubygems/command'
5
5
  require 'rubygems/dependency_installer'
6
6
 
7
7
  class TestGemInstallUpdateOptions < Gem::InstallerTestCase
8
-
9
8
  def setup
10
9
  super
11
10
 
@@ -31,7 +30,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
31
30
 
32
31
  args.concat %w[--vendor] unless Gem.java_platform?
33
32
 
34
- args.concat %w[-P HighSecurity] if defined?(OpenSSL::SSL)
33
+ args.concat %w[-P HighSecurity] if Gem::HAVE_OPENSSL
35
34
 
36
35
  assert @cmd.handles?(args)
37
36
  end
@@ -93,7 +92,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
93
92
  end
94
93
 
95
94
  def test_security_policy
96
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
95
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
97
96
 
98
97
  @cmd.handle_options %w[-P HighSecurity]
99
98
 
@@ -101,7 +100,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
101
100
  end
102
101
 
103
102
  def test_security_policy_unknown
104
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
103
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
105
104
 
106
105
  @cmd.add_install_update_options
107
106
 
@@ -194,4 +193,15 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
194
193
  assert_equal true, @cmd.options[:post_install_message]
195
194
  end
196
195
 
196
+ def test_minimal_deps_no
197
+ @cmd.handle_options %w[--no-minimal-deps]
198
+
199
+ assert_equal false, @cmd.options[:minimal_deps]
200
+ end
201
+
202
+ def test_minimal_deps
203
+ @cmd.handle_options %w[--minimal-deps]
204
+
205
+ assert_equal true, @cmd.options[:minimal_deps]
206
+ end
197
207
  end
@@ -2,25 +2,6 @@
2
2
  require 'rubygems/installer_test_case'
3
3
 
4
4
  class TestGemInstaller < Gem::InstallerTestCase
5
-
6
- @@symlink_supported = nil
7
-
8
- # Our CI does not currently hit the "symlink not supported" case, but this is
9
- # needed for Windows developers without symlink support enabled (the default
10
- # for non admin) to be able to run the tests successfully
11
- def symlink_supported?
12
- if @@symlink_supported.nil?
13
- begin
14
- File.symlink("", "")
15
- rescue Errno::ENOENT, Errno::EEXIST
16
- @@symlink_supported = true
17
- rescue NotImplementedError, SystemCallError
18
- @@symlink_supported = false
19
- end
20
- end
21
- @@symlink_supported
22
- end
23
-
24
5
  def setup
25
6
  super
26
7
  common_installer_setup
@@ -98,11 +79,11 @@ end
98
79
  assert_path_exists installed_exec
99
80
 
100
81
  wrapper = File.read installed_exec
101
- assert_match %r|generated by RubyGems|, wrapper
82
+ assert_match %r{generated by RubyGems}, wrapper
102
83
  end
103
84
 
104
85
  def test_check_executable_overwrite_default_bin_dir
105
- installer = setup_base_installer
86
+ installer = setup_base_installer(false)
106
87
 
107
88
  bindir(Gem.bindir) do
108
89
  util_conflict_executable false
@@ -114,7 +95,7 @@ end
114
95
  end
115
96
 
116
97
  conflicted = File.join @gemhome, 'bin', 'executable'
117
- assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
98
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
118
99
  e.message
119
100
  end
120
101
  end
@@ -156,13 +137,13 @@ gem 'other', version
156
137
  assert_path_exists installed_exec
157
138
 
158
139
  wrapper = File.read installed_exec
159
- assert_match %r|generated by RubyGems|, wrapper
140
+ assert_match %r{generated by RubyGems}, wrapper
160
141
  ensure
161
142
  Gem::Installer.exec_format = nil
162
143
  end
163
144
 
164
145
  def test_check_executable_overwrite_other_gem
165
- installer = setup_base_installer
146
+ installer = setup_base_installer(false)
166
147
 
167
148
  util_conflict_executable true
168
149
 
@@ -191,7 +172,7 @@ gem 'other', version
191
172
  assert_path_exists installed_exec
192
173
 
193
174
  wrapper = File.read installed_exec
194
- assert_match %r|generated by RubyGems|, wrapper
175
+ assert_match %r{generated by RubyGems}, wrapper
195
176
  end
196
177
 
197
178
  def test_check_executable_overwrite_other_non_gem
@@ -206,7 +187,7 @@ gem 'other', version
206
187
  assert_path_exists installed_exec
207
188
 
208
189
  wrapper = File.read installed_exec
209
- assert_match %r|generated by RubyGems|, wrapper
190
+ assert_match %r{generated by RubyGems}, wrapper
210
191
  end unless Gem.win_platform?
211
192
 
212
193
  def test_check_that_user_bin_dir_is_in_path
@@ -215,7 +196,7 @@ gem 'other', version
215
196
  bin_dir = installer.bin_dir
216
197
 
217
198
  if Gem.win_platform?
218
- bin_dir = bin_dir.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
199
+ bin_dir = bin_dir.downcase
219
200
  end
220
201
 
221
202
  orig_PATH, ENV['PATH'] =
@@ -226,6 +207,16 @@ gem 'other', version
226
207
  end
227
208
 
228
209
  assert_empty @ui.error
210
+
211
+ return unless win_platform?
212
+
213
+ ENV['PATH'] = [orig_PATH, bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)].join(File::PATH_SEPARATOR)
214
+
215
+ use_ui @ui do
216
+ installer.check_that_user_bin_dir_is_in_path
217
+ end
218
+
219
+ assert_empty @ui.error
229
220
  ensure
230
221
  ENV['PATH'] = orig_PATH
231
222
  end
@@ -258,7 +249,7 @@ gem 'other', version
258
249
  expected = installer.bin_dir
259
250
 
260
251
  if Gem.win_platform?
261
- expected = expected.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
252
+ expected = expected.downcase
262
253
  end
263
254
 
264
255
  assert_match expected, @ui.error
@@ -296,7 +287,7 @@ gem 'other', version
296
287
  end
297
288
 
298
289
  def test_ensure_loadable_spec_security_policy
299
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
290
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
300
291
 
301
292
  _, a_gem = util_gem 'a', 2 do |s|
302
293
  s.add_dependency 'garbage ~> 5'
@@ -342,7 +333,7 @@ gem 'other', version
342
333
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
343
334
 
344
335
  wrapper = File.read installed_exec
345
- assert_match %r|generated by RubyGems|, wrapper
336
+ assert_match %r{generated by RubyGems}, wrapper
346
337
  end
347
338
 
348
339
  def test_generate_bin_bindir_with_user_install_warning
@@ -354,7 +345,7 @@ gem 'other', version
354
345
 
355
346
  options = {
356
347
  :bin_dir => bin_dir,
357
- :install_dir => "/non/existent"
348
+ :install_dir => "/non/existent",
358
349
  }
359
350
 
360
351
  inst = Gem::Installer.at '', options
@@ -385,7 +376,7 @@ gem 'other', version
385
376
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
386
377
 
387
378
  wrapper = File.read installed_exec
388
- assert_match %r|generated by RubyGems|, wrapper
379
+ assert_match %r{generated by RubyGems}, wrapper
389
380
  end
390
381
 
391
382
  def test_generate_bin_script_format
@@ -444,7 +435,7 @@ gem 'other', version
444
435
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
445
436
 
446
437
  wrapper = File.read installed_exec
447
- assert_match %r|generated by RubyGems|, wrapper
438
+ assert_match %r{generated by RubyGems}, wrapper
448
439
  end
449
440
 
450
441
  def test_generate_bin_script_no_execs
@@ -501,7 +492,7 @@ gem 'other', version
501
492
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
502
493
 
503
494
  wrapper = File.read installed_exec
504
- assert_match %r|generated by RubyGems|, wrapper
495
+ assert_match %r{generated by RubyGems}, wrapper
505
496
  # HACK some gems don't have #! in their executables, restore 2008/06
506
497
  #assert_no_match %r|generated by RubyGems|, wrapper
507
498
  end
@@ -527,9 +518,9 @@ gem 'other', version
527
518
  assert_path_exists installed_exec
528
519
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
529
520
 
530
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
521
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
531
522
 
532
- refute_match %r|generated by RubyGems|, File.read(real_exec),
523
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
533
524
  'real executable overwritten'
534
525
  end
535
526
 
@@ -739,11 +730,152 @@ gem 'other', version
739
730
  installer.generate_bin
740
731
 
741
732
  default_shebang = Gem.ruby
742
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
733
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
743
734
  assert_match(/\A#!/, shebang_line)
744
735
  assert_match(/#{default_shebang}/, shebang_line)
745
736
  end
746
737
 
738
+ def test_generate_plugins
739
+ installer = util_setup_installer do |spec|
740
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
741
+ io.write "puts __FILE__"
742
+ end
743
+
744
+ spec.files += %w[lib/rubygems_plugin.rb]
745
+ end
746
+
747
+ build_rake_in do
748
+ installer.install
749
+ end
750
+
751
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
752
+
753
+ FileUtils.rm plugin_path
754
+
755
+ installer.generate_plugins
756
+
757
+ assert File.exist?(plugin_path), 'plugin not written'
758
+ end
759
+
760
+ def test_generate_plugins_with_install_dir
761
+ spec = quick_gem 'a' do |s|
762
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
763
+ io.write "puts __FILE__"
764
+ end
765
+
766
+ s.files += %w[lib/rubygems_plugin.rb]
767
+ end
768
+
769
+ util_build_gem spec
770
+
771
+ plugin_path = File.join "#{@gemhome}2", 'plugins', 'a_plugin.rb'
772
+ installer = util_installer spec, "#{@gemhome}2"
773
+
774
+ assert_equal spec, installer.install
775
+
776
+ assert File.exist?(plugin_path), 'plugin not written to install_dir'
777
+ end
778
+
779
+ def test_generate_plugins_with_user_install
780
+ spec = quick_gem 'a' do |s|
781
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
782
+ io.write "puts __FILE__"
783
+ end
784
+
785
+ s.files += %w[lib/rubygems_plugin.rb]
786
+ end
787
+
788
+ util_build_gem spec
789
+
790
+ File.chmod(0555, Gem.plugindir)
791
+ system_path = File.join(Gem.plugindir, 'a_plugin.rb')
792
+ user_path = File.join(Gem.plugindir(Gem.user_dir), 'a_plugin.rb')
793
+ installer = util_installer spec, Gem.dir, :user
794
+
795
+ assert_equal spec, installer.install
796
+
797
+ assert !File.exist?(system_path), 'plugin incorrectly written to system plugins_dir'
798
+ assert File.exist?(user_path), 'plugin not written to user plugins_dir'
799
+ end
800
+
801
+ def test_generate_plugins_with_build_root
802
+ spec = quick_gem 'a' do |s|
803
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
804
+ io.write "puts __FILE__"
805
+ end
806
+
807
+ s.files += %w[lib/rubygems_plugin.rb]
808
+ end
809
+
810
+ util_build_gem spec
811
+
812
+ File.chmod(0555, Gem.plugindir)
813
+ system_path = File.join(Gem.plugindir, 'a_plugin.rb')
814
+
815
+ build_root = File.join(@tempdir, 'build_root')
816
+ build_root_path = File.join(build_root, Gem.plugindir.gsub(/^[a-zA-Z]:/, ''), 'a_plugin.rb')
817
+
818
+ installer = Gem::Installer.at spec.cache_file, :build_root => build_root
819
+
820
+ assert_equal spec, installer.install
821
+
822
+ assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir'
823
+ assert File.exist?(build_root_path), 'plugin not written to build_root'
824
+ end
825
+
826
+ def test_keeps_plugins_up_to_date
827
+ # NOTE: version a-2 is already installed by setup hooks
828
+
829
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
830
+ io.write "puts __FILE__"
831
+ end
832
+
833
+ build_rake_in do
834
+ util_setup_installer do |spec|
835
+ spec.version = '1'
836
+ spec.files += %w[lib/rubygems_plugin.rb]
837
+ end.install
838
+
839
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
840
+ refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
841
+
842
+ util_setup_installer do |spec|
843
+ spec.version = '2'
844
+ spec.files += %w[lib/rubygems_plugin.rb]
845
+ end.install
846
+
847
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
848
+ assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
849
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
850
+
851
+ util_setup_installer do |spec|
852
+ spec.version = '3'
853
+ spec.files += %w[lib/rubygems_plugin.rb]
854
+ end.install
855
+
856
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
857
+ assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
858
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
859
+
860
+ util_setup_installer do |spec|
861
+ spec.version = '4'
862
+ end.install
863
+
864
+ refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
865
+ end
866
+ end
867
+
868
+ def test_generates_plugins_dir_under_install_dir_if_not_there
869
+ Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
870
+
871
+ @spec = util_spec 'a'
872
+
873
+ path = Gem::Package.build @spec
874
+
875
+ installer = Gem::Installer.at path, :install_dir => "#{@gemhome}3"
876
+ assert_equal @spec, installer.install
877
+ end
878
+
747
879
  def test_initialize
748
880
  spec = util_spec 'a' do |s|
749
881
  s.platform = Gem::Platform.new 'mswin32'
@@ -940,7 +1072,13 @@ gem 'other', version
940
1072
  end
941
1073
 
942
1074
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
943
- install_default_gems new_default_spec('default', '2')
1075
+ default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1076
+ default_spec.executables = 'executable'
1077
+ install_default_gems default_spec
1078
+
1079
+ exe = File.join @gemhome, 'bin', 'executable'
1080
+
1081
+ assert_path_exists exe, "default gem's executable not installed"
944
1082
 
945
1083
  installer = util_setup_installer do |spec|
946
1084
  spec.name = 'default'
@@ -958,8 +1096,6 @@ gem 'other', version
958
1096
  end
959
1097
  end
960
1098
 
961
- exe = File.join @gemhome, 'bin', 'executable'
962
-
963
1099
  e = assert_raises RuntimeError do
964
1100
  instance_eval File.read(exe)
965
1101
  end
@@ -1023,7 +1159,7 @@ gem 'other', version
1023
1159
  Gem::Package.build @spec
1024
1160
  end
1025
1161
  end
1026
- installer = Gem::Installer.at @gem
1162
+ installer = Gem::Installer.at @gem, :force => true
1027
1163
  build_rake_in do
1028
1164
  use_ui @ui do
1029
1165
  assert_equal @spec, installer.install
@@ -1036,15 +1172,28 @@ gem 'other', version
1036
1172
  end
1037
1173
 
1038
1174
  def test_install_force
1175
+ _, missing_dep_gem = util_gem 'missing_dep', '1' do |s|
1176
+ s.add_dependency 'doesnt_exist', '1'
1177
+ end
1178
+
1039
1179
  use_ui @ui do
1040
- installer = Gem::Installer.at old_ruby_required('= 1.4.6'), :force => true
1180
+ installer = Gem::Installer.at missing_dep_gem, :force => true
1041
1181
  installer.install
1042
1182
  end
1043
1183
 
1044
- gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
1184
+ gem_dir = File.join(@gemhome, 'gems', 'missing_dep-1')
1045
1185
  assert_path_exists gem_dir
1046
1186
  end
1047
1187
 
1188
+ def test_install_build_root
1189
+ build_root = File.join(@tempdir, 'build_root')
1190
+
1191
+ @gem = setup_base_gem
1192
+ installer = Gem::Installer.at @gem, :build_root => build_root
1193
+
1194
+ assert_equal @spec, installer.install
1195
+ end
1196
+
1048
1197
  def test_install_missing_dirs
1049
1198
  installer = setup_base_installer
1050
1199
 
@@ -1153,7 +1302,7 @@ gem 'other', version
1153
1302
  installer.install
1154
1303
  end
1155
1304
 
1156
- assert_match %r|I am a shiny gem!|, @ui.output
1305
+ assert_match %r{I am a shiny gem!}, @ui.output
1157
1306
  end
1158
1307
 
1159
1308
  def test_install_with_skipped_message
@@ -1167,7 +1316,7 @@ gem 'other', version
1167
1316
  installer.install
1168
1317
  end
1169
1318
 
1170
- refute_match %r|I am a shiny gem!|, @ui.output
1319
+ refute_match %r{I am a shiny gem!}, @ui.output
1171
1320
  end
1172
1321
 
1173
1322
  def test_install_extension_dir
@@ -1226,7 +1375,7 @@ gem 'other', version
1226
1375
 
1227
1376
  # reinstall the gem, this is also the same as pristine
1228
1377
  use_ui @ui do
1229
- installer = Gem::Installer.at path
1378
+ installer = Gem::Installer.at path, :force => true
1230
1379
  installer.install
1231
1380
  end
1232
1381
 
@@ -1303,7 +1452,7 @@ gem 'other', version
1303
1452
  installer.install
1304
1453
  end
1305
1454
 
1306
- expected = File.join @spec.full_require_paths.find { |path|
1455
+ expected = File.join @spec.full_require_paths.find {|path|
1307
1456
  File.exist? File.join path, 'b.rb'
1308
1457
  }, 'b.rb'
1309
1458
  assert_equal expected, @spec.matches_for_glob('b.rb').first
@@ -1371,7 +1520,7 @@ gem 'other', version
1371
1520
  end
1372
1521
 
1373
1522
  # empty depend file for no auto dependencies
1374
- @spec.files += %W"depend #{@spec.name}.c".each do |file|
1523
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1375
1524
  write_file File.join(@tempdir, file)
1376
1525
  end
1377
1526
 
@@ -1426,6 +1575,7 @@ gem 'other', version
1426
1575
  installer = setup_base_installer
1427
1576
  @spec.add_dependency 'b', '> 5'
1428
1577
  installer = util_setup_gem
1578
+ installer.force = false
1429
1579
 
1430
1580
  use_ui @ui do
1431
1581
  assert_raises Gem::InstallError do
@@ -1474,54 +1624,6 @@ gem 'other', version
1474
1624
  end
1475
1625
  end
1476
1626
 
1477
- def test_pre_install_checks_ruby_version
1478
- use_ui @ui do
1479
- installer = Gem::Installer.at old_ruby_required('= 1.4.6')
1480
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1481
- installer.pre_install_checks
1482
- end
1483
- rv = Gem.ruby_version
1484
- assert_equal "old_ruby_required requires Ruby version = 1.4.6. The current ruby version is #{rv}.",
1485
- e.message
1486
- end
1487
- end
1488
-
1489
- def test_pre_install_checks_ruby_version_with_prereleases
1490
- util_set_RUBY_VERSION '2.6.0', -1, '63539', 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1491
-
1492
- installer = Gem::Installer.at old_ruby_required('>= 2.6.0.preview2')
1493
- assert installer.pre_install_checks
1494
-
1495
- installer = Gem::Installer.at old_ruby_required('> 2.6.0.preview2')
1496
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1497
- assert installer.pre_install_checks
1498
- end
1499
- assert_equal "old_ruby_required requires Ruby version > 2.6.0.preview2. The current ruby version is 2.6.0.preview2.",
1500
- e.message
1501
- ensure
1502
- util_restore_RUBY_VERSION
1503
- end
1504
-
1505
- def test_pre_install_checks_wrong_rubygems_version
1506
- spec = util_spec 'old_rubygems_required', '1' do |s|
1507
- s.required_rubygems_version = '< 0'
1508
- end
1509
-
1510
- util_build_gem spec
1511
-
1512
- gem = File.join(@gemhome, 'cache', spec.file_name)
1513
-
1514
- use_ui @ui do
1515
- installer = Gem::Installer.at gem
1516
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1517
- installer.pre_install_checks
1518
- end
1519
- rgv = Gem::VERSION
1520
- assert_equal "old_rubygems_required requires RubyGems version < 0. The current RubyGems version is #{rgv}. " +
1521
- "Try 'gem update --system' to update RubyGems itself.", e.message
1522
- end
1523
- end
1524
-
1525
1627
  def test_pre_install_checks_malicious_name
1526
1628
  spec = util_spec '../malicious', '1'
1527
1629
  def spec.full_name # so the spec is buildable
@@ -1670,13 +1772,24 @@ gem 'other', version
1670
1772
 
1671
1773
  def test_process_options_build_root
1672
1774
  build_root = File.join @tempdir, 'build_root'
1775
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1776
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1777
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1673
1778
 
1674
1779
  @gem = setup_base_gem
1675
- installer = Gem::Installer.at @gem, :build_root => build_root
1780
+ installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
1781
+
1782
+ assert_equal build_root, installer.build_root
1783
+ assert_equal bin_dir, installer.bin_dir
1784
+ assert_equal gem_home, installer.gem_home
1676
1785
 
1677
- assert_equal Pathname(build_root), installer.build_root
1678
- assert_equal File.join(build_root, @gemhome, 'bin'), installer.bin_dir
1679
- assert_equal File.join(build_root, @gemhome), installer.gem_home
1786
+ errors = @ui.error.split("\n")
1787
+
1788
+ assert_equal "WARNING: You build with buildroot.", errors.shift
1789
+ assert_equal " Build root: #{build_root}", errors.shift
1790
+ assert_equal " Bin dir: #{bin_dir}", errors.shift
1791
+ assert_equal " Gem home: #{gem_home}", errors.shift
1792
+ assert_equal " Plugins dir: #{plugins_dir}", errors.shift
1680
1793
  end
1681
1794
 
1682
1795
  def test_shebang_arguments
@@ -1726,9 +1839,9 @@ gem 'other', version
1726
1839
 
1727
1840
  shebang = installer.shebang 'executable'
1728
1841
 
1729
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1842
+ bin_env = get_bin_env
1730
1843
 
1731
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1844
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1732
1845
  shebang)
1733
1846
  end
1734
1847
 
@@ -1807,10 +1920,18 @@ gem 'other', version
1807
1920
  assert_equal "#!test", shebang
1808
1921
  end
1809
1922
 
1923
+ def get_bin_env
1924
+ if win_platform?
1925
+ ""
1926
+ else
1927
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1928
+ end
1929
+ end
1930
+
1810
1931
  def test_shebang_custom_with_expands
1811
1932
  installer = setup_base_installer
1812
1933
 
1813
- bin_env = win_platform? ? '' : '/usr/bin/env'
1934
+ bin_env = get_bin_env
1814
1935
  conf = Gem::ConfigFile.new []
1815
1936
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1816
1937
 
@@ -1826,7 +1947,7 @@ gem 'other', version
1826
1947
  def test_shebang_custom_with_expands_and_arguments
1827
1948
  installer = setup_base_installer
1828
1949
 
1829
- bin_env = win_platform? ? '' : '/usr/bin/env'
1950
+ bin_env = get_bin_env
1830
1951
  conf = Gem::ConfigFile.new []
1831
1952
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1832
1953
 
@@ -1951,7 +2072,7 @@ gem 'other', version
1951
2072
  def test_dir
1952
2073
  installer = setup_base_installer
1953
2074
 
1954
- assert_match %r!/gemhome/gems/a-2$!, installer.dir
2075
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1955
2076
  end
1956
2077
 
1957
2078
  def test_default_gem_loaded_from
@@ -1991,7 +2112,13 @@ gem 'other', version
1991
2112
  assert_path_exists installed_exec
1992
2113
 
1993
2114
  wrapper = File.read installed_exec
1994
- refute_match %r|generated by RubyGems|, wrapper
2115
+
2116
+ if symlink_supported?
2117
+ refute_match %r{generated by RubyGems}, wrapper
2118
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2119
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2120
+ assert_match %r{generated by RubyGems}, wrapper
2121
+ end
1995
2122
  end
1996
2123
 
1997
2124
  def test_default_gem_with_wrappers
@@ -2011,7 +2138,7 @@ gem 'other', version
2011
2138
  assert_path_exists installed_exec
2012
2139
 
2013
2140
  wrapper = File.read installed_exec
2014
- assert_match %r|generated by RubyGems|, wrapper
2141
+ assert_match %r{generated by RubyGems}, wrapper
2015
2142
  end
2016
2143
 
2017
2144
  def test_default_gem_with_exe_as_bindir
@@ -2044,6 +2171,23 @@ gem 'other', version
2044
2171
  assert_equal ['exe/executable'], default_spec.files
2045
2172
  end
2046
2173
 
2174
+ def test_default_gem_to_specific_install_dir
2175
+ @gem = setup_base_gem
2176
+ installer = util_installer @spec, "#{@gemhome}2"
2177
+ installer.options[:install_as_default] = true
2178
+
2179
+ use_ui @ui do
2180
+ installer.install
2181
+ end
2182
+
2183
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2184
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
2185
+
2186
+ default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2187
+ assert_equal Gem::Version.new("2"), default_spec.version
2188
+ assert_equal ['bin/executable'], default_spec.files
2189
+ end
2190
+
2047
2191
  def test_package_attribute
2048
2192
  gem = quick_gem 'c' do |spec|
2049
2193
  util_make_exec spec, '#!/usr/bin/ruby', 'exe'
@@ -2054,14 +2198,14 @@ gem 'other', version
2054
2198
  assert_kind_of(Gem::Package, installer.package)
2055
2199
  end
2056
2200
 
2057
- def old_ruby_required(requirement)
2058
- spec = util_spec 'old_ruby_required', '1' do |s|
2059
- s.required_ruby_version = requirement
2201
+ def test_gem_attribute
2202
+ gem = quick_gem 'c' do |spec|
2203
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2060
2204
  end
2061
2205
 
2062
- util_build_gem spec
2063
-
2064
- spec.cache_file
2206
+ installer = util_installer(gem, @gemhome)
2207
+ assert_respond_to(installer, :gem)
2208
+ assert_kind_of(String, installer.gem)
2065
2209
  end
2066
2210
 
2067
2211
  def util_execless
@@ -2084,7 +2228,6 @@ gem 'other', version
2084
2228
  end
2085
2229
 
2086
2230
  def mask
2087
- 0100755 & (~File.umask)
2231
+ 0100755
2088
2232
  end
2089
-
2090
2233
  end