rubygems-update 3.0.6 → 3.2.14

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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +1100 -436
  3. data/CODE_OF_CONDUCT.md +55 -19
  4. data/CONTRIBUTING.md +37 -10
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +104 -64
  7. data/POLICIES.md +6 -12
  8. data/README.md +6 -6
  9. data/Rakefile +121 -111
  10. data/bin/gem +0 -6
  11. data/bin/update_rubygems +2 -2
  12. data/bundler/CHANGELOG.md +1788 -1251
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +9 -10
  15. data/bundler/UPGRADING.md +215 -0
  16. data/bundler/bundler.gemspec +9 -26
  17. data/bundler/exe/bundle +22 -3
  18. data/bundler/lib/bundler.rb +233 -94
  19. data/bundler/lib/bundler/build_metadata.rb +5 -13
  20. data/bundler/lib/bundler/capistrano.rb +4 -4
  21. data/bundler/lib/bundler/cli.rb +221 -148
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +6 -2
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/clean.rb +1 -1
  26. data/bundler/lib/bundler/cli/common.rb +25 -12
  27. data/bundler/lib/bundler/cli/config.rb +161 -86
  28. data/bundler/lib/bundler/cli/console.rb +1 -1
  29. data/bundler/lib/bundler/cli/doctor.rb +5 -5
  30. data/bundler/lib/bundler/cli/exec.rb +8 -20
  31. data/bundler/lib/bundler/cli/fund.rb +36 -0
  32. data/bundler/lib/bundler/cli/gem.rb +125 -32
  33. data/bundler/lib/bundler/cli/info.rb +29 -6
  34. data/bundler/lib/bundler/cli/init.rb +2 -2
  35. data/bundler/lib/bundler/cli/inject.rb +1 -1
  36. data/bundler/lib/bundler/cli/install.rb +27 -23
  37. data/bundler/lib/bundler/cli/issue.rb +5 -5
  38. data/bundler/lib/bundler/cli/list.rb +12 -10
  39. data/bundler/lib/bundler/cli/open.rb +10 -6
  40. data/bundler/lib/bundler/cli/outdated.rb +134 -109
  41. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  42. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  43. data/bundler/lib/bundler/cli/show.rb +2 -2
  44. data/bundler/lib/bundler/cli/update.rb +34 -12
  45. data/bundler/lib/bundler/compact_index_client.rb +26 -10
  46. data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
  47. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  48. data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
  49. data/bundler/lib/bundler/current_ruby.rb +9 -7
  50. data/bundler/lib/bundler/definition.rb +133 -132
  51. data/bundler/lib/bundler/dep_proxy.rb +16 -9
  52. data/bundler/lib/bundler/dependency.rb +19 -14
  53. data/bundler/lib/bundler/deployment.rb +1 -1
  54. data/bundler/lib/bundler/dsl.rb +54 -71
  55. data/bundler/lib/bundler/endpoint_specification.rb +1 -1
  56. data/bundler/lib/bundler/env.rb +9 -14
  57. data/bundler/lib/bundler/environment_preserver.rb +26 -3
  58. data/bundler/lib/bundler/errors.rb +1 -0
  59. data/bundler/lib/bundler/feature_flag.rb +19 -34
  60. data/bundler/lib/bundler/fetcher.rb +19 -16
  61. data/bundler/lib/bundler/fetcher/base.rb +1 -1
  62. data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
  63. data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
  64. data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
  65. data/bundler/lib/bundler/fetcher/index.rb +8 -7
  66. data/bundler/lib/bundler/friendly_errors.rb +27 -19
  67. data/bundler/lib/bundler/gem_helper.rb +68 -37
  68. data/bundler/lib/bundler/gem_helpers.rb +38 -29
  69. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  70. data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
  71. data/bundler/lib/bundler/graph.rb +3 -3
  72. data/bundler/lib/bundler/index.rb +12 -7
  73. data/bundler/lib/bundler/injector.rb +32 -12
  74. data/bundler/lib/bundler/inline.rb +41 -30
  75. data/bundler/lib/bundler/installer.rb +41 -60
  76. data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
  77. data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
  78. data/bundler/lib/bundler/installer/standalone.rb +18 -4
  79. data/bundler/lib/bundler/lazy_specification.rb +41 -27
  80. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  81. data/bundler/lib/bundler/lockfile_parser.rb +16 -33
  82. data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  83. data/bundler/lib/bundler/man/bundle-add.1 +66 -0
  84. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
  85. data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
  86. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  87. data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
  88. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
  89. data/bundler/lib/bundler/man/bundle-check.1 +31 -0
  90. data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  91. data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
  92. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
  93. data/bundler/lib/bundler/man/bundle-config.1 +488 -0
  94. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
  95. data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
  96. data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  97. data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
  98. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
  99. data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
  100. data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
  101. data/bundler/lib/bundler/man/bundle-info.1 +20 -0
  102. data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  103. data/bundler/lib/bundler/man/bundle-init.1 +25 -0
  104. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
  105. data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
  106. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
  107. data/bundler/lib/bundler/man/bundle-install.1 +338 -0
  108. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
  109. data/bundler/lib/bundler/man/bundle-list.1 +50 -0
  110. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  111. data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
  112. data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  113. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  114. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
  115. data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
  116. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
  117. data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
  118. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
  119. data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
  120. data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  121. data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
  122. data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  123. data/bundler/lib/bundler/man/bundle-show.1 +23 -0
  124. data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  125. data/bundler/lib/bundler/man/bundle-update.1 +394 -0
  126. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
  127. data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
  128. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
  129. data/bundler/lib/bundler/man/bundle.1 +136 -0
  130. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
  131. data/bundler/lib/bundler/man/gemfile.5 +686 -0
  132. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
  133. data/bundler/lib/bundler/man/index.txt +25 -0
  134. data/bundler/lib/bundler/match_platform.rb +1 -1
  135. data/bundler/lib/bundler/mirror.rb +5 -5
  136. data/bundler/lib/bundler/plugin.rb +75 -36
  137. data/bundler/lib/bundler/plugin/api.rb +1 -1
  138. data/bundler/lib/bundler/plugin/api/source.rb +12 -7
  139. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  140. data/bundler/lib/bundler/plugin/index.rb +24 -4
  141. data/bundler/lib/bundler/plugin/installer.rb +33 -22
  142. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
  143. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  144. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  145. data/bundler/lib/bundler/remote_specification.rb +5 -4
  146. data/bundler/lib/bundler/resolver.rb +191 -87
  147. data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
  148. data/bundler/lib/bundler/retry.rb +3 -3
  149. data/bundler/lib/bundler/ruby_version.rb +5 -20
  150. data/bundler/lib/bundler/rubygems_ext.rb +76 -72
  151. data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
  152. data/bundler/lib/bundler/rubygems_integration.rb +159 -444
  153. data/bundler/lib/bundler/runtime.rb +6 -23
  154. data/bundler/lib/bundler/settings.rb +67 -93
  155. data/bundler/lib/bundler/setup.rb +11 -12
  156. data/bundler/lib/bundler/shared_helpers.rb +54 -80
  157. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  158. data/bundler/lib/bundler/source.rb +12 -6
  159. data/bundler/lib/bundler/source/git.rb +47 -38
  160. data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
  161. data/bundler/lib/bundler/source/metadata.rb +7 -6
  162. data/bundler/lib/bundler/source/path.rb +20 -11
  163. data/bundler/lib/bundler/source/path/installer.rb +10 -10
  164. data/bundler/lib/bundler/source/rubygems.rb +56 -29
  165. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  166. data/bundler/lib/bundler/source_list.rb +32 -30
  167. data/bundler/lib/bundler/spec_set.rb +37 -25
  168. data/bundler/lib/bundler/stub_specification.rb +40 -34
  169. data/bundler/lib/bundler/templates/Executable.bundler +23 -14
  170. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  171. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  172. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
  173. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
  174. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  175. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  176. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  177. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  179. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  180. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  181. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  182. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
  183. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  184. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  185. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  186. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  187. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  188. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  189. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  190. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  191. data/bundler/lib/bundler/ui.rb +3 -3
  192. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  193. data/bundler/lib/bundler/ui/shell.rb +7 -11
  194. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  195. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  196. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  197. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  198. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  199. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  200. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
  201. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
  202. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
  203. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  204. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  205. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  206. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  207. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  208. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  209. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
  210. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
  211. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
  212. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  213. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
  214. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
  215. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  216. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  217. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  218. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  219. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  220. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  221. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
  222. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  223. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  224. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  225. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
  226. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  227. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  228. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  229. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  230. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  231. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  232. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  233. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  234. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  235. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  236. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  237. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  238. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  239. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
  240. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  241. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  242. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  243. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
  244. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  245. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  246. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  247. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  248. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
  249. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  250. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
  251. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
  252. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  253. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
  254. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
  255. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  256. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  257. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
  258. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
  259. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  260. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
  261. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  262. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  263. data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
  264. data/bundler/lib/bundler/vendored_persistent.rb +7 -12
  265. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  266. data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
  267. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  268. data/bundler/lib/bundler/version.rb +1 -20
  269. data/bundler/lib/bundler/version_ranges.rb +51 -5
  270. data/bundler/lib/bundler/vlad.rb +2 -2
  271. data/bundler/lib/bundler/worker.rb +2 -4
  272. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  273. data/lib/rubygems.rb +198 -222
  274. data/lib/rubygems/available_set.rb +4 -5
  275. data/lib/rubygems/basic_specification.rb +32 -19
  276. data/lib/rubygems/bundler_version_finder.rb +19 -9
  277. data/lib/rubygems/command.rb +73 -21
  278. data/lib/rubygems/command_manager.rb +5 -12
  279. data/lib/rubygems/commands/build_command.rb +51 -18
  280. data/lib/rubygems/commands/cert_command.rb +2 -11
  281. data/lib/rubygems/commands/check_command.rb +0 -2
  282. data/lib/rubygems/commands/cleanup_command.rb +17 -13
  283. data/lib/rubygems/commands/contents_command.rb +7 -9
  284. data/lib/rubygems/commands/dependency_command.rb +9 -10
  285. data/lib/rubygems/commands/environment_command.rb +1 -6
  286. data/lib/rubygems/commands/fetch_command.rb +2 -4
  287. data/lib/rubygems/commands/generate_index_command.rb +3 -2
  288. data/lib/rubygems/commands/help_command.rb +4 -4
  289. data/lib/rubygems/commands/info_command.rb +9 -4
  290. data/lib/rubygems/commands/install_command.rb +12 -54
  291. data/lib/rubygems/commands/list_command.rb +8 -7
  292. data/lib/rubygems/commands/lock_command.rb +3 -5
  293. data/lib/rubygems/commands/mirror_command.rb +0 -1
  294. data/lib/rubygems/commands/open_command.rb +1 -4
  295. data/lib/rubygems/commands/outdated_command.rb +0 -1
  296. data/lib/rubygems/commands/owner_command.rb +10 -10
  297. data/lib/rubygems/commands/pristine_command.rb +13 -9
  298. data/lib/rubygems/commands/push_command.rb +12 -51
  299. data/lib/rubygems/commands/query_command.rb +14 -330
  300. data/lib/rubygems/commands/rdoc_command.rb +0 -1
  301. data/lib/rubygems/commands/search_command.rb +7 -7
  302. data/lib/rubygems/commands/server_command.rb +3 -1
  303. data/lib/rubygems/commands/setup_command.rb +143 -101
  304. data/lib/rubygems/commands/signin_command.rb +0 -1
  305. data/lib/rubygems/commands/signout_command.rb +0 -2
  306. data/lib/rubygems/commands/sources_command.rb +22 -6
  307. data/lib/rubygems/commands/specification_command.rb +8 -3
  308. data/lib/rubygems/commands/stale_command.rb +1 -1
  309. data/lib/rubygems/commands/uninstall_command.rb +2 -3
  310. data/lib/rubygems/commands/unpack_command.rb +3 -32
  311. data/lib/rubygems/commands/update_command.rb +73 -28
  312. data/lib/rubygems/commands/which_command.rb +0 -1
  313. data/lib/rubygems/commands/yank_command.rb +10 -7
  314. data/lib/rubygems/compatibility.rb +4 -4
  315. data/lib/rubygems/config_file.rb +48 -27
  316. data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
  317. data/lib/rubygems/core_ext/kernel_require.rb +44 -6
  318. data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
  319. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  320. data/lib/rubygems/defaults.rb +110 -23
  321. data/lib/rubygems/dependency.rb +28 -14
  322. data/lib/rubygems/dependency_installer.rb +11 -166
  323. data/lib/rubygems/dependency_list.rb +17 -18
  324. data/lib/rubygems/deprecate.rb +51 -6
  325. data/lib/rubygems/doctor.rb +4 -4
  326. data/lib/rubygems/errors.rb +5 -7
  327. data/lib/rubygems/exceptions.rb +2 -24
  328. data/lib/rubygems/ext.rb +6 -6
  329. data/lib/rubygems/ext/build_error.rb +2 -0
  330. data/lib/rubygems/ext/builder.rb +45 -82
  331. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  332. data/lib/rubygems/ext/configure_builder.rb +5 -8
  333. data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
  334. data/lib/rubygems/ext/rake_builder.rb +4 -6
  335. data/lib/rubygems/gem_runner.rb +3 -10
  336. data/lib/rubygems/gemcutter_utilities.rb +111 -37
  337. data/lib/rubygems/indexer.rb +9 -26
  338. data/lib/rubygems/install_update_options.rb +7 -7
  339. data/lib/rubygems/installer.rb +91 -98
  340. data/lib/rubygems/installer_test_case.rb +104 -42
  341. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  342. data/lib/rubygems/local_remote_options.rb +1 -1
  343. data/lib/rubygems/mock_gem_ui.rb +1 -4
  344. data/lib/rubygems/name_tuple.rb +4 -7
  345. data/lib/rubygems/openssl.rb +7 -0
  346. data/lib/rubygems/package.rb +49 -32
  347. data/lib/rubygems/package/digest_io.rb +0 -2
  348. data/lib/rubygems/package/file_source.rb +0 -2
  349. data/lib/rubygems/package/io_source.rb +0 -2
  350. data/lib/rubygems/package/old.rb +1 -3
  351. data/lib/rubygems/package/tar_header.rb +4 -6
  352. data/lib/rubygems/package/tar_reader.rb +15 -12
  353. data/lib/rubygems/package/tar_reader/entry.rb +0 -3
  354. data/lib/rubygems/package/tar_test_case.rb +2 -4
  355. data/lib/rubygems/package/tar_writer.rb +6 -16
  356. data/lib/rubygems/package_task.rb +1 -7
  357. data/lib/rubygems/path_support.rb +2 -2
  358. data/lib/rubygems/platform.rb +22 -16
  359. data/lib/rubygems/query_utils.rb +353 -0
  360. data/lib/rubygems/rdoc.rb +0 -12
  361. data/lib/rubygems/remote_fetcher.rb +33 -59
  362. data/lib/rubygems/request.rb +11 -14
  363. data/lib/rubygems/request/connection_pools.rb +3 -7
  364. data/lib/rubygems/request/http_pool.rb +0 -1
  365. data/lib/rubygems/request_set.rb +10 -23
  366. data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
  367. data/lib/rubygems/request_set/lockfile.rb +13 -12
  368. data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
  369. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  370. data/lib/rubygems/requirement.rb +36 -35
  371. data/lib/rubygems/resolver.rb +20 -16
  372. data/lib/rubygems/resolver/activation_request.rb +27 -51
  373. data/lib/rubygems/resolver/api_set.rb +31 -24
  374. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  375. data/lib/rubygems/resolver/api_specification.rb +24 -10
  376. data/lib/rubygems/resolver/best_set.rb +4 -6
  377. data/lib/rubygems/resolver/composed_set.rb +3 -5
  378. data/lib/rubygems/resolver/conflict.rb +2 -9
  379. data/lib/rubygems/resolver/current_set.rb +0 -2
  380. data/lib/rubygems/resolver/dependency_request.rb +1 -3
  381. data/lib/rubygems/resolver/git_set.rb +0 -2
  382. data/lib/rubygems/resolver/git_specification.rb +0 -2
  383. data/lib/rubygems/resolver/index_set.rb +1 -3
  384. data/lib/rubygems/resolver/index_specification.rb +32 -2
  385. data/lib/rubygems/resolver/installed_specification.rb +0 -2
  386. data/lib/rubygems/resolver/installer_set.rb +63 -16
  387. data/lib/rubygems/resolver/local_specification.rb +0 -2
  388. data/lib/rubygems/resolver/lock_set.rb +3 -5
  389. data/lib/rubygems/resolver/lock_specification.rb +2 -4
  390. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  391. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  392. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  393. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
  394. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  395. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  396. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  397. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  398. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  399. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  400. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  401. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  402. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  403. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
  404. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  405. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
  406. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  407. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  408. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  409. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  410. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  411. data/lib/rubygems/resolver/set.rb +0 -2
  412. data/lib/rubygems/resolver/source_set.rb +0 -2
  413. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  414. data/lib/rubygems/resolver/specification.rb +13 -2
  415. data/lib/rubygems/resolver/vendor_set.rb +0 -2
  416. data/lib/rubygems/resolver/vendor_specification.rb +0 -2
  417. data/lib/rubygems/s3_uri_signer.rb +15 -13
  418. data/lib/rubygems/safe_yaml.rb +4 -4
  419. data/lib/rubygems/security.rb +27 -34
  420. data/lib/rubygems/security/policy.rb +4 -8
  421. data/lib/rubygems/security/signer.rb +8 -9
  422. data/lib/rubygems/security/trust_dir.rb +1 -3
  423. data/lib/rubygems/server.rb +20 -16
  424. data/lib/rubygems/source.rb +30 -13
  425. data/lib/rubygems/source/git.rb +7 -8
  426. data/lib/rubygems/source/installed.rb +0 -2
  427. data/lib/rubygems/source/local.rb +2 -4
  428. data/lib/rubygems/source/lock.rb +0 -2
  429. data/lib/rubygems/source/specific_file.rb +0 -2
  430. data/lib/rubygems/source/vendor.rb +0 -2
  431. data/lib/rubygems/source_list.rb +6 -6
  432. data/lib/rubygems/spec_fetcher.rb +22 -34
  433. data/lib/rubygems/specification.rb +207 -278
  434. data/lib/rubygems/specification_policy.rb +135 -57
  435. data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
  436. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  437. data/lib/rubygems/stub_specification.rb +4 -5
  438. data/lib/rubygems/test_case.rb +221 -341
  439. data/lib/rubygems/test_utilities.rb +22 -18
  440. data/lib/rubygems/text.rb +2 -3
  441. data/lib/rubygems/uninstaller.rb +49 -30
  442. data/lib/rubygems/uri_formatter.rb +2 -4
  443. data/lib/rubygems/uri_parser.rb +34 -0
  444. data/lib/rubygems/uri_parsing.rb +23 -0
  445. data/lib/rubygems/user_interaction.rb +3 -20
  446. data/lib/rubygems/util.rb +20 -44
  447. data/lib/rubygems/util/licenses.rb +400 -400
  448. data/lib/rubygems/validator.rb +9 -31
  449. data/lib/rubygems/version.rb +29 -21
  450. data/lib/rubygems/version_option.rb +6 -0
  451. data/rubygems-update.gemspec +4 -11
  452. data/setup.rb +2 -7
  453. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  454. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  455. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  456. data/test/rubygems/rubygems_plugin.rb +0 -2
  457. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  458. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  459. data/test/rubygems/test_bundled_ca.rb +42 -45
  460. data/test/rubygems/test_config.rb +0 -2
  461. data/test/rubygems/test_deprecate.rb +41 -5
  462. data/test/rubygems/test_gem.rb +405 -236
  463. data/test/rubygems/test_gem_available_set.rb +5 -6
  464. data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
  465. data/test/rubygems/test_gem_command.rb +144 -9
  466. data/test/rubygems/test_gem_command_manager.rb +40 -17
  467. data/test/rubygems/test_gem_commands_build_command.rb +386 -13
  468. data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
  469. data/test/rubygems/test_gem_commands_check_command.rb +0 -2
  470. data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
  471. data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
  472. data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
  473. data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
  474. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
  475. data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
  476. data/test/rubygems/test_gem_commands_help_command.rb +16 -8
  477. data/test/rubygems/test_gem_commands_info_command.rb +6 -7
  478. data/test/rubygems/test_gem_commands_install_command.rb +368 -34
  479. data/test/rubygems/test_gem_commands_list_command.rb +0 -2
  480. data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
  481. data/test/rubygems/test_gem_commands_mirror.rb +1 -2
  482. data/test/rubygems/test_gem_commands_open_command.rb +4 -6
  483. data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
  484. data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
  485. data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
  486. data/test/rubygems/test_gem_commands_push_command.rb +94 -21
  487. data/test/rubygems/test_gem_commands_query_command.rb +35 -10
  488. data/test/rubygems/test_gem_commands_search_command.rb +0 -2
  489. data/test/rubygems/test_gem_commands_server_command.rb +6 -4
  490. data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
  491. data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
  492. data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
  493. data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
  494. data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
  495. data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
  496. data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
  497. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
  498. data/test/rubygems/test_gem_commands_update_command.rb +201 -29
  499. data/test/rubygems/test_gem_commands_which_command.rb +3 -5
  500. data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
  501. data/test/rubygems/test_gem_config_file.rb +25 -13
  502. data/test/rubygems/test_gem_dependency.rb +6 -2
  503. data/test/rubygems/test_gem_dependency_installer.rb +169 -252
  504. data/test/rubygems/test_gem_dependency_list.rb +31 -26
  505. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
  506. data/test/rubygems/test_gem_doctor.rb +28 -2
  507. data/test/rubygems/test_gem_ext_builder.rb +51 -44
  508. data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
  509. data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
  510. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
  511. data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
  512. data/test/rubygems/test_gem_gem_runner.rb +47 -2
  513. data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
  514. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
  515. data/test/rubygems/test_gem_indexer.rb +40 -55
  516. data/test/rubygems/test_gem_install_update_options.rb +45 -21
  517. data/test/rubygems/test_gem_installer.rb +661 -338
  518. data/test/rubygems/test_gem_local_remote_options.rb +0 -2
  519. data/test/rubygems/test_gem_name_tuple.rb +0 -2
  520. data/test/rubygems/test_gem_package.rb +132 -45
  521. data/test/rubygems/test_gem_package_old.rb +56 -55
  522. data/test/rubygems/test_gem_package_tar_header.rb +18 -1
  523. data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
  524. data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
  525. data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
  526. data/test/rubygems/test_gem_package_task.rb +46 -13
  527. data/test/rubygems/test_gem_path_support.rb +17 -13
  528. data/test/rubygems/test_gem_platform.rb +74 -7
  529. data/test/rubygems/test_gem_rdoc.rb +0 -1
  530. data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
  531. data/test/rubygems/test_gem_request.rb +30 -19
  532. data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
  533. data/test/rubygems/test_gem_request_set.rb +104 -29
  534. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
  535. data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
  536. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
  537. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  538. data/test/rubygems/test_gem_requirement.rb +50 -4
  539. data/test/rubygems/test_gem_resolver.rb +73 -31
  540. data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
  541. data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
  542. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
  543. data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
  544. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
  545. data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
  546. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
  547. data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
  548. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
  549. data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
  550. data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
  551. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
  552. data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
  553. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
  554. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
  555. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
  556. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
  557. data/test/rubygems/test_gem_resolver_specification.rb +0 -2
  558. data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
  559. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
  560. data/test/rubygems/test_gem_security.rb +27 -25
  561. data/test/rubygems/test_gem_security_policy.rb +7 -12
  562. data/test/rubygems/test_gem_security_signer.rb +11 -12
  563. data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
  564. data/test/rubygems/test_gem_server.rb +13 -12
  565. data/test/rubygems/test_gem_silent_ui.rb +0 -1
  566. data/test/rubygems/test_gem_source.rb +32 -17
  567. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  568. data/test/rubygems/test_gem_source_git.rb +12 -18
  569. data/test/rubygems/test_gem_source_installed.rb +11 -13
  570. data/test/rubygems/test_gem_source_list.rb +1 -1
  571. data/test/rubygems/test_gem_source_local.rb +8 -9
  572. data/test/rubygems/test_gem_source_lock.rb +17 -19
  573. data/test/rubygems/test_gem_source_specific_file.rb +9 -10
  574. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  575. data/test/rubygems/test_gem_source_vendor.rb +7 -9
  576. data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
  577. data/test/rubygems/test_gem_specification.rb +363 -245
  578. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  579. data/test/rubygems/test_gem_stub_specification.rb +6 -7
  580. data/test/rubygems/test_gem_text.rb +1 -2
  581. data/test/rubygems/test_gem_uninstaller.rb +165 -22
  582. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
  583. data/test/rubygems/test_gem_uri_formatter.rb +0 -2
  584. data/test/rubygems/test_gem_util.rb +17 -15
  585. data/test/rubygems/test_gem_validator.rb +4 -7
  586. data/test/rubygems/test_gem_version.rb +23 -10
  587. data/test/rubygems/test_gem_version_option.rb +1 -3
  588. data/test/rubygems/test_kernel.rb +25 -9
  589. data/test/rubygems/test_project_sanity.rb +20 -0
  590. data/test/rubygems/test_remote_fetch_error.rb +1 -2
  591. data/test/rubygems/test_require.rb +394 -56
  592. data/test/test_changelog_generator.rb +17 -0
  593. metadata +109 -155
  594. data/.rubocop.yml +0 -67
  595. data/.travis.yml +0 -38
  596. data/appveyor.yml +0 -43
  597. data/bundler/CODE_OF_CONDUCT.md +0 -42
  598. data/bundler/CONTRIBUTING.md +0 -17
  599. data/bundler/exe/bundle_ruby +0 -60
  600. data/bundler/lib/bundler/cli/package.rb +0 -49
  601. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  602. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  603. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  604. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  605. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  606. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  607. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  608. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  609. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  610. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  611. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  612. data/lib/rubygems/source_local.rb +0 -7
  613. data/lib/rubygems/source_specific_file.rb +0 -6
  614. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  615. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  616. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  617. data/lib/ubygems.rb +0 -14
  618. data/util/CL2notes +0 -55
  619. data/util/ci +0 -82
  620. data/util/cops/deprecations.rb +0 -52
  621. data/util/create_certs.rb +0 -171
  622. data/util/create_certs.sh +0 -27
  623. data/util/create_encrypted_key.rb +0 -16
  624. data/util/generate_spdx_license_list.rb +0 -61
  625. data/util/patch_with_prs.rb +0 -77
  626. data/util/rubocop +0 -8
  627. data/util/update_bundled_ca_certificates.rb +0 -139
  628. data/util/update_changelog.rb +0 -67
@@ -2,7 +2,6 @@
2
2
  require 'rubygems/test_case'
3
3
 
4
4
  class TestGemImpossibleDependenciesError < Gem::TestCase
5
-
6
5
  def test_message_conflict
7
6
  request = dependency_request dep('net-ssh', '>= 2.0.13'), 'rye', '0.9.8'
8
7
 
@@ -57,5 +56,4 @@ rye-0.9.8 requires net-ssh (>= 2.0.13) but it conflicted:
57
56
 
58
57
  assert_equal expected, error.message
59
58
  end
60
-
61
59
  end
@@ -2,16 +2,10 @@
2
2
  require 'rubygems/test_case'
3
3
  require 'rubygems/indexer'
4
4
 
5
- unless defined?(Builder::XChar)
6
- warn "Gem::Indexer tests are being skipped. Install builder gem." if $VERBOSE
7
- end
8
-
9
5
  class TestGemIndexer < Gem::TestCase
10
-
11
6
  def setup
12
7
  super
13
8
 
14
- util_clear_gems
15
9
  util_make_gems
16
10
 
17
11
  @d2_0 = util_spec 'd', '2.0' do |s|
@@ -28,30 +22,23 @@ class TestGemIndexer < Gem::TestCase
28
22
  @default = new_default_spec 'default', 2
29
23
  install_default_gems @default
30
24
 
31
- @tempdir = File.join(@tempdir, 'indexer')
25
+ @indexerdir = File.join(@tempdir, 'indexer')
32
26
 
33
- gems = File.join(@tempdir, 'gems')
27
+ gems = File.join(@indexerdir, 'gems')
34
28
  FileUtils.mkdir_p gems
35
29
  FileUtils.mv Dir[File.join(@gemhome, "cache", '*.gem')], gems
36
30
 
37
- @indexer = Gem::Indexer.new(@tempdir)
38
- end
39
-
40
- def teardown
41
- super
42
-
43
- util_clear_gems
44
- util_clear_default_gems
31
+ @indexer = Gem::Indexer.new(@indexerdir)
45
32
  end
46
33
 
47
34
  def test_initialize
48
- assert_equal @tempdir, @indexer.dest_directory
35
+ assert_equal @indexerdir, @indexer.dest_directory
49
36
  assert_match %r{#{Dir.mktmpdir('gem_generate_index').match(/.*-/)}}, @indexer.directory
50
37
 
51
- indexer = Gem::Indexer.new @tempdir
38
+ indexer = Gem::Indexer.new @indexerdir
52
39
  assert indexer.build_modern
53
40
 
54
- indexer = Gem::Indexer.new @tempdir, :build_modern => true
41
+ indexer = Gem::Indexer.new @indexerdir, :build_modern => true
55
42
  assert indexer.build_modern
56
43
  end
57
44
 
@@ -100,7 +87,7 @@ class TestGemIndexer < Gem::TestCase
100
87
  @indexer.generate_index
101
88
  end
102
89
 
103
- quickdir = File.join @tempdir, 'quick'
90
+ quickdir = File.join @indexerdir, 'quick'
104
91
  marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
105
92
 
106
93
  assert_directory_exists quickdir
@@ -111,11 +98,11 @@ class TestGemIndexer < Gem::TestCase
111
98
 
112
99
  refute_indexed marshal_quickdir, File.basename(@c1_2.spec_file)
113
100
 
114
- assert_indexed @tempdir, "specs.#{@marshal_version}"
115
- assert_indexed @tempdir, "specs.#{@marshal_version}.gz"
101
+ assert_indexed @indexerdir, "specs.#{@marshal_version}"
102
+ assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
116
103
 
117
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}"
118
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}.gz"
104
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
105
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
119
106
  end
120
107
 
121
108
  def test_generate_index_modern
@@ -125,12 +112,12 @@ class TestGemIndexer < Gem::TestCase
125
112
  @indexer.generate_index
126
113
  end
127
114
 
128
- refute_indexed @tempdir, 'yaml'
129
- refute_indexed @tempdir, 'yaml.Z'
130
- refute_indexed @tempdir, "Marshal.#{@marshal_version}"
131
- refute_indexed @tempdir, "Marshal.#{@marshal_version}.Z"
115
+ refute_indexed @indexerdir, 'yaml'
116
+ refute_indexed @indexerdir, 'yaml.Z'
117
+ refute_indexed @indexerdir, "Marshal.#{@marshal_version}"
118
+ refute_indexed @indexerdir, "Marshal.#{@marshal_version}.Z"
132
119
 
133
- quickdir = File.join @tempdir, 'quick'
120
+ quickdir = File.join @indexerdir, 'quick'
134
121
  marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
135
122
 
136
123
  assert_directory_exists quickdir, 'quickdir should be directory'
@@ -156,11 +143,11 @@ class TestGemIndexer < Gem::TestCase
156
143
  refute_indexed quickdir, "#{File.basename(@c1_2.spec_file)}"
157
144
  refute_indexed marshal_quickdir, "#{File.basename(@c1_2.spec_file)}"
158
145
 
159
- assert_indexed @tempdir, "specs.#{@marshal_version}"
160
- assert_indexed @tempdir, "specs.#{@marshal_version}.gz"
146
+ assert_indexed @indexerdir, "specs.#{@marshal_version}"
147
+ assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
161
148
 
162
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}"
163
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}.gz"
149
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
150
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
164
151
  end
165
152
 
166
153
  def test_generate_index_modern_back_to_back
@@ -170,13 +157,13 @@ class TestGemIndexer < Gem::TestCase
170
157
  @indexer.generate_index
171
158
  end
172
159
 
173
- @indexer = Gem::Indexer.new @tempdir
160
+ @indexer = Gem::Indexer.new @indexerdir
174
161
  @indexer.build_modern = true
175
162
 
176
163
  use_ui @ui do
177
164
  @indexer.generate_index
178
165
  end
179
- quickdir = File.join @tempdir, 'quick'
166
+ quickdir = File.join @indexerdir, 'quick'
180
167
  marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
181
168
 
182
169
  assert_directory_exists quickdir
@@ -185,11 +172,11 @@ class TestGemIndexer < Gem::TestCase
185
172
  assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
186
173
  assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
187
174
 
188
- assert_indexed @tempdir, "specs.#{@marshal_version}"
189
- assert_indexed @tempdir, "specs.#{@marshal_version}.gz"
175
+ assert_indexed @indexerdir, "specs.#{@marshal_version}"
176
+ assert_indexed @indexerdir, "specs.#{@marshal_version}.gz"
190
177
 
191
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}"
192
- assert_indexed @tempdir, "latest_specs.#{@marshal_version}.gz"
178
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}"
179
+ assert_indexed @indexerdir, "latest_specs.#{@marshal_version}.gz"
193
180
  end
194
181
 
195
182
  def test_generate_index_ui
@@ -197,15 +184,15 @@ class TestGemIndexer < Gem::TestCase
197
184
  @indexer.generate_index
198
185
  end
199
186
 
200
- assert_match %r%^\.\.\.\.\.\.\.\.\.\.\.\.$%, @ui.output
201
- assert_match %r%^Generating Marshal quick index gemspecs for 12 gems$%,
187
+ assert_match %r{^\.\.\.\.\.\.\.\.\.\.\.\.$}, @ui.output
188
+ assert_match %r{^Generating Marshal quick index gemspecs for 12 gems$},
202
189
  @ui.output
203
- assert_match %r%^Complete$%, @ui.output
204
- assert_match %r%^Generating specs index$%, @ui.output
205
- assert_match %r%^Generating latest specs index$%, @ui.output
206
- assert_match %r%^Generating prerelease specs index$%, @ui.output
207
- assert_match %r%^Complete$%, @ui.output
208
- assert_match %r%^Compressing indices$%, @ui.output
190
+ assert_match %r{^Complete$}, @ui.output
191
+ assert_match %r{^Generating specs index$}, @ui.output
192
+ assert_match %r{^Generating latest specs index$}, @ui.output
193
+ assert_match %r{^Generating prerelease specs index$}, @ui.output
194
+ assert_match %r{^Complete$}, @ui.output
195
+ assert_match %r{^Compressing indices$}, @ui.output
209
196
 
210
197
  assert_equal '', @ui.error
211
198
  end
@@ -215,7 +202,7 @@ class TestGemIndexer < Gem::TestCase
215
202
  @indexer.generate_index
216
203
  end
217
204
 
218
- specs_path = File.join @tempdir, "specs.#{@marshal_version}"
205
+ specs_path = File.join @indexerdir, "specs.#{@marshal_version}"
219
206
 
220
207
  specs_dump = Gem.read_binary specs_path
221
208
  specs = Marshal.load specs_dump
@@ -252,7 +239,7 @@ class TestGemIndexer < Gem::TestCase
252
239
  @indexer.generate_index
253
240
  end
254
241
 
255
- latest_specs_path = File.join @tempdir, "latest_specs.#{@marshal_version}"
242
+ latest_specs_path = File.join @indexerdir, "latest_specs.#{@marshal_version}"
256
243
 
257
244
  latest_specs_dump = Gem.read_binary latest_specs_path
258
245
  latest_specs = Marshal.load latest_specs_dump
@@ -282,7 +269,7 @@ class TestGemIndexer < Gem::TestCase
282
269
  @indexer.generate_index
283
270
  end
284
271
 
285
- prerelease_specs_path = File.join @tempdir, "prerelease_specs.#{@marshal_version}"
272
+ prerelease_specs_path = File.join @indexerdir, "prerelease_specs.#{@marshal_version}"
286
273
 
287
274
  prerelease_specs_dump = Gem.read_binary prerelease_specs_path
288
275
  prerelease_specs = Marshal.load prerelease_specs_dump
@@ -306,13 +293,12 @@ class TestGemIndexer < Gem::TestCase
306
293
  util_remove_gem sys_gem
307
294
  end
308
295
 
309
-
310
296
  def test_update_index
311
297
  use_ui @ui do
312
298
  @indexer.generate_index
313
299
  end
314
300
 
315
- quickdir = File.join @tempdir, 'quick'
301
+ quickdir = File.join @indexerdir, 'quick'
316
302
  marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
317
303
 
318
304
  assert_directory_exists quickdir
@@ -326,7 +312,7 @@ class TestGemIndexer < Gem::TestCase
326
312
  util_build_gem @d2_1_a
327
313
  @d2_1_a_tuple = [@d2_1_a.name, @d2_1_a.version, @d2_1_a.original_platform]
328
314
 
329
- gems = File.join @tempdir, 'gems'
315
+ gems = File.join @indexerdir, 'gems'
330
316
 
331
317
  FileUtils.mv @d2_1.cache_file, gems
332
318
  FileUtils.mv @d2_1_a.cache_file, gems
@@ -368,5 +354,4 @@ class TestGemIndexer < Gem::TestCase
368
354
  file = File.join dir, name
369
355
  refute File.exist?(file), "#{file} exists"
370
356
  end
371
-
372
- end if defined?(Builder::XChar)
357
+ end
@@ -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
 
@@ -26,11 +25,12 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
26
25
  -f
27
26
  -i /install_to
28
27
  -w
29
- --vendor
30
28
  --post-install-message
31
29
  ]
32
30
 
33
- args.concat %w[-P HighSecurity] if defined?(OpenSSL::SSL)
31
+ args.concat %w[--vendor] unless Gem.java_platform?
32
+
33
+ args.concat %w[-P HighSecurity] if Gem::HAVE_OPENSSL
34
34
 
35
35
  assert @cmd.handles?(args)
36
36
  end
@@ -92,7 +92,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
92
92
  end
93
93
 
94
94
  def test_security_policy
95
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
95
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
96
96
 
97
97
  @cmd.handle_options %w[-P HighSecurity]
98
98
 
@@ -100,7 +100,7 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
100
100
  end
101
101
 
102
102
  def test_security_policy_unknown
103
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
103
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
104
104
 
105
105
  @cmd.add_install_update_options
106
106
 
@@ -111,6 +111,13 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
111
111
  end
112
112
 
113
113
  def test_user_install_enabled
114
+ @spec = quick_gem 'a' do |spec|
115
+ util_make_exec spec
116
+ end
117
+
118
+ util_build_gem @spec
119
+ @gem = @spec.cache_file
120
+
114
121
  @cmd.handle_options %w[--user-install]
115
122
 
116
123
  assert @cmd.options[:user_install]
@@ -122,6 +129,13 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
122
129
  end
123
130
 
124
131
  def test_user_install_disabled_read_only
132
+ @spec = quick_gem 'a' do |spec|
133
+ util_make_exec spec
134
+ end
135
+
136
+ util_build_gem @spec
137
+ @gem = @spec.cache_file
138
+
125
139
  if win_platform?
126
140
  skip('test_user_install_disabled_read_only test skipped on MS Windows')
127
141
  elsif Process.uid.zero?
@@ -145,28 +159,26 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
145
159
  end
146
160
 
147
161
  def test_vendor
148
- @cmd.handle_options %w[--vendor]
162
+ vendordir(File.join(@tempdir, 'vendor')) do
163
+ @cmd.handle_options %w[--vendor]
149
164
 
150
- assert @cmd.options[:vendor]
151
- assert_equal Gem.vendor_dir, @cmd.options[:install_dir]
165
+ assert @cmd.options[:vendor]
166
+ assert_equal Gem.vendor_dir, @cmd.options[:install_dir]
167
+ end
152
168
  end
153
169
 
154
170
  def test_vendor_missing
155
- orig_vendordir = RbConfig::CONFIG['vendordir']
156
- RbConfig::CONFIG.delete 'vendordir'
157
-
158
- e = assert_raises OptionParser::InvalidOption do
159
- @cmd.handle_options %w[--vendor]
160
- end
161
-
162
- assert_equal 'invalid option: --vendor your platform is not supported',
163
- e.message
171
+ vendordir(nil) do
172
+ e = assert_raises OptionParser::InvalidOption do
173
+ @cmd.handle_options %w[--vendor]
174
+ end
164
175
 
165
- refute @cmd.options[:vendor]
166
- refute @cmd.options[:install_dir]
176
+ assert_equal 'invalid option: --vendor your platform is not supported',
177
+ e.message
167
178
 
168
- ensure
169
- RbConfig::CONFIG['vendordir'] = orig_vendordir
179
+ refute @cmd.options[:vendor]
180
+ refute @cmd.options[:install_dir]
181
+ end
170
182
  end
171
183
 
172
184
  def test_post_install_message_no
@@ -180,4 +192,16 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
180
192
 
181
193
  assert_equal true, @cmd.options[:post_install_message]
182
194
  end
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
183
207
  end
@@ -2,30 +2,10 @@
2
2
  require 'rubygems/installer_test_case'
3
3
 
4
4
  class TestGemInstaller < Gem::InstallerTestCase
5
- @@symlink_supported = nil
6
-
7
- def symlink_supported?
8
- if @@symlink_supported.nil?
9
- begin
10
- File.symlink("", "")
11
- rescue Errno::ENOENT, Errno::EEXIST
12
- @@symlink_supported = true
13
- rescue NotImplementedError, SystemCallError
14
- @@symlink_supported = false
15
- end
16
- end
17
- @@symlink_supported
18
- end
19
-
20
5
  def setup
21
6
  super
22
7
  common_installer_setup
23
8
 
24
- if (self.class.method_defined?(:__name__) ? __name__ : name) =~ /\Atest_install(_|\Z)/
25
- FileUtils.rm_r @spec.gem_dir
26
- FileUtils.rm_r @user_spec.gem_dir
27
- end
28
-
29
9
  @config = Gem.configuration
30
10
  end
31
11
 
@@ -38,6 +18,8 @@ class TestGemInstaller < Gem::InstallerTestCase
38
18
  end
39
19
 
40
20
  def test_app_script_text
21
+ installer = setup_base_installer
22
+
41
23
  util_make_exec @spec, ''
42
24
 
43
25
  expected = <<-EOF
@@ -70,12 +52,14 @@ load Gem.bin_path("a", "executable", version)
70
52
  end
71
53
  EOF
72
54
 
73
- wrapper = @installer.app_script_text 'executable'
55
+ wrapper = installer.app_script_text 'executable'
74
56
  assert_equal expected, wrapper
75
57
  end
76
58
 
77
59
  def test_check_executable_overwrite
78
- @installer.generate_bin
60
+ installer = setup_base_installer
61
+
62
+ installer.generate_bin
79
63
 
80
64
  @spec = Gem::Specification.new do |s|
81
65
  s.files = ['lib/code.rb']
@@ -87,49 +71,40 @@ end
87
71
  end
88
72
 
89
73
  util_make_exec
90
- @installer.gem_dir = @spec.gem_dir
91
- @installer.wrappers = true
92
- @installer.generate_bin
74
+ installer.gem_dir = @spec.gem_dir
75
+ installer.wrappers = true
76
+ installer.generate_bin
93
77
 
94
78
  installed_exec = File.join util_inst_bindir, 'executable'
95
79
  assert_path_exists installed_exec
96
80
 
97
81
  wrapper = File.read installed_exec
98
- assert_match %r|generated by RubyGems|, wrapper
82
+ assert_match %r{generated by RubyGems}, wrapper
99
83
  end
100
84
 
101
85
  def test_check_executable_overwrite_default_bin_dir
102
- if defined?(RUBY_FRAMEWORK_VERSION)
103
- orig_RUBY_FRAMEWORK_VERSION = RUBY_FRAMEWORK_VERSION
104
- Object.send :remove_const, :RUBY_FRAMEWORK_VERSION
105
- end
106
- orig_bindir = RbConfig::CONFIG['bindir']
107
- RbConfig::CONFIG['bindir'] = Gem.bindir
86
+ installer = setup_base_installer(false)
108
87
 
109
- util_conflict_executable false
88
+ bindir(Gem.bindir) do
89
+ util_conflict_executable false
110
90
 
111
- ui = Gem::MockGemUi.new "n\n"
112
- use_ui ui do
113
- e = assert_raises Gem::InstallError do
114
- @installer.generate_bin
115
- end
91
+ ui = Gem::MockGemUi.new "n\n"
92
+ use_ui ui do
93
+ e = assert_raises Gem::InstallError do
94
+ installer.generate_bin
95
+ end
116
96
 
117
- conflicted = File.join @gemhome, 'bin', 'executable'
118
- assert_match %r%\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z%,
119
- e.message
120
- end
121
- ensure
122
- Object.const_set :RUBY_FRAMEWORK_VERSION, orig_RUBY_FRAMEWORK_VERSION if
123
- orig_RUBY_FRAMEWORK_VERSION
124
- if orig_bindir
125
- RbConfig::CONFIG['bindir'] = orig_bindir
126
- else
127
- RbConfig::CONFIG.delete 'bindir'
97
+ conflicted = File.join @gemhome, 'bin', 'executable'
98
+ assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
99
+ e.message
100
+ end
128
101
  end
129
102
  end
130
103
 
131
104
  def test_check_executable_overwrite_format_executable
132
- @installer.generate_bin
105
+ installer = setup_base_installer
106
+
107
+ installer.generate_bin
133
108
 
134
109
  @spec = Gem::Specification.new do |s|
135
110
  s.files = ['lib/code.rb']
@@ -152,29 +127,31 @@ gem 'other', version
152
127
 
153
128
  util_make_exec
154
129
  Gem::Installer.exec_format = 'foo-%s-bar'
155
- @installer.gem_dir = @spec.gem_dir
156
- @installer.wrappers = true
157
- @installer.format_executable = true
130
+ installer.gem_dir = @spec.gem_dir
131
+ installer.wrappers = true
132
+ installer.format_executable = true
158
133
 
159
- @installer.generate_bin # should not raise
134
+ installer.generate_bin # should not raise
160
135
 
161
136
  installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
162
137
  assert_path_exists installed_exec
163
138
 
164
139
  wrapper = File.read installed_exec
165
- assert_match %r|generated by RubyGems|, wrapper
140
+ assert_match %r{generated by RubyGems}, wrapper
166
141
  ensure
167
142
  Gem::Installer.exec_format = nil
168
143
  end
169
144
 
170
145
  def test_check_executable_overwrite_other_gem
146
+ installer = setup_base_installer(false)
147
+
171
148
  util_conflict_executable true
172
149
 
173
150
  ui = Gem::MockGemUi.new "n\n"
174
151
 
175
152
  use_ui ui do
176
153
  e = assert_raises Gem::InstallError do
177
- @installer.generate_bin
154
+ installer.generate_bin
178
155
  end
179
156
 
180
157
  assert_equal '"executable" from a conflicts with installed executable from conflict',
@@ -183,44 +160,60 @@ gem 'other', version
183
160
  end
184
161
 
185
162
  def test_check_executable_overwrite_other_gem_force
163
+ installer = setup_base_installer
164
+
186
165
  util_conflict_executable true
187
- @installer.wrappers = true
188
- @installer.force = true
166
+ installer.wrappers = true
167
+ installer.force = true
189
168
 
190
- @installer.generate_bin
169
+ installer.generate_bin
191
170
 
192
171
  installed_exec = File.join util_inst_bindir, 'executable'
193
172
  assert_path_exists installed_exec
194
173
 
195
174
  wrapper = File.read installed_exec
196
- assert_match %r|generated by RubyGems|, wrapper
175
+ assert_match %r{generated by RubyGems}, wrapper
197
176
  end
198
177
 
199
178
  def test_check_executable_overwrite_other_non_gem
179
+ installer = setup_base_installer
180
+
200
181
  util_conflict_executable false
201
- @installer.wrappers = true
182
+ installer.wrappers = true
202
183
 
203
- @installer.generate_bin
184
+ installer.generate_bin
204
185
 
205
186
  installed_exec = File.join util_inst_bindir, 'executable'
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
213
- bin_dir = @installer.bin_dir
194
+ installer = setup_base_installer
195
+
196
+ bin_dir = installer.bin_dir
214
197
 
215
198
  if Gem.win_platform?
216
- bin_dir = bin_dir.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
199
+ bin_dir = bin_dir.downcase
217
200
  end
218
201
 
219
202
  orig_PATH, ENV['PATH'] =
220
203
  ENV['PATH'], [ENV['PATH'], bin_dir].join(File::PATH_SEPARATOR)
221
204
 
222
205
  use_ui @ui do
223
- @installer.check_that_user_bin_dir_is_in_path
206
+ installer.check_that_user_bin_dir_is_in_path
207
+ end
208
+
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
224
217
  end
225
218
 
226
219
  assert_empty @ui.error
@@ -234,10 +227,11 @@ gem 'other', version
234
227
  orig_PATH, ENV['PATH'] =
235
228
  ENV['PATH'], [ENV['PATH'], '~/bin'].join(File::PATH_SEPARATOR)
236
229
 
237
- @installer.bin_dir.replace File.join @userhome, 'bin'
230
+ installer = setup_base_installer
231
+ installer.bin_dir.replace File.join @userhome, 'bin'
238
232
 
239
233
  use_ui @ui do
240
- @installer.check_that_user_bin_dir_is_in_path
234
+ installer.check_that_user_bin_dir_is_in_path
241
235
  end
242
236
 
243
237
  assert_empty @ui.error
@@ -246,28 +240,32 @@ gem 'other', version
246
240
  end
247
241
 
248
242
  def test_check_that_user_bin_dir_is_in_path_not_in_path
243
+ installer = setup_base_installer
244
+
249
245
  use_ui @ui do
250
- @installer.check_that_user_bin_dir_is_in_path
246
+ installer.check_that_user_bin_dir_is_in_path
251
247
  end
252
248
 
253
- expected = @installer.bin_dir
249
+ expected = installer.bin_dir
254
250
 
255
251
  if Gem.win_platform?
256
- expected = expected.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
252
+ expected = expected.downcase
257
253
  end
258
254
 
259
255
  assert_match expected, @ui.error
260
256
  end
261
257
 
262
258
  def test_ensure_dependency
259
+ installer = setup_base_installer
260
+
263
261
  util_spec 'a'
264
262
 
265
263
  dep = Gem::Dependency.new 'a', '>= 2'
266
- assert @installer.ensure_dependency(@spec, dep)
264
+ assert installer.ensure_dependency(@spec, dep)
267
265
 
268
266
  dep = Gem::Dependency.new 'b', '> 2'
269
267
  e = assert_raises Gem::InstallError do
270
- @installer.ensure_dependency @spec, dep
268
+ installer.ensure_dependency @spec, dep
271
269
  end
272
270
 
273
271
  assert_equal 'a requires b (> 2)', e.message
@@ -289,7 +287,7 @@ gem 'other', version
289
287
  end
290
288
 
291
289
  def test_ensure_loadable_spec_security_policy
292
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
290
+ skip 'openssl is missing' unless Gem::HAVE_OPENSSL
293
291
 
294
292
  _, a_gem = util_gem 'a', 2 do |s|
295
293
  s.add_dependency 'garbage ~> 5'
@@ -304,34 +302,38 @@ gem 'other', version
304
302
  end
305
303
 
306
304
  def test_extract_files
307
- @installer.extract_files
305
+ installer = setup_base_installer
306
+
307
+ installer.extract_files
308
308
 
309
309
  assert_path_exists File.join @spec.gem_dir, 'bin/executable'
310
310
  end
311
311
 
312
312
  def test_generate_bin_bindir
313
- @installer.wrappers = true
313
+ installer = setup_base_installer
314
+
315
+ installer.wrappers = true
314
316
 
315
317
  @spec.executables = %w[executable]
316
318
  @spec.bindir = 'bin'
317
319
 
318
- exec_file = @installer.formatted_program_filename 'executable'
320
+ exec_file = installer.formatted_program_filename 'executable'
319
321
  exec_path = File.join @spec.gem_dir, exec_file
320
322
  File.open exec_path, 'w' do |f|
321
323
  f.puts '#!/usr/bin/ruby'
322
324
  end
323
325
 
324
- @installer.gem_dir = @spec.gem_dir
326
+ installer.gem_dir = @spec.gem_dir
325
327
 
326
- @installer.generate_bin
328
+ installer.generate_bin
327
329
 
328
- assert_directory_exists (util_inst_bindir)
330
+ assert_directory_exists util_inst_bindir
329
331
  installed_exec = File.join(util_inst_bindir, 'executable')
330
332
  assert_path_exists installed_exec
331
333
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
332
334
 
333
335
  wrapper = File.read installed_exec
334
- assert_match %r|generated by RubyGems|, wrapper
336
+ assert_match %r{generated by RubyGems}, wrapper
335
337
  end
336
338
 
337
339
  def test_generate_bin_bindir_with_user_install_warning
@@ -343,7 +345,7 @@ gem 'other', version
343
345
 
344
346
  options = {
345
347
  :bin_dir => bin_dir,
346
- :install_dir => "/non/existent"
348
+ :install_dir => "/non/existent",
347
349
  }
348
350
 
349
351
  inst = Gem::Installer.at '', options
@@ -361,28 +363,32 @@ gem 'other', version
361
363
  end
362
364
 
363
365
  def test_generate_bin_script
364
- @installer.wrappers = true
366
+ installer = setup_base_installer
367
+
368
+ installer.wrappers = true
365
369
  util_make_exec
366
- @installer.gem_dir = @spec.gem_dir
370
+ installer.gem_dir = @spec.gem_dir
367
371
 
368
- @installer.generate_bin
372
+ installer.generate_bin
369
373
  assert_directory_exists util_inst_bindir
370
374
  installed_exec = File.join util_inst_bindir, 'executable'
371
375
  assert_path_exists installed_exec
372
376
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
373
377
 
374
378
  wrapper = File.read installed_exec
375
- assert_match %r|generated by RubyGems|, wrapper
379
+ assert_match %r{generated by RubyGems}, wrapper
376
380
  end
377
381
 
378
382
  def test_generate_bin_script_format
379
- @installer.format_executable = true
380
- @installer.wrappers = true
383
+ installer = setup_base_installer
384
+
385
+ installer.format_executable = true
386
+ installer.wrappers = true
381
387
  util_make_exec
382
- @installer.gem_dir = @spec.gem_dir
388
+ installer.gem_dir = @spec.gem_dir
383
389
 
384
390
  Gem::Installer.exec_format = 'foo-%s-bar'
385
- @installer.generate_bin
391
+ installer.generate_bin
386
392
  assert_directory_exists util_inst_bindir
387
393
  installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
388
394
  assert_path_exists installed_exec
@@ -391,12 +397,14 @@ gem 'other', version
391
397
  end
392
398
 
393
399
  def test_generate_bin_script_format_disabled
394
- @installer.wrappers = true
400
+ installer = setup_base_installer
401
+
402
+ installer.wrappers = true
395
403
  util_make_exec
396
- @installer.gem_dir = @spec.gem_dir
404
+ installer.gem_dir = @spec.gem_dir
397
405
 
398
406
  Gem::Installer.exec_format = 'foo-%s-bar'
399
- @installer.generate_bin
407
+ installer.generate_bin
400
408
  assert_directory_exists util_inst_bindir
401
409
  installed_exec = File.join util_inst_bindir, 'executable'
402
410
  assert_path_exists installed_exec
@@ -405,7 +413,9 @@ gem 'other', version
405
413
  end
406
414
 
407
415
  def test_generate_bin_script_install_dir
408
- @installer.wrappers = true
416
+ installer = setup_base_installer
417
+
418
+ installer.wrappers = true
409
419
 
410
420
  gem_dir = File.join("#{@gemhome}2", "gems", @spec.full_name)
411
421
  gem_bindir = File.join gem_dir, 'bin'
@@ -414,31 +424,35 @@ gem 'other', version
414
424
  f.puts "#!/bin/ruby"
415
425
  end
416
426
 
417
- @installer.gem_home = "#{@gemhome}2"
418
- @installer.gem_dir = gem_dir
419
- @installer.bin_dir = File.join "#{@gemhome}2", 'bin'
427
+ installer.gem_home = "#{@gemhome}2"
428
+ installer.gem_dir = gem_dir
429
+ installer.bin_dir = File.join "#{@gemhome}2", 'bin'
420
430
 
421
- @installer.generate_bin
431
+ installer.generate_bin
422
432
 
423
433
  installed_exec = File.join("#{@gemhome}2", "bin", 'executable')
424
434
  assert_path_exists installed_exec
425
435
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
426
436
 
427
437
  wrapper = File.read installed_exec
428
- assert_match %r|generated by RubyGems|, wrapper
438
+ assert_match %r{generated by RubyGems}, wrapper
429
439
  end
430
440
 
431
441
  def test_generate_bin_script_no_execs
432
- util_execless
442
+ installer = setup_base_installer
433
443
 
434
- @installer.wrappers = true
435
- @installer.generate_bin
444
+ installer = util_execless
445
+
446
+ installer.wrappers = true
447
+ installer.generate_bin
436
448
 
437
449
  refute_path_exists util_inst_bindir, 'bin dir was created when not needed'
438
450
  end
439
451
 
440
452
  def test_generate_bin_script_no_perms
441
- @installer.wrappers = true
453
+ installer = setup_base_installer
454
+
455
+ installer.wrappers = true
442
456
  util_make_exec
443
457
 
444
458
  Dir.mkdir util_inst_bindir
@@ -451,7 +465,7 @@ gem 'other', version
451
465
  FileUtils.chmod 0000, util_inst_bindir
452
466
 
453
467
  assert_raises Gem::FilePermissionError do
454
- @installer.generate_bin
468
+ installer.generate_bin
455
469
  end
456
470
  end
457
471
  ensure
@@ -459,7 +473,9 @@ gem 'other', version
459
473
  end
460
474
 
461
475
  def test_generate_bin_script_no_shebang
462
- @installer.wrappers = true
476
+ installer = setup_base_installer
477
+
478
+ installer.wrappers = true
463
479
  @spec.executables = %w[executable]
464
480
 
465
481
  gem_dir = File.join @gemhome, 'gems', @spec.full_name
@@ -469,22 +485,24 @@ gem 'other', version
469
485
  f.puts "blah blah blah"
470
486
  end
471
487
 
472
- @installer.generate_bin
488
+ installer.generate_bin
473
489
 
474
490
  installed_exec = File.join @gemhome, 'bin', 'executable'
475
491
  assert_path_exists installed_exec
476
492
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
477
493
 
478
494
  wrapper = File.read installed_exec
479
- assert_match %r|generated by RubyGems|, wrapper
495
+ assert_match %r{generated by RubyGems}, wrapper
480
496
  # HACK some gems don't have #! in their executables, restore 2008/06
481
497
  #assert_no_match %r|generated by RubyGems|, wrapper
482
498
  end
483
499
 
484
500
  def test_generate_bin_script_wrappers
485
- @installer.wrappers = true
501
+ installer = setup_base_installer
502
+
503
+ installer.wrappers = true
486
504
  util_make_exec
487
- @installer.gem_dir = @spec.gem_dir
505
+ installer.gem_dir = @spec.gem_dir
488
506
  installed_exec = File.join(util_inst_bindir, 'executable')
489
507
 
490
508
  real_exec = File.join @spec.gem_dir, 'bin', 'executable'
@@ -495,25 +513,27 @@ gem 'other', version
495
513
  FileUtils.ln_s real_exec, installed_exec
496
514
  end
497
515
 
498
- @installer.generate_bin
516
+ installer.generate_bin
499
517
  assert_directory_exists util_inst_bindir
500
518
  assert_path_exists installed_exec
501
519
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
502
520
 
503
- assert_match %r|generated by RubyGems|, File.read(installed_exec)
521
+ assert_match %r{generated by RubyGems}, File.read(installed_exec)
504
522
 
505
- refute_match %r|generated by RubyGems|, File.read(real_exec),
523
+ refute_match %r{generated by RubyGems}, File.read(real_exec),
506
524
  'real executable overwritten'
507
525
  end
508
526
 
509
527
  def test_generate_bin_symlink
510
- return if win_platform? #Windows FS do not support symlinks
528
+ skip "Symlinks not supported or not enabled" unless symlink_supported?
511
529
 
512
- @installer.wrappers = false
530
+ installer = setup_base_installer
531
+
532
+ installer.wrappers = false
513
533
  util_make_exec
514
- @installer.gem_dir = @spec.gem_dir
534
+ installer.gem_dir = @spec.gem_dir
515
535
 
516
- @installer.generate_bin
536
+ installer.generate_bin
517
537
  assert_directory_exists util_inst_bindir
518
538
  installed_exec = File.join util_inst_bindir, 'executable'
519
539
  assert_equal true, File.symlink?(installed_exec)
@@ -522,18 +542,22 @@ gem 'other', version
522
542
  end
523
543
 
524
544
  def test_generate_bin_symlink_no_execs
525
- util_execless
545
+ installer = setup_base_installer
526
546
 
527
- @installer.wrappers = false
528
- @installer.generate_bin
547
+ installer = util_execless
548
+
549
+ installer.wrappers = false
550
+ installer.generate_bin
529
551
 
530
552
  refute_path_exists util_inst_bindir
531
553
  end
532
554
 
533
555
  def test_generate_bin_symlink_no_perms
534
- @installer.wrappers = false
556
+ installer = setup_base_installer
557
+
558
+ installer.wrappers = false
535
559
  util_make_exec
536
- @installer.gem_dir = @spec.gem_dir
560
+ installer.gem_dir = @spec.gem_dir
537
561
 
538
562
  Dir.mkdir util_inst_bindir
539
563
 
@@ -545,7 +569,7 @@ gem 'other', version
545
569
  FileUtils.chmod 0000, util_inst_bindir
546
570
 
547
571
  assert_raises Gem::FilePermissionError do
548
- @installer.generate_bin
572
+ installer.generate_bin
549
573
  end
550
574
  end
551
575
  ensure
@@ -553,13 +577,15 @@ gem 'other', version
553
577
  end
554
578
 
555
579
  def test_generate_bin_symlink_update_newer
556
- return if win_platform? #Windows FS do not support symlinks
580
+ skip "Symlinks not supported or not enabled" unless symlink_supported?
581
+
582
+ installer = setup_base_installer
557
583
 
558
- @installer.wrappers = false
584
+ installer.wrappers = false
559
585
  util_make_exec
560
- @installer.gem_dir = @spec.gem_dir
586
+ installer.gem_dir = @spec.gem_dir
561
587
 
562
- @installer.generate_bin
588
+ installer.generate_bin
563
589
  installed_exec = File.join(util_inst_bindir, 'executable')
564
590
  assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
565
591
  File.readlink(installed_exec))
@@ -574,8 +600,8 @@ gem 'other', version
574
600
  end
575
601
 
576
602
  util_make_exec
577
- @installer.gem_dir = @spec.gem_dir
578
- @installer.generate_bin
603
+ installer.gem_dir = @spec.gem_dir
604
+ installer.generate_bin
579
605
  installed_exec = File.join(util_inst_bindir, 'executable')
580
606
  assert_equal(@spec.bin_file('executable'),
581
607
  File.readlink(installed_exec),
@@ -583,13 +609,15 @@ gem 'other', version
583
609
  end
584
610
 
585
611
  def test_generate_bin_symlink_update_older
586
- return if !symlink_supported?
612
+ skip "Symlinks not supported or not enabled" unless symlink_supported?
613
+
614
+ installer = setup_base_installer
587
615
 
588
- @installer.wrappers = false
616
+ installer.wrappers = false
589
617
  util_make_exec
590
- @installer.gem_dir = @spec.gem_dir
618
+ installer.gem_dir = @spec.gem_dir
591
619
 
592
- @installer.generate_bin
620
+ installer.generate_bin
593
621
  installed_exec = File.join(util_inst_bindir, 'executable')
594
622
  assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
595
623
  File.readlink(installed_exec))
@@ -606,10 +634,10 @@ gem 'other', version
606
634
  util_make_exec
607
635
  one = @spec.dup
608
636
  one.version = 1
609
- @installer = Gem::Installer.for_spec spec
610
- @installer.gem_dir = one.gem_dir
637
+ installer = Gem::Installer.for_spec spec
638
+ installer.gem_dir = one.gem_dir
611
639
 
612
- @installer.generate_bin
640
+ installer.generate_bin
613
641
 
614
642
  installed_exec = File.join util_inst_bindir, 'executable'
615
643
  expected = File.join @spec.gem_dir, 'bin', 'executable'
@@ -619,13 +647,15 @@ gem 'other', version
619
647
  end
620
648
 
621
649
  def test_generate_bin_symlink_update_remove_wrapper
622
- return if !symlink_supported?
650
+ skip "Symlinks not supported or not enabled" unless symlink_supported?
623
651
 
624
- @installer.wrappers = true
652
+ installer = setup_base_installer
653
+
654
+ installer.wrappers = true
625
655
  util_make_exec
626
- @installer.gem_dir = @spec.gem_dir
656
+ installer.gem_dir = @spec.gem_dir
627
657
 
628
- @installer.generate_bin
658
+ installer.generate_bin
629
659
 
630
660
  installed_exec = File.join util_inst_bindir, 'executable'
631
661
  assert_path_exists installed_exec
@@ -641,10 +671,10 @@ gem 'other', version
641
671
  util_make_exec
642
672
 
643
673
  util_installer @spec, @gemhome
644
- @installer.wrappers = false
645
- @installer.gem_dir = @spec.gem_dir
674
+ installer.wrappers = false
675
+ installer.gem_dir = @spec.gem_dir
646
676
 
647
- @installer.generate_bin
677
+ installer.generate_bin
648
678
 
649
679
  installed_exec = File.join util_inst_bindir, 'executable'
650
680
  assert_equal(@spec.bin_file('executable'),
@@ -658,12 +688,15 @@ gem 'other', version
658
688
  old_alt_separator = File::ALT_SEPARATOR
659
689
  File.__send__(:remove_const, :ALT_SEPARATOR)
660
690
  File.const_set(:ALT_SEPARATOR, '\\')
661
- @installer.wrappers = false
691
+
692
+ installer = setup_base_installer
693
+
694
+ installer.wrappers = false
662
695
  util_make_exec
663
- @installer.gem_dir = @spec.gem_dir
696
+ installer.gem_dir = @spec.gem_dir
664
697
 
665
698
  use_ui @ui do
666
- @installer.generate_bin
699
+ installer.generate_bin
667
700
  end
668
701
 
669
702
  assert_directory_exists util_inst_bindir
@@ -687,21 +720,169 @@ gem 'other', version
687
720
  end
688
721
 
689
722
  def test_generate_bin_uses_default_shebang
690
- return if !symlink_supported?
723
+ skip "Symlinks not supported or not enabled" unless symlink_supported?
691
724
 
692
- @installer.wrappers = true
725
+ installer = setup_base_installer
726
+
727
+ installer.wrappers = true
693
728
  util_make_exec
694
729
 
695
- @installer.generate_bin
730
+ installer.generate_bin
696
731
 
697
732
  default_shebang = Gem.ruby
698
- shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
733
+ shebang_line = open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
699
734
  assert_match(/\A#!/, shebang_line)
700
735
  assert_match(/#{default_shebang}/, shebang_line)
701
736
  end
702
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
+
825
+ refute_includes File.read(build_root_path), build_root
826
+ end
827
+
828
+ def test_keeps_plugins_up_to_date
829
+ # NOTE: version a-2 is already installed by setup hooks
830
+
831
+ write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
832
+ io.write "puts __FILE__"
833
+ end
834
+
835
+ build_rake_in do
836
+ util_setup_installer do |spec|
837
+ spec.version = '1'
838
+ spec.files += %w[lib/rubygems_plugin.rb]
839
+ end.install
840
+
841
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
842
+ refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
843
+
844
+ util_setup_installer do |spec|
845
+ spec.version = '2'
846
+ spec.files += %w[lib/rubygems_plugin.rb]
847
+ end.install
848
+
849
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
850
+ assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
851
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
852
+
853
+ util_setup_installer do |spec|
854
+ spec.version = '3'
855
+ spec.files += %w[lib/rubygems_plugin.rb]
856
+ end.install
857
+
858
+ plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
859
+ assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
860
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
861
+
862
+ util_setup_installer do |spec|
863
+ spec.version = '4'
864
+ end.install
865
+
866
+ refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
867
+ end
868
+ end
869
+
870
+ def test_generates_plugins_dir_under_install_dir_if_not_there
871
+ Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
872
+
873
+ @spec = util_spec 'a'
874
+
875
+ path = Gem::Package.build @spec
876
+
877
+ installer = Gem::Installer.at path, :install_dir => "#{@gemhome}3"
878
+ assert_equal @spec, installer.install
879
+ end
880
+
703
881
  def test_initialize
704
- spec = util_spec 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
882
+ spec = util_spec 'a' do |s|
883
+ s.platform = Gem::Platform.new 'mswin32'
884
+ end
885
+
705
886
  gem = File.join @tempdir, spec.file_name
706
887
 
707
888
  Dir.mkdir util_inst_bindir
@@ -715,6 +896,8 @@ gem 'other', version
715
896
  end
716
897
 
717
898
  def test_initialize_user_install
899
+ @gem = setup_base_gem
900
+
718
901
  installer = Gem::Installer.at @gem, :user_install => true
719
902
 
720
903
  assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
@@ -723,6 +906,8 @@ gem 'other', version
723
906
  end
724
907
 
725
908
  def test_initialize_user_install_bin_dir
909
+ @gem = setup_base_gem
910
+
726
911
  installer =
727
912
  Gem::Installer.at @gem, :user_install => true, :bin_dir => @tempdir
728
913
 
@@ -732,9 +917,7 @@ gem 'other', version
732
917
  end
733
918
 
734
919
  def test_install
735
- Dir.mkdir util_inst_bindir
736
- util_setup_gem
737
- util_clear_gems
920
+ installer = util_setup_installer
738
921
 
739
922
  gemdir = File.join @gemhome, 'gems', @spec.full_name
740
923
  cache_file = File.join @gemhome, 'cache', @spec.file_name
@@ -764,7 +947,7 @@ gem 'other', version
764
947
  @newspec = nil
765
948
  build_rake_in do
766
949
  use_ui @ui do
767
- @newspec = @installer.install
950
+ @newspec = installer.install
768
951
  end
769
952
  end
770
953
 
@@ -782,29 +965,25 @@ gem 'other', version
782
965
 
783
966
  assert_path_exists rakefile
784
967
 
785
- spec_file = File.join(@gemhome, 'specifications', @spec.spec_name)
786
-
787
968
  assert_equal spec_file, @newspec.loaded_from
788
969
  assert_path_exists spec_file
789
970
 
790
- assert_same @installer, @post_build_hook_arg
791
- assert_same @installer, @post_install_hook_arg
792
- assert_same @installer, @pre_install_hook_arg
971
+ assert_same installer, @post_build_hook_arg
972
+ assert_same installer, @post_install_hook_arg
973
+ assert_same installer, @pre_install_hook_arg
793
974
  end
794
975
 
795
976
  def test_install_creates_working_binstub
796
- Dir.mkdir util_inst_bindir
797
- util_setup_gem
798
- util_clear_gems
977
+ installer = util_setup_installer
799
978
 
800
- @installer.wrappers = true
979
+ installer.wrappers = true
801
980
 
802
981
  gemdir = File.join @gemhome, 'gems', @spec.full_name
803
982
 
804
983
  @newspec = nil
805
984
  build_rake_in do
806
985
  use_ui @ui do
807
- @newspec = @installer.install
986
+ @newspec = installer.install
808
987
  end
809
988
  end
810
989
 
@@ -818,11 +997,10 @@ gem 'other', version
818
997
  end
819
998
 
820
999
  def test_conflicting_binstubs
821
- Dir.mkdir util_inst_bindir
822
- util_clear_gems
1000
+ @gem = setup_base_gem
823
1001
 
824
1002
  # build old version that has a bin file
825
- util_setup_gem do |spec|
1003
+ installer = util_setup_gem do |spec|
826
1004
  File.open File.join('bin', 'executable'), 'w' do |f|
827
1005
  f.puts "require 'code'"
828
1006
  end
@@ -831,17 +1009,17 @@ gem 'other', version
831
1009
  end
832
1010
  end
833
1011
 
834
- @installer.wrappers = true
1012
+ installer.wrappers = true
835
1013
  build_rake_in do
836
1014
  use_ui @ui do
837
- @newspec = @installer.install
1015
+ @newspec = installer.install
838
1016
  end
839
1017
  end
840
1018
 
841
- old_bin_file = File.join @installer.bin_dir, 'executable'
1019
+ old_bin_file = File.join installer.bin_dir, 'executable'
842
1020
 
843
1021
  # build new version that doesn't have a bin file
844
- util_setup_gem do |spec|
1022
+ installer = util_setup_gem do |spec|
845
1023
  FileUtils.rm File.join('bin', 'executable')
846
1024
  spec.files.delete File.join('bin', 'executable')
847
1025
  spec.executables.delete 'executable'
@@ -853,7 +1031,7 @@ gem 'other', version
853
1031
 
854
1032
  build_rake_in do
855
1033
  use_ui @ui do
856
- @newspec = @installer.install
1034
+ @newspec = installer.install
857
1035
  end
858
1036
  end
859
1037
 
@@ -867,16 +1045,14 @@ gem 'other', version
867
1045
  end
868
1046
 
869
1047
  def test_install_creates_binstub_that_understand_version
870
- Dir.mkdir util_inst_bindir
871
- util_setup_gem
872
- util_clear_gems
1048
+ installer = util_setup_installer
873
1049
 
874
- @installer.wrappers = true
1050
+ installer.wrappers = true
875
1051
 
876
1052
  @newspec = nil
877
1053
  build_rake_in do
878
1054
  use_ui @ui do
879
- @newspec = @installer.install
1055
+ @newspec = installer.install
880
1056
  end
881
1057
  end
882
1058
 
@@ -897,17 +1073,47 @@ gem 'other', version
897
1073
  assert_includes(e.message, "can't find gem a (= 3.0)")
898
1074
  end
899
1075
 
900
- def test_install_creates_binstub_that_dont_trust_encoding
901
- Dir.mkdir util_inst_bindir
902
- util_setup_gem
1076
+ def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
1077
+ default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1078
+ default_spec.executables = 'executable'
1079
+ install_default_gems default_spec
1080
+
1081
+ exe = File.join @gemhome, 'bin', 'executable'
1082
+
1083
+ assert_path_exists exe, "default gem's executable not installed"
1084
+
1085
+ installer = util_setup_installer do |spec|
1086
+ spec.name = 'default'
1087
+ spec.version = '2'
1088
+ end
1089
+
903
1090
  util_clear_gems
904
1091
 
905
- @installer.wrappers = true
1092
+ installer.wrappers = true
1093
+
1094
+ @newspec = nil
1095
+ build_rake_in do
1096
+ use_ui @ui do
1097
+ @newspec = installer.install
1098
+ end
1099
+ end
1100
+
1101
+ e = assert_raises RuntimeError do
1102
+ instance_eval File.read(exe)
1103
+ end
1104
+
1105
+ assert_equal(e.message, "ran executable")
1106
+ end
1107
+
1108
+ def test_install_creates_binstub_that_dont_trust_encoding
1109
+ installer = util_setup_installer
1110
+
1111
+ installer.wrappers = true
906
1112
 
907
1113
  @newspec = nil
908
1114
  build_rake_in do
909
1115
  use_ui @ui do
910
- @newspec = @installer.install
1116
+ @newspec = installer.install
911
1117
  end
912
1118
  end
913
1119
 
@@ -930,33 +1136,35 @@ gem 'other', version
930
1136
  end
931
1137
 
932
1138
  def test_install_with_no_prior_files
933
- Dir.mkdir util_inst_bindir
934
- util_clear_gems
1139
+ installer = util_setup_installer
935
1140
 
936
- util_setup_gem
937
1141
  build_rake_in do
938
1142
  use_ui @ui do
939
- assert_equal @spec, @installer.install
1143
+ assert_equal @spec, installer.install
940
1144
  end
941
1145
  end
942
1146
 
943
1147
  gemdir = File.join(@gemhome, 'gems', @spec.full_name)
944
1148
  assert_path_exists File.join gemdir, 'lib', 'code.rb'
945
1149
 
946
- util_setup_gem
1150
+ installer = util_setup_installer
1151
+
947
1152
  # Morph spec to have lib/other.rb instead of code.rb and recreate
948
1153
  @spec.files = File.join('lib', 'other.rb')
949
1154
  Dir.chdir @tempdir do
950
- File.open File.join('lib', 'other.rb'), 'w' do |f| f.puts '1' end
1155
+ File.open File.join('lib', 'other.rb'), 'w' do |f|
1156
+ f.puts '1'
1157
+ end
1158
+
951
1159
  use_ui ui do
952
1160
  FileUtils.rm @gem
953
1161
  Gem::Package.build @spec
954
1162
  end
955
1163
  end
956
- @installer = Gem::Installer.at @gem
1164
+ installer = Gem::Installer.at @gem, :force => true
957
1165
  build_rake_in do
958
1166
  use_ui @ui do
959
- assert_equal @spec, @installer.install
1167
+ assert_equal @spec, installer.install
960
1168
  end
961
1169
  end
962
1170
 
@@ -966,22 +1174,37 @@ gem 'other', version
966
1174
  end
967
1175
 
968
1176
  def test_install_force
1177
+ _, missing_dep_gem = util_gem 'missing_dep', '1' do |s|
1178
+ s.add_dependency 'doesnt_exist', '1'
1179
+ end
1180
+
969
1181
  use_ui @ui do
970
- installer = Gem::Installer.at old_ruby_required('= 1.4.6'), :force => true
1182
+ installer = Gem::Installer.at missing_dep_gem, :force => true
971
1183
  installer.install
972
1184
  end
973
1185
 
974
- gem_dir = File.join(@gemhome, 'gems', 'old_ruby_required-1')
1186
+ gem_dir = File.join(@gemhome, 'gems', 'missing_dep-1')
975
1187
  assert_path_exists gem_dir
976
1188
  end
977
1189
 
1190
+ def test_install_build_root
1191
+ build_root = File.join(@tempdir, 'build_root')
1192
+
1193
+ @gem = setup_base_gem
1194
+ installer = Gem::Installer.at @gem, :build_root => build_root
1195
+
1196
+ assert_equal @spec, installer.install
1197
+ end
1198
+
978
1199
  def test_install_missing_dirs
1200
+ installer = setup_base_installer
1201
+
979
1202
  FileUtils.rm_f File.join(Gem.dir, 'cache')
980
1203
  FileUtils.rm_f File.join(Gem.dir, 'doc')
981
1204
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
982
1205
 
983
1206
  use_ui @ui do
984
- @installer.install
1207
+ installer.install
985
1208
  end
986
1209
 
987
1210
  assert_directory_exists File.join(Gem.dir, 'cache')
@@ -993,7 +1216,7 @@ gem 'other', version
993
1216
  end
994
1217
 
995
1218
  def test_install_post_build_false
996
- util_clear_gems
1219
+ installer = setup_base_installer
997
1220
 
998
1221
  Gem.post_build do
999
1222
  false
@@ -1001,7 +1224,7 @@ gem 'other', version
1001
1224
 
1002
1225
  use_ui @ui do
1003
1226
  e = assert_raises Gem::InstallError do
1004
- @installer.install
1227
+ installer.install
1005
1228
  end
1006
1229
 
1007
1230
  location = "#{__FILE__}:#{__LINE__ - 9}"
@@ -1017,14 +1240,14 @@ gem 'other', version
1017
1240
  end
1018
1241
 
1019
1242
  def test_install_post_build_nil
1020
- util_clear_gems
1243
+ installer = setup_base_installer
1021
1244
 
1022
1245
  Gem.post_build do
1023
1246
  nil
1024
1247
  end
1025
1248
 
1026
1249
  use_ui @ui do
1027
- @installer.install
1250
+ installer.install
1028
1251
  end
1029
1252
 
1030
1253
  spec_file = File.join @gemhome, 'specifications', @spec.spec_name
@@ -1035,7 +1258,7 @@ gem 'other', version
1035
1258
  end
1036
1259
 
1037
1260
  def test_install_pre_install_false
1038
- util_clear_gems
1261
+ installer = setup_base_installer
1039
1262
 
1040
1263
  Gem.pre_install do
1041
1264
  false
@@ -1043,7 +1266,7 @@ gem 'other', version
1043
1266
 
1044
1267
  use_ui @ui do
1045
1268
  e = assert_raises Gem::InstallError do
1046
- @installer.install
1269
+ installer.install
1047
1270
  end
1048
1271
 
1049
1272
  location = "#{__FILE__}:#{__LINE__ - 9}"
@@ -1056,14 +1279,14 @@ gem 'other', version
1056
1279
  end
1057
1280
 
1058
1281
  def test_install_pre_install_nil
1059
- util_clear_gems
1282
+ installer = setup_base_installer
1060
1283
 
1061
1284
  Gem.pre_install do
1062
1285
  nil
1063
1286
  end
1064
1287
 
1065
1288
  use_ui @ui do
1066
- @installer.install
1289
+ installer.install
1067
1290
  end
1068
1291
 
1069
1292
  spec_file = File.join @gemhome, 'specifications', @spec.spec_name
@@ -1071,34 +1294,37 @@ gem 'other', version
1071
1294
  end
1072
1295
 
1073
1296
  def test_install_with_message
1297
+ @spec = setup_base_spec
1074
1298
  @spec.post_install_message = 'I am a shiny gem!'
1075
1299
 
1076
1300
  use_ui @ui do
1077
1301
  path = Gem::Package.build @spec
1078
1302
 
1079
- @installer = Gem::Installer.at path
1080
- @installer.install
1303
+ installer = Gem::Installer.at path
1304
+ installer.install
1081
1305
  end
1082
1306
 
1083
- assert_match %r|I am a shiny gem!|, @ui.output
1307
+ assert_match %r{I am a shiny gem!}, @ui.output
1084
1308
  end
1085
1309
 
1086
1310
  def test_install_with_skipped_message
1311
+ @spec = setup_base_spec
1087
1312
  @spec.post_install_message = 'I am a shiny gem!'
1088
1313
 
1089
1314
  use_ui @ui do
1090
1315
  path = Gem::Package.build @spec
1091
1316
 
1092
- @installer = Gem::Installer.at path, :post_install_message => false
1093
- @installer.install
1317
+ installer = Gem::Installer.at path, :post_install_message => false
1318
+ installer.install
1094
1319
  end
1095
1320
 
1096
- refute_match %r|I am a shiny gem!|, @ui.output
1321
+ refute_match %r{I am a shiny gem!}, @ui.output
1097
1322
  end
1098
1323
 
1099
1324
  def test_install_extension_dir
1100
1325
  gemhome2 = "#{@gemhome}2"
1101
1326
 
1327
+ @spec = setup_base_spec
1102
1328
  @spec.extensions << "extconf.rb"
1103
1329
  write_file File.join(@tempdir, "extconf.rb") do |io|
1104
1330
  io.write <<-RUBY
@@ -1122,6 +1348,8 @@ gem 'other', version
1122
1348
  end
1123
1349
 
1124
1350
  def test_install_extension_dir_is_removed_on_reinstall
1351
+ @spec = setup_base_spec
1352
+
1125
1353
  @spec.extensions << "extconf.rb"
1126
1354
  write_file File.join(@tempdir, "extconf.rb") do |io|
1127
1355
  io.write <<-RUBY
@@ -1149,7 +1377,7 @@ gem 'other', version
1149
1377
 
1150
1378
  # reinstall the gem, this is also the same as pristine
1151
1379
  use_ui @ui do
1152
- installer = Gem::Installer.at path
1380
+ installer = Gem::Installer.at path, :force => true
1153
1381
  installer.install
1154
1382
  end
1155
1383
 
@@ -1157,6 +1385,7 @@ gem 'other', version
1157
1385
  end
1158
1386
 
1159
1387
  def test_install_user_extension_dir
1388
+ @spec = setup_base_spec
1160
1389
  @spec.extensions << "extconf.rb"
1161
1390
  write_file File.join(@tempdir, "extconf.rb") do |io|
1162
1391
  io.write <<-RUBY
@@ -1186,6 +1415,9 @@ gem 'other', version
1186
1415
  end
1187
1416
 
1188
1417
  def test_find_lib_file_after_install
1418
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
1419
+
1420
+ @spec = setup_base_spec
1189
1421
  @spec.extensions << "extconf.rb"
1190
1422
  write_file File.join(@tempdir, "extconf.rb") do |io|
1191
1423
  io.write <<-RUBY
@@ -1222,13 +1454,16 @@ gem 'other', version
1222
1454
  installer.install
1223
1455
  end
1224
1456
 
1225
- expected = File.join @spec.full_require_paths.find { |path|
1457
+ expected = File.join @spec.full_require_paths.find {|path|
1226
1458
  File.exist? File.join path, 'b.rb'
1227
1459
  }, 'b.rb'
1228
1460
  assert_equal expected, @spec.matches_for_glob('b.rb').first
1229
1461
  end
1230
1462
 
1231
1463
  def test_install_extension_and_script
1464
+ skip "Makefile creation crashes on jruby" if Gem.java_platform?
1465
+
1466
+ @spec = setup_base_spec
1232
1467
  @spec.extensions << "extconf.rb"
1233
1468
  write_file File.join(@tempdir, "extconf.rb") do |io|
1234
1469
  io.write <<-RUBY
@@ -1259,14 +1494,17 @@ gem 'other', version
1259
1494
  use_ui @ui do
1260
1495
  path = Gem::Package.build @spec
1261
1496
 
1262
- @installer = Gem::Installer.at path
1263
- @installer.install
1497
+ installer = Gem::Installer.at path
1498
+ installer.install
1264
1499
  end
1265
1500
  assert_path_exists File.join @spec.gem_dir, rb
1266
1501
  assert_path_exists File.join @spec.gem_dir, rb2
1267
1502
  end
1268
1503
 
1269
1504
  def test_install_extension_flat
1505
+ skip "extensions don't quite work on jruby" if Gem.java_platform?
1506
+
1507
+ @spec = setup_base_spec
1270
1508
  @spec.require_paths = ["."]
1271
1509
 
1272
1510
  @spec.extensions << "extconf.rb"
@@ -1284,17 +1522,17 @@ gem 'other', version
1284
1522
  end
1285
1523
 
1286
1524
  # empty depend file for no auto dependencies
1287
- @spec.files += %W"depend #{@spec.name}.c".each {|file|
1525
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1288
1526
  write_file File.join(@tempdir, file)
1289
- }
1527
+ end
1290
1528
 
1291
1529
  so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
1292
1530
  refute_path_exists so
1293
1531
  use_ui @ui do
1294
1532
  path = Gem::Package.build @spec
1295
1533
 
1296
- @installer = Gem::Installer.at path
1297
- @installer.install
1534
+ installer = Gem::Installer.at path
1535
+ installer.install
1298
1536
  end
1299
1537
  assert_path_exists so
1300
1538
  rescue
@@ -1313,49 +1551,57 @@ gem 'other', version
1313
1551
  end
1314
1552
 
1315
1553
  def test_installation_satisfies_dependency_eh
1554
+ installer = setup_base_installer
1555
+
1316
1556
  util_spec 'a'
1317
1557
 
1318
1558
  dep = Gem::Dependency.new 'a', '>= 2'
1319
- assert @installer.installation_satisfies_dependency?(dep)
1559
+ assert installer.installation_satisfies_dependency?(dep)
1320
1560
 
1321
1561
  dep = Gem::Dependency.new 'a', '> 2'
1322
- refute @installer.installation_satisfies_dependency?(dep)
1562
+ refute installer.installation_satisfies_dependency?(dep)
1323
1563
  end
1324
1564
 
1325
1565
  def test_installation_satisfies_dependency_eh_development
1326
- @installer.options[:development] = true
1327
- @installer.options[:dev_shallow] = true
1566
+ installer = setup_base_installer
1567
+ installer.options[:development] = true
1568
+ installer.options[:dev_shallow] = true
1328
1569
 
1329
1570
  util_spec 'a'
1330
1571
 
1331
1572
  dep = Gem::Dependency.new 'a', :development
1332
- assert @installer.installation_satisfies_dependency?(dep)
1573
+ assert installer.installation_satisfies_dependency?(dep)
1333
1574
  end
1334
1575
 
1335
1576
  def test_pre_install_checks_dependencies
1577
+ installer = setup_base_installer
1336
1578
  @spec.add_dependency 'b', '> 5'
1337
- util_setup_gem
1579
+ installer = util_setup_gem
1580
+ installer.force = false
1338
1581
 
1339
1582
  use_ui @ui do
1340
1583
  assert_raises Gem::InstallError do
1341
- @installer.install
1584
+ installer.install
1342
1585
  end
1343
1586
  end
1344
1587
  end
1345
1588
 
1346
1589
  def test_pre_install_checks_dependencies_ignore
1590
+ installer = util_setup_installer
1347
1591
  @spec.add_dependency 'b', '> 5'
1348
- @installer.ignore_dependencies = true
1592
+ installer.ignore_dependencies = true
1349
1593
 
1350
1594
  build_rake_in do
1351
1595
  use_ui @ui do
1352
- assert @installer.pre_install_checks
1596
+ assert installer.pre_install_checks
1353
1597
  end
1354
1598
  end
1355
1599
  end
1356
1600
 
1357
1601
  def test_pre_install_checks_dependencies_install_dir
1358
1602
  gemhome2 = "#{@gemhome}2"
1603
+
1604
+ @gem = setup_base_gem
1359
1605
  @spec.add_dependency 'd'
1360
1606
 
1361
1607
  quick_gem 'd', 2
@@ -1380,54 +1626,6 @@ gem 'other', version
1380
1626
  end
1381
1627
  end
1382
1628
 
1383
- def test_pre_install_checks_ruby_version
1384
- use_ui @ui do
1385
- installer = Gem::Installer.at old_ruby_required('= 1.4.6')
1386
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1387
- installer.pre_install_checks
1388
- end
1389
- rv = Gem.ruby_version
1390
- assert_equal "old_ruby_required requires Ruby version = 1.4.6. The current ruby version is #{rv}.",
1391
- e.message
1392
- end
1393
- end
1394
-
1395
- def test_pre_install_checks_ruby_version_with_prereleases
1396
- util_set_RUBY_VERSION '2.6.0', -1, '63539', 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1397
-
1398
- installer = Gem::Installer.at old_ruby_required('>= 2.6.0.preview2')
1399
- assert installer.pre_install_checks
1400
-
1401
- installer = Gem::Installer.at old_ruby_required('> 2.6.0.preview2')
1402
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1403
- assert installer.pre_install_checks
1404
- end
1405
- assert_equal "old_ruby_required requires Ruby version > 2.6.0.preview2. The current ruby version is 2.6.0.preview2.",
1406
- e.message
1407
- ensure
1408
- util_restore_RUBY_VERSION
1409
- end
1410
-
1411
- def test_pre_install_checks_wrong_rubygems_version
1412
- spec = util_spec 'old_rubygems_required', '1' do |s|
1413
- s.required_rubygems_version = '< 0'
1414
- end
1415
-
1416
- util_build_gem spec
1417
-
1418
- gem = File.join(@gemhome, 'cache', spec.file_name)
1419
-
1420
- use_ui @ui do
1421
- @installer = Gem::Installer.at gem
1422
- e = assert_raises Gem::RuntimeRequirementNotMetError do
1423
- @installer.pre_install_checks
1424
- end
1425
- rgv = Gem::VERSION
1426
- assert_equal "old_rubygems_required requires RubyGems version < 0. The current RubyGems version is #{rgv}. " +
1427
- "Try 'gem update --system' to update RubyGems itself.", e.message
1428
- end
1429
- end
1430
-
1431
1629
  def test_pre_install_checks_malicious_name
1432
1630
  spec = util_spec '../malicious', '1'
1433
1631
  def spec.full_name # so the spec is buildable
@@ -1440,9 +1638,9 @@ gem 'other', version
1440
1638
  gem = File.join(@gemhome, 'cache', spec.file_name)
1441
1639
 
1442
1640
  use_ui @ui do
1443
- @installer = Gem::Installer.at gem
1641
+ installer = Gem::Installer.at gem
1444
1642
  e = assert_raises Gem::InstallError do
1445
- @installer.pre_install_checks
1643
+ installer.pre_install_checks
1446
1644
  end
1447
1645
  assert_equal '#<Gem::Specification name=../malicious version=1> has an invalid name', e.message
1448
1646
  end
@@ -1460,9 +1658,9 @@ gem 'other', version
1460
1658
  gem = File.join(@gemhome, 'cache', spec.file_name)
1461
1659
 
1462
1660
  use_ui @ui do
1463
- @installer = Gem::Installer.at gem
1661
+ installer = Gem::Installer.at gem
1464
1662
  e = assert_raises Gem::InstallError do
1465
- @installer.pre_install_checks
1663
+ installer.pre_install_checks
1466
1664
  end
1467
1665
  assert_equal "#<Gem::Specification name=malicious\n::Object.const_set(:FROM_EVAL, true)# version=1> has an invalid name", e.message
1468
1666
  end
@@ -1482,9 +1680,9 @@ gem 'other', version
1482
1680
  gem = File.join(@gemhome, 'cache', spec.file_name)
1483
1681
 
1484
1682
  use_ui @ui do
1485
- @installer = Gem::Installer.at gem
1683
+ installer = Gem::Installer.at gem
1486
1684
  e = assert_raises Gem::InstallError do
1487
- @installer.pre_install_checks
1685
+ installer.pre_install_checks
1488
1686
  end
1489
1687
  assert_equal "#<Gem::Specification name=malicious version=1> has an invalid require_paths", e.message
1490
1688
  end
@@ -1505,9 +1703,9 @@ gem 'other', version
1505
1703
  gem = File.join(@gemhome, 'cache', spec.file_name)
1506
1704
 
1507
1705
  use_ui @ui do
1508
- @installer = Gem::Installer.at gem
1706
+ installer = Gem::Installer.at gem
1509
1707
  e = assert_raises Gem::InstallError do
1510
- @installer.pre_install_checks
1708
+ installer.pre_install_checks
1511
1709
  end
1512
1710
  assert_equal "#<Gem::Specification name=malicious version=1> has an invalid extensions", e.message
1513
1711
  end
@@ -1526,9 +1724,9 @@ gem 'other', version
1526
1724
  gem = File.join(@gemhome, 'cache', spec.file_name)
1527
1725
 
1528
1726
  use_ui @ui do
1529
- @installer = Gem::Installer.at gem
1727
+ installer = Gem::Installer.at gem
1530
1728
  e = assert_raises Gem::InstallError do
1531
- @installer.pre_install_checks
1729
+ installer.pre_install_checks
1532
1730
  end
1533
1731
  assert_equal "#<Gem::Specification name=malicious version=1> has an invalid specification_version", e.message
1534
1732
  end
@@ -1547,131 +1745,171 @@ gem 'other', version
1547
1745
  gem = File.join(@gemhome, 'cache', spec.file_name)
1548
1746
 
1549
1747
  use_ui @ui do
1550
- @installer = Gem::Installer.at gem
1551
- @installer.ignore_dependencies = true
1748
+ installer = Gem::Installer.at gem
1749
+ installer.ignore_dependencies = true
1552
1750
  e = assert_raises Gem::InstallError do
1553
- @installer.pre_install_checks
1751
+ installer.pre_install_checks
1554
1752
  end
1555
1753
  assert_equal "#<Gem::Specification name=malicious version=1> has an invalid dependencies", e.message
1556
1754
  end
1557
1755
  end
1558
1756
 
1559
1757
  def test_shebang
1758
+ installer = setup_base_installer
1759
+
1560
1760
  util_make_exec @spec, "#!/usr/bin/ruby"
1561
1761
 
1562
- shebang = @installer.shebang 'executable'
1762
+ shebang = installer.shebang 'executable'
1563
1763
 
1564
1764
  assert_equal "#!#{Gem.ruby}", shebang
1565
1765
  end
1566
1766
 
1567
1767
  def test_process_options
1568
- assert_nil @installer.build_root
1569
- assert_equal File.join(@gemhome, 'bin'), @installer.bin_dir
1570
- assert_equal @gemhome, @installer.gem_home
1768
+ installer = setup_base_installer
1769
+
1770
+ assert_nil installer.build_root
1771
+ assert_equal File.join(@gemhome, 'bin'), installer.bin_dir
1772
+ assert_equal @gemhome, installer.gem_home
1571
1773
  end
1572
1774
 
1573
1775
  def test_process_options_build_root
1574
1776
  build_root = File.join @tempdir, 'build_root'
1777
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1778
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1779
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1780
+
1781
+ @gem = setup_base_gem
1782
+ installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
1575
1783
 
1576
- @installer = Gem::Installer.at @gem, :build_root => build_root
1784
+ assert_equal build_root, installer.build_root
1785
+ assert_equal bin_dir, installer.bin_dir
1786
+ assert_equal gem_home, installer.gem_home
1577
1787
 
1578
- assert_equal Pathname(build_root), @installer.build_root
1579
- assert_equal File.join(build_root, @gemhome, 'bin'), @installer.bin_dir
1580
- assert_equal File.join(build_root, @gemhome), @installer.gem_home
1788
+ errors = @ui.error.split("\n")
1789
+
1790
+ assert_equal "WARNING: You build with buildroot.", errors.shift
1791
+ assert_equal " Build root: #{build_root}", errors.shift
1792
+ assert_equal " Bin dir: #{bin_dir}", errors.shift
1793
+ assert_equal " Gem home: #{gem_home}", errors.shift
1794
+ assert_equal " Plugins dir: #{plugins_dir}", errors.shift
1581
1795
  end
1582
1796
 
1583
1797
  def test_shebang_arguments
1798
+ installer = setup_base_installer
1799
+
1584
1800
  util_make_exec @spec, "#!/usr/bin/ruby -ws"
1585
1801
 
1586
- shebang = @installer.shebang 'executable'
1802
+ shebang = installer.shebang 'executable'
1587
1803
 
1588
1804
  assert_equal "#!#{Gem.ruby} -ws", shebang
1589
1805
  end
1590
1806
 
1591
1807
  def test_shebang_empty
1808
+ installer = setup_base_installer
1809
+
1592
1810
  util_make_exec @spec, ''
1593
1811
 
1594
- shebang = @installer.shebang 'executable'
1812
+ shebang = installer.shebang 'executable'
1595
1813
  assert_equal "#!#{Gem.ruby}", shebang
1596
1814
  end
1597
1815
 
1598
1816
  def test_shebang_env
1817
+ installer = setup_base_installer
1818
+
1599
1819
  util_make_exec @spec, "#!/usr/bin/env ruby"
1600
1820
 
1601
- shebang = @installer.shebang 'executable'
1821
+ shebang = installer.shebang 'executable'
1602
1822
 
1603
1823
  assert_equal "#!#{Gem.ruby}", shebang
1604
1824
  end
1605
1825
 
1606
1826
  def test_shebang_env_arguments
1827
+ installer = setup_base_installer
1828
+
1607
1829
  util_make_exec @spec, "#!/usr/bin/env ruby -ws"
1608
1830
 
1609
- shebang = @installer.shebang 'executable'
1831
+ shebang = installer.shebang 'executable'
1610
1832
 
1611
1833
  assert_equal "#!#{Gem.ruby} -ws", shebang
1612
1834
  end
1613
1835
 
1614
1836
  def test_shebang_env_shebang
1837
+ installer = setup_base_installer
1838
+
1615
1839
  util_make_exec @spec, ''
1616
- @installer.env_shebang = true
1840
+ installer.env_shebang = true
1617
1841
 
1618
- shebang = @installer.shebang 'executable'
1842
+ shebang = installer.shebang 'executable'
1619
1843
 
1620
- env_shebang = "/usr/bin/env" unless Gem.win_platform?
1844
+ bin_env = get_bin_env
1621
1845
 
1622
- assert_equal("#!#{env_shebang} #{RbConfig::CONFIG['ruby_install_name']}",
1846
+ assert_equal("#!#{bin_env} #{RbConfig::CONFIG['ruby_install_name']}",
1623
1847
  shebang)
1624
1848
  end
1625
1849
 
1626
1850
  def test_shebang_nested
1851
+ installer = setup_base_installer
1852
+
1627
1853
  util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
1628
1854
 
1629
- shebang = @installer.shebang 'executable'
1855
+ shebang = installer.shebang 'executable'
1630
1856
 
1631
1857
  assert_equal "#!#{Gem.ruby}", shebang
1632
1858
  end
1633
1859
 
1634
1860
  def test_shebang_nested_arguments
1861
+ installer = setup_base_installer
1862
+
1635
1863
  util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
1636
1864
 
1637
- shebang = @installer.shebang 'executable'
1865
+ shebang = installer.shebang 'executable'
1638
1866
 
1639
1867
  assert_equal "#!#{Gem.ruby} -ws", shebang
1640
1868
  end
1641
1869
 
1642
1870
  def test_shebang_version
1871
+ installer = setup_base_installer
1872
+
1643
1873
  util_make_exec @spec, "#!/usr/bin/ruby18"
1644
1874
 
1645
- shebang = @installer.shebang 'executable'
1875
+ shebang = installer.shebang 'executable'
1646
1876
 
1647
1877
  assert_equal "#!#{Gem.ruby}", shebang
1648
1878
  end
1649
1879
 
1650
1880
  def test_shebang_version_arguments
1881
+ installer = setup_base_installer
1882
+
1651
1883
  util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
1652
1884
 
1653
- shebang = @installer.shebang 'executable'
1885
+ shebang = installer.shebang 'executable'
1654
1886
 
1655
1887
  assert_equal "#!#{Gem.ruby} -ws", shebang
1656
1888
  end
1657
1889
 
1658
1890
  def test_shebang_version_env
1891
+ installer = setup_base_installer
1892
+
1659
1893
  util_make_exec @spec, "#!/usr/bin/env ruby18"
1660
1894
 
1661
- shebang = @installer.shebang 'executable'
1895
+ shebang = installer.shebang 'executable'
1662
1896
 
1663
1897
  assert_equal "#!#{Gem.ruby}", shebang
1664
1898
  end
1665
1899
 
1666
1900
  def test_shebang_version_env_arguments
1901
+ installer = setup_base_installer
1902
+
1667
1903
  util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
1668
1904
 
1669
- shebang = @installer.shebang 'executable'
1905
+ shebang = installer.shebang 'executable'
1670
1906
 
1671
1907
  assert_equal "#!#{Gem.ruby} -ws", shebang
1672
1908
  end
1673
1909
 
1674
1910
  def test_shebang_custom
1911
+ installer = setup_base_installer
1912
+
1675
1913
  conf = Gem::ConfigFile.new []
1676
1914
  conf[:custom_shebang] = 'test'
1677
1915
 
@@ -1679,13 +1917,23 @@ gem 'other', version
1679
1917
 
1680
1918
  util_make_exec @spec, "#!/usr/bin/ruby"
1681
1919
 
1682
- shebang = @installer.shebang 'executable'
1920
+ shebang = installer.shebang 'executable'
1683
1921
 
1684
1922
  assert_equal "#!test", shebang
1685
1923
  end
1686
1924
 
1925
+ def get_bin_env
1926
+ if win_platform?
1927
+ ""
1928
+ else
1929
+ %w[/usr/bin/env /bin/env].find {|f| File.executable?(f) }
1930
+ end
1931
+ end
1932
+
1687
1933
  def test_shebang_custom_with_expands
1688
- bin_env = win_platform? ? '' : '/usr/bin/env'
1934
+ installer = setup_base_installer
1935
+
1936
+ bin_env = get_bin_env
1689
1937
  conf = Gem::ConfigFile.new []
1690
1938
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
1691
1939
 
@@ -1693,13 +1941,15 @@ gem 'other', version
1693
1941
 
1694
1942
  util_make_exec @spec, "#!/usr/bin/ruby"
1695
1943
 
1696
- shebang = @installer.shebang 'executable'
1944
+ shebang = installer.shebang 'executable'
1697
1945
 
1698
1946
  assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} 3 executable 4 a", shebang
1699
1947
  end
1700
1948
 
1701
1949
  def test_shebang_custom_with_expands_and_arguments
1702
- bin_env = win_platform? ? '' : '/usr/bin/env'
1950
+ installer = setup_base_installer
1951
+
1952
+ bin_env = get_bin_env
1703
1953
  conf = Gem::ConfigFile.new []
1704
1954
  conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
1705
1955
 
@@ -1707,30 +1957,34 @@ gem 'other', version
1707
1957
 
1708
1958
  util_make_exec @spec, "#!/usr/bin/ruby -ws"
1709
1959
 
1710
- shebang = @installer.shebang 'executable'
1960
+ shebang = installer.shebang 'executable'
1711
1961
 
1712
1962
  assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} -ws 3 executable", shebang
1713
1963
  end
1714
1964
 
1715
1965
  def test_unpack
1716
- util_setup_gem
1966
+ installer = util_setup_installer
1717
1967
 
1718
1968
  dest = File.join @gemhome, 'gems', @spec.full_name
1719
1969
 
1720
- @installer.unpack dest
1970
+ Gem::Deprecate.skip_during do
1971
+ installer.unpack dest
1972
+ end
1721
1973
 
1722
1974
  assert_path_exists File.join dest, 'lib', 'code.rb'
1723
1975
  assert_path_exists File.join dest, 'bin', 'executable'
1724
1976
  end
1725
1977
 
1726
1978
  def test_write_build_info_file
1979
+ installer = setup_base_installer
1980
+
1727
1981
  refute_path_exists @spec.build_info_file
1728
1982
 
1729
- @installer.build_args = %w[
1983
+ installer.build_args = %w[
1730
1984
  --with-libyaml-dir /usr/local/Cellar/libyaml/0.1.4
1731
1985
  ]
1732
1986
 
1733
- @installer.write_build_info_file
1987
+ installer.write_build_info_file
1734
1988
 
1735
1989
  assert_path_exists @spec.build_info_file
1736
1990
 
@@ -1740,14 +1994,17 @@ gem 'other', version
1740
1994
  end
1741
1995
 
1742
1996
  def test_write_build_info_file_empty
1997
+ installer = setup_base_installer
1998
+
1743
1999
  refute_path_exists @spec.build_info_file
1744
2000
 
1745
- @installer.write_build_info_file
2001
+ installer.write_build_info_file
1746
2002
 
1747
2003
  refute_path_exists @spec.build_info_file
1748
2004
  end
1749
2005
 
1750
2006
  def test_write_build_info_file_install_dir
2007
+ @gem = setup_base_gem
1751
2008
  installer = Gem::Installer.at @gem, :install_dir => "#{@gemhome}2"
1752
2009
 
1753
2010
  installer.build_args = %w[
@@ -1762,6 +2019,7 @@ gem 'other', version
1762
2019
  end
1763
2020
 
1764
2021
  def test_write_cache_file
2022
+ @gem = setup_base_gem
1765
2023
  cache_file = File.join @gemhome, 'cache', @spec.file_name
1766
2024
  gem = File.join @gemhome, @spec.file_name
1767
2025
 
@@ -1777,13 +2035,14 @@ gem 'other', version
1777
2035
  end
1778
2036
 
1779
2037
  def test_write_spec
2038
+ @spec = setup_base_spec
1780
2039
  FileUtils.rm @spec.spec_file
1781
2040
  refute_path_exists @spec.spec_file
1782
2041
 
1783
- @installer = Gem::Installer.for_spec @spec
1784
- @installer.gem_home = @gemhome
2042
+ installer = Gem::Installer.for_spec @spec
2043
+ installer.gem_home = @gemhome
1785
2044
 
1786
- @installer.write_spec
2045
+ installer.write_spec
1787
2046
 
1788
2047
  assert_path_exists @spec.spec_file
1789
2048
 
@@ -1795,15 +2054,16 @@ gem 'other', version
1795
2054
  end
1796
2055
 
1797
2056
  def test_write_spec_writes_cached_spec
2057
+ @spec = setup_base_spec
1798
2058
  FileUtils.rm @spec.spec_file
1799
2059
  refute_path_exists @spec.spec_file
1800
2060
 
1801
2061
  @spec.files = %w[a.rb b.rb c.rb]
1802
2062
 
1803
- @installer = Gem::Installer.for_spec @spec
1804
- @installer.gem_home = @gemhome
2063
+ installer = Gem::Installer.for_spec @spec
2064
+ installer.gem_home = @gemhome
1805
2065
 
1806
- @installer.write_spec
2066
+ installer.write_spec
1807
2067
 
1808
2068
  # cached specs have no file manifest:
1809
2069
  @spec.files = []
@@ -1812,7 +2072,9 @@ gem 'other', version
1812
2072
  end
1813
2073
 
1814
2074
  def test_dir
1815
- assert_match %r!/gemhome/gems/a-2$!, @installer.dir
2075
+ installer = setup_base_installer
2076
+
2077
+ assert_match %r{/gemhome/gems/a-2$}, installer.dir
1816
2078
  end
1817
2079
 
1818
2080
  def test_default_gem_loaded_from
@@ -1822,15 +2084,17 @@ gem 'other', version
1822
2084
  assert_predicate spec, :default_gem?
1823
2085
  end
1824
2086
 
1825
- def test_default_gem
2087
+ def test_default_gem_without_wrappers
2088
+ installer = setup_base_installer
2089
+
1826
2090
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
1827
2091
 
1828
- @installer.wrappers = true
1829
- @installer.options[:install_as_default] = true
1830
- @installer.gem_dir = @spec.gem_dir
2092
+ installer.wrappers = false
2093
+ installer.options[:install_as_default] = true
2094
+ installer.gem_dir = @spec.gem_dir
1831
2095
 
1832
2096
  use_ui @ui do
1833
- @installer.install
2097
+ installer.install
1834
2098
  end
1835
2099
 
1836
2100
  assert_directory_exists File.join(@spec.gem_dir, 'bin')
@@ -1843,11 +2107,43 @@ gem 'other', version
1843
2107
  default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'a-2.gemspec')
1844
2108
  assert_equal Gem::Version.new("2"), default_spec.version
1845
2109
  assert_equal ['bin/executable'], default_spec.files
2110
+
2111
+ assert_directory_exists util_inst_bindir
2112
+
2113
+ installed_exec = File.join util_inst_bindir, 'executable'
2114
+ assert_path_exists installed_exec
2115
+
2116
+ wrapper = File.read installed_exec
2117
+
2118
+ if symlink_supported?
2119
+ refute_match %r{generated by RubyGems}, wrapper
2120
+ else # when symlink not supported, it warns and fallbacks back to installing wrapper
2121
+ assert_match %r{Unable to use symlinks, installing wrapper}, @ui.error
2122
+ assert_match %r{generated by RubyGems}, wrapper
2123
+ end
1846
2124
  end
1847
2125
 
1848
- def test_default_gem_with_exe_as_bindir
1849
- FileUtils.rm_f File.join(Gem.dir, 'specifications')
2126
+ def test_default_gem_with_wrappers
2127
+ installer = setup_base_installer
2128
+
2129
+ installer.wrappers = true
2130
+ installer.options[:install_as_default] = true
2131
+ installer.gem_dir = @spec.gem_dir
2132
+
2133
+ use_ui @ui do
2134
+ installer.install
2135
+ end
2136
+
2137
+ assert_directory_exists util_inst_bindir
2138
+
2139
+ installed_exec = File.join util_inst_bindir, 'executable'
2140
+ assert_path_exists installed_exec
2141
+
2142
+ wrapper = File.read installed_exec
2143
+ assert_match %r{generated by RubyGems}, wrapper
2144
+ end
1850
2145
 
2146
+ def test_default_gem_with_exe_as_bindir
1851
2147
  @spec = quick_gem 'c' do |spec|
1852
2148
  util_make_exec spec, '#!/usr/bin/ruby', 'exe'
1853
2149
  end
@@ -1877,21 +2173,48 @@ gem 'other', version
1877
2173
  assert_equal ['exe/executable'], default_spec.files
1878
2174
  end
1879
2175
 
1880
- def old_ruby_required(requirement)
1881
- spec = util_spec 'old_ruby_required', '1' do |s|
1882
- s.required_ruby_version = requirement
2176
+ def test_default_gem_to_specific_install_dir
2177
+ @gem = setup_base_gem
2178
+ installer = util_installer @spec, "#{@gemhome}2"
2179
+ installer.options[:install_as_default] = true
2180
+
2181
+ use_ui @ui do
2182
+ installer.install
1883
2183
  end
1884
2184
 
1885
- util_build_gem spec
2185
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2186
+ assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
1886
2187
 
1887
- spec.cache_file
2188
+ default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2189
+ assert_equal Gem::Version.new("2"), default_spec.version
2190
+ assert_equal ['bin/executable'], default_spec.files
2191
+ end
2192
+
2193
+ def test_package_attribute
2194
+ gem = quick_gem 'c' do |spec|
2195
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2196
+ end
2197
+
2198
+ installer = util_installer(gem, @gemhome)
2199
+ assert_respond_to(installer, :package)
2200
+ assert_kind_of(Gem::Package, installer.package)
2201
+ end
2202
+
2203
+ def test_gem_attribute
2204
+ gem = quick_gem 'c' do |spec|
2205
+ util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2206
+ end
2207
+
2208
+ installer = util_installer(gem, @gemhome)
2209
+ assert_respond_to(installer, :gem)
2210
+ assert_kind_of(String, installer.gem)
1888
2211
  end
1889
2212
 
1890
2213
  def util_execless
1891
2214
  @spec = util_spec 'z'
1892
2215
  util_build_gem @spec
1893
2216
 
1894
- @installer = util_installer @spec, @gemhome
2217
+ util_installer @spec, @gemhome
1895
2218
  end
1896
2219
 
1897
2220
  def util_conflict_executable(wrappers)
@@ -1907,6 +2230,6 @@ gem 'other', version
1907
2230
  end
1908
2231
 
1909
2232
  def mask
1910
- 0100755 & (~File.umask)
2233
+ 0100755
1911
2234
  end
1912
2235
  end