rubygems-update 3.2.30 → 3.4.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1666 -994
  3. data/CONTRIBUTING.md +71 -15
  4. data/Manifest.txt +93 -37
  5. data/POLICIES.md +65 -16
  6. data/README.md +28 -13
  7. data/UPGRADING.md +5 -81
  8. data/bin/gem +2 -10
  9. data/bin/update_rubygems +5 -5
  10. data/bundler/CHANGELOG.md +647 -1
  11. data/bundler/README.md +3 -6
  12. data/bundler/UPGRADING.md +11 -4
  13. data/bundler/bundler.gemspec +8 -10
  14. data/bundler/exe/bundle +7 -11
  15. data/bundler/exe/bundler +1 -1
  16. data/bundler/lib/bundler/.document +1 -0
  17. data/bundler/lib/bundler/build_metadata.rb +3 -3
  18. data/bundler/lib/bundler/cli/add.rb +1 -1
  19. data/bundler/lib/bundler/cli/binstubs.rb +5 -1
  20. data/bundler/lib/bundler/cli/check.rb +1 -1
  21. data/bundler/lib/bundler/cli/common.rb +4 -2
  22. data/bundler/lib/bundler/cli/config.rb +10 -1
  23. data/bundler/lib/bundler/cli/console.rb +2 -2
  24. data/bundler/lib/bundler/cli/doctor.rb +10 -3
  25. data/bundler/lib/bundler/cli/gem.rb +136 -42
  26. data/bundler/lib/bundler/cli/info.rb +17 -3
  27. data/bundler/lib/bundler/cli/init.rb +6 -2
  28. data/bundler/lib/bundler/cli/install.rb +15 -33
  29. data/bundler/lib/bundler/cli/lock.rb +8 -5
  30. data/bundler/lib/bundler/cli/open.rb +6 -4
  31. data/bundler/lib/bundler/cli/outdated.rb +13 -6
  32. data/bundler/lib/bundler/cli/platform.rb +2 -2
  33. data/bundler/lib/bundler/cli/show.rb +1 -1
  34. data/bundler/lib/bundler/cli/update.rb +8 -4
  35. data/bundler/lib/bundler/cli/viz.rb +1 -1
  36. data/bundler/lib/bundler/cli.rb +67 -21
  37. data/bundler/lib/bundler/compact_index_client/cache.rb +1 -10
  38. data/bundler/lib/bundler/compact_index_client/updater.rb +53 -44
  39. data/bundler/lib/bundler/compact_index_client.rb +0 -6
  40. data/bundler/lib/bundler/constants.rb +1 -1
  41. data/bundler/lib/bundler/current_ruby.rb +18 -6
  42. data/bundler/lib/bundler/definition.rb +259 -242
  43. data/bundler/lib/bundler/dependency.rb +24 -71
  44. data/bundler/lib/bundler/digest.rb +1 -1
  45. data/bundler/lib/bundler/dsl.rb +29 -46
  46. data/bundler/lib/bundler/endpoint_specification.rb +15 -13
  47. data/bundler/lib/bundler/env.rb +2 -2
  48. data/bundler/lib/bundler/environment_preserver.rb +7 -3
  49. data/bundler/lib/bundler/errors.rb +15 -15
  50. data/bundler/lib/bundler/feature_flag.rb +0 -1
  51. data/bundler/lib/bundler/fetcher/base.rb +6 -8
  52. data/bundler/lib/bundler/fetcher/compact_index.rb +18 -25
  53. data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
  54. data/bundler/lib/bundler/fetcher/downloader.rb +2 -5
  55. data/bundler/lib/bundler/fetcher/index.rb +0 -26
  56. data/bundler/lib/bundler/fetcher.rb +22 -29
  57. data/bundler/lib/bundler/force_platform.rb +18 -0
  58. data/bundler/lib/bundler/friendly_errors.rb +21 -7
  59. data/bundler/lib/bundler/gem_helper.rb +4 -4
  60. data/bundler/lib/bundler/gem_helpers.rb +9 -2
  61. data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
  62. data/bundler/lib/bundler/graph.rb +3 -3
  63. data/bundler/lib/bundler/index.rb +13 -51
  64. data/bundler/lib/bundler/injector.rb +18 -4
  65. data/bundler/lib/bundler/inline.rb +9 -21
  66. data/bundler/lib/bundler/installer/gem_installer.rb +13 -5
  67. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -33
  68. data/bundler/lib/bundler/installer/standalone.rb +42 -11
  69. data/bundler/lib/bundler/installer.rb +20 -44
  70. data/bundler/lib/bundler/lazy_specification.rb +72 -55
  71. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  72. data/bundler/lib/bundler/lockfile_parser.rb +28 -26
  73. data/bundler/lib/bundler/man/bundle-add.1 +21 -5
  74. data/bundler/lib/bundler/man/bundle-add.1.ronn +16 -4
  75. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  76. data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
  77. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  78. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  79. data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
  80. data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
  81. data/bundler/lib/bundler/man/bundle-config.1 +34 -15
  82. data/bundler/lib/bundler/man/bundle-config.1.ronn +31 -19
  83. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  84. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  85. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  86. data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
  88. data/bundler/lib/bundler/man/bundle-gem.1 +37 -34
  89. data/bundler/lib/bundler/man/bundle-gem.1.ronn +21 -5
  90. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  91. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  92. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  93. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  94. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  95. data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
  96. data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
  97. data/bundler/lib/bundler/man/bundle-install.1 +6 -31
  98. data/bundler/lib/bundler/man/bundle-install.1.ronn +8 -31
  99. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  100. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  101. data/bundler/lib/bundler/man/bundle-open.1 +22 -2
  102. data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
  103. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -10
  104. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -10
  105. data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
  106. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  107. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  108. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  109. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  110. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  111. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  112. data/bundler/lib/bundler/man/bundle-update.1 +2 -2
  113. data/bundler/lib/bundler/man/bundle-update.1.ronn +2 -1
  114. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  115. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  116. data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
  117. data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
  118. data/bundler/lib/bundler/man/bundle.1 +15 -10
  119. data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
  120. data/bundler/lib/bundler/man/gemfile.5 +117 -80
  121. data/bundler/lib/bundler/man/gemfile.5.ronn +105 -84
  122. data/bundler/lib/bundler/man/index.txt +4 -0
  123. data/bundler/lib/bundler/match_metadata.rb +13 -0
  124. data/bundler/lib/bundler/match_platform.rb +0 -1
  125. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  126. data/bundler/lib/bundler/mirror.rb +5 -7
  127. data/bundler/lib/bundler/plugin/api/source.rb +4 -9
  128. data/bundler/lib/bundler/plugin/index.rb +4 -4
  129. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  130. data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -8
  131. data/bundler/lib/bundler/plugin/installer.rb +6 -3
  132. data/bundler/lib/bundler/plugin.rb +3 -1
  133. data/bundler/lib/bundler/process_lock.rb +1 -1
  134. data/bundler/lib/bundler/remote_specification.rb +7 -5
  135. data/bundler/lib/bundler/resolver/base.rb +109 -0
  136. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  137. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  138. data/bundler/lib/bundler/resolver/package.rb +72 -0
  139. data/bundler/lib/bundler/resolver/root.rb +25 -0
  140. data/bundler/lib/bundler/resolver/spec_group.rb +43 -71
  141. data/bundler/lib/bundler/resolver.rb +332 -308
  142. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  143. data/bundler/lib/bundler/ruby_version.rb +5 -18
  144. data/bundler/lib/bundler/rubygems_ext.rb +144 -25
  145. data/bundler/lib/bundler/rubygems_gem_installer.rb +32 -20
  146. data/bundler/lib/bundler/rubygems_integration.rb +24 -95
  147. data/bundler/lib/bundler/runtime.rb +2 -7
  148. data/bundler/lib/bundler/self_manager.rb +168 -0
  149. data/bundler/lib/bundler/settings.rb +5 -10
  150. data/bundler/lib/bundler/setup.rb +4 -1
  151. data/bundler/lib/bundler/shared_helpers.rb +17 -25
  152. data/bundler/lib/bundler/source/git/git_proxy.rb +219 -71
  153. data/bundler/lib/bundler/source/git.rb +23 -26
  154. data/bundler/lib/bundler/source/metadata.rb +3 -4
  155. data/bundler/lib/bundler/source/path/installer.rb +1 -22
  156. data/bundler/lib/bundler/source/path.rb +7 -7
  157. data/bundler/lib/bundler/source/rubygems.rb +91 -130
  158. data/bundler/lib/bundler/source/rubygems_aggregate.rb +1 -1
  159. data/bundler/lib/bundler/source.rb +4 -5
  160. data/bundler/lib/bundler/source_list.rb +19 -31
  161. data/bundler/lib/bundler/source_map.rb +15 -2
  162. data/bundler/lib/bundler/spec_set.rb +63 -35
  163. data/bundler/lib/bundler/stub_specification.rb +5 -3
  164. data/bundler/lib/bundler/templates/Executable +3 -5
  165. data/bundler/lib/bundler/templates/Executable.bundler +6 -11
  166. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  167. data/bundler/lib/bundler/templates/Gemfile +0 -2
  168. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  169. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  170. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -11
  171. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +27 -3
  172. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  173. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  174. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  175. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  176. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
  177. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  178. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +22 -16
  180. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  181. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  182. data/bundler/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
  183. data/bundler/lib/bundler/ui/shell.rb +36 -13
  184. data/bundler/lib/bundler/ui/silent.rb +21 -5
  185. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  186. data/bundler/lib/bundler/vendor/.document +1 -0
  187. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  188. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  189. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  190. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  191. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  192. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  193. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  196. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  197. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  198. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  199. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  200. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  201. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  202. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  203. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  204. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  205. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  206. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  207. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  208. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  209. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  210. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +6 -6
  211. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -2
  212. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +6 -2
  213. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  214. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +9 -4
  215. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +19 -1
  216. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +23 -5
  217. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  218. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  219. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  220. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  221. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  222. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +76 -91
  223. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  224. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
  225. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +32 -13
  226. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
  227. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
  228. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
  229. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  230. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
  231. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +14 -21
  232. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -17
  233. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  234. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  235. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  236. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -3
  237. data/bundler/lib/bundler/vendored_persistent.rb +1 -33
  238. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  239. data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
  240. data/bundler/lib/bundler/version.rb +5 -1
  241. data/bundler/lib/bundler/worker.rb +5 -7
  242. data/bundler/lib/bundler.rb +50 -77
  243. data/hide_lib_for_update/note.txt +0 -4
  244. data/lib/rubygems/available_set.rb +3 -3
  245. data/lib/rubygems/basic_specification.rb +12 -12
  246. data/lib/rubygems/bundler_version_finder.rb +14 -46
  247. data/lib/rubygems/command.rb +47 -39
  248. data/lib/rubygems/command_manager.rb +34 -13
  249. data/lib/rubygems/commands/build_command.rb +11 -8
  250. data/lib/rubygems/commands/cert_command.rb +39 -39
  251. data/lib/rubygems/commands/check_command.rb +20 -20
  252. data/lib/rubygems/commands/cleanup_command.rb +23 -23
  253. data/lib/rubygems/commands/contents_command.rb +13 -13
  254. data/lib/rubygems/commands/dependency_command.rb +35 -45
  255. data/lib/rubygems/commands/environment_command.rb +10 -7
  256. data/lib/rubygems/commands/exec_command.rb +248 -0
  257. data/lib/rubygems/commands/fetch_command.rb +32 -13
  258. data/lib/rubygems/commands/generate_index_command.rb +17 -17
  259. data/lib/rubygems/commands/help_command.rb +6 -6
  260. data/lib/rubygems/commands/info_command.rb +3 -3
  261. data/lib/rubygems/commands/install_command.rb +31 -24
  262. data/lib/rubygems/commands/list_command.rb +4 -4
  263. data/lib/rubygems/commands/lock_command.rb +4 -4
  264. data/lib/rubygems/commands/mirror_command.rb +3 -3
  265. data/lib/rubygems/commands/open_command.rb +9 -9
  266. data/lib/rubygems/commands/outdated_command.rb +5 -5
  267. data/lib/rubygems/commands/owner_command.rb +17 -12
  268. data/lib/rubygems/commands/pristine_command.rb +64 -49
  269. data/lib/rubygems/commands/push_command.rb +16 -16
  270. data/lib/rubygems/commands/query_command.rb +9 -9
  271. data/lib/rubygems/commands/rdoc_command.rb +26 -25
  272. data/lib/rubygems/commands/search_command.rb +4 -4
  273. data/lib/rubygems/commands/server_command.rb +16 -79
  274. data/lib/rubygems/commands/setup_command.rb +172 -173
  275. data/lib/rubygems/commands/signin_command.rb +9 -9
  276. data/lib/rubygems/commands/signout_command.rb +7 -7
  277. data/lib/rubygems/commands/sources_command.rb +22 -22
  278. data/lib/rubygems/commands/specification_command.rb +18 -18
  279. data/lib/rubygems/commands/stale_command.rb +2 -2
  280. data/lib/rubygems/commands/uninstall_command.rb +43 -40
  281. data/lib/rubygems/commands/unpack_command.rb +13 -13
  282. data/lib/rubygems/commands/update_command.rb +61 -72
  283. data/lib/rubygems/commands/which_command.rb +7 -7
  284. data/lib/rubygems/commands/yank_command.rb +11 -11
  285. data/lib/rubygems/compatibility.rb +4 -2
  286. data/lib/rubygems/config_file.rb +58 -25
  287. data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
  288. data/lib/rubygems/core_ext/kernel_require.rb +108 -115
  289. data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
  290. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  291. data/lib/rubygems/defaults.rb +32 -36
  292. data/lib/rubygems/dependency.rb +20 -17
  293. data/lib/rubygems/dependency_installer.rb +37 -37
  294. data/lib/rubygems/dependency_list.rb +7 -7
  295. data/lib/rubygems/deprecate.rb +55 -8
  296. data/lib/rubygems/doctor.rb +21 -21
  297. data/lib/rubygems/errors.rb +3 -6
  298. data/lib/rubygems/exceptions.rb +35 -7
  299. data/lib/rubygems/ext/build_error.rb +1 -1
  300. data/lib/rubygems/ext/builder.rb +51 -22
  301. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  302. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  303. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  304. data/lib/rubygems/ext/configure_builder.rb +1 -1
  305. data/lib/rubygems/ext/ext_conf_builder.rb +35 -59
  306. data/lib/rubygems/ext/rake_builder.rb +3 -3
  307. data/lib/rubygems/ext.rb +7 -6
  308. data/lib/rubygems/gem_runner.rb +12 -16
  309. data/lib/rubygems/gemcutter_utilities.rb +60 -21
  310. data/lib/rubygems/indexer.rb +30 -28
  311. data/lib/rubygems/install_default_message.rb +2 -2
  312. data/lib/rubygems/install_message.rb +2 -2
  313. data/lib/rubygems/install_update_options.rb +70 -61
  314. data/lib/rubygems/installer.rb +135 -87
  315. data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
  316. data/lib/rubygems/local_remote_options.rb +22 -24
  317. data/lib/rubygems/mock_gem_ui.rb +2 -2
  318. data/lib/rubygems/name_tuple.rb +6 -7
  319. data/lib/rubygems/optparse/.document +1 -0
  320. data/lib/rubygems/optparse/COPYING +56 -0
  321. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  322. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  323. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  324. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  325. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  326. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  327. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  328. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  329. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  330. data/lib/rubygems/optparse.rb +3 -0
  331. data/lib/rubygems/package/file_source.rb +2 -2
  332. data/lib/rubygems/package/old.rb +9 -9
  333. data/lib/rubygems/package/tar_header.rb +62 -62
  334. data/lib/rubygems/package/tar_reader/entry.rb +90 -9
  335. data/lib/rubygems/package/tar_reader.rb +1 -29
  336. data/lib/rubygems/package/tar_writer.rb +7 -7
  337. data/lib/rubygems/package.rb +77 -60
  338. data/lib/rubygems/package_task.rb +4 -4
  339. data/lib/rubygems/path_support.rb +1 -6
  340. data/lib/rubygems/platform.rb +94 -61
  341. data/lib/rubygems/psych_tree.rb +1 -1
  342. data/lib/rubygems/query_utils.rb +49 -51
  343. data/lib/rubygems/rdoc.rb +2 -2
  344. data/lib/rubygems/remote_fetcher.rb +27 -27
  345. data/lib/rubygems/request/connection_pools.rb +4 -4
  346. data/lib/rubygems/request/http_pool.rb +1 -1
  347. data/lib/rubygems/request.rb +24 -24
  348. data/lib/rubygems/request_set/gem_dependency_api.rb +122 -123
  349. data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
  350. data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
  351. data/lib/rubygems/request_set/lockfile.rb +9 -9
  352. data/lib/rubygems/request_set.rb +18 -18
  353. data/lib/rubygems/requirement.rb +15 -15
  354. data/lib/rubygems/resolver/activation_request.rb +3 -3
  355. data/lib/rubygems/resolver/api_set.rb +4 -4
  356. data/lib/rubygems/resolver/api_specification.rb +6 -6
  357. data/lib/rubygems/resolver/best_set.rb +5 -5
  358. data/lib/rubygems/resolver/conflict.rb +10 -10
  359. data/lib/rubygems/resolver/dependency_request.rb +2 -2
  360. data/lib/rubygems/resolver/git_set.rb +2 -2
  361. data/lib/rubygems/resolver/git_specification.rb +6 -6
  362. data/lib/rubygems/resolver/index_set.rb +3 -3
  363. data/lib/rubygems/resolver/index_specification.rb +6 -5
  364. data/lib/rubygems/resolver/installed_specification.rb +4 -4
  365. data/lib/rubygems/resolver/installer_set.rb +21 -26
  366. data/lib/rubygems/resolver/local_specification.rb +2 -2
  367. data/lib/rubygems/resolver/lock_set.rb +4 -4
  368. data/lib/rubygems/resolver/lock_specification.rb +4 -4
  369. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +3 -3
  370. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
  371. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
  372. data/lib/rubygems/resolver/molinillo.rb +1 -1
  373. data/lib/rubygems/resolver/specification.rb +1 -1
  374. data/lib/rubygems/resolver/stats.rb +1 -1
  375. data/lib/rubygems/resolver/vendor_set.rb +1 -1
  376. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  377. data/lib/rubygems/resolver.rb +40 -40
  378. data/lib/rubygems/s3_uri_signer.rb +6 -6
  379. data/lib/rubygems/safe_yaml.rb +10 -10
  380. data/lib/rubygems/security/policies.rb +47 -47
  381. data/lib/rubygems/security/policy.rb +19 -21
  382. data/lib/rubygems/security/signer.rb +5 -5
  383. data/lib/rubygems/security/trust_dir.rb +4 -4
  384. data/lib/rubygems/security.rb +37 -43
  385. data/lib/rubygems/security_option.rb +7 -7
  386. data/lib/rubygems/source/git.rb +25 -24
  387. data/lib/rubygems/source/installed.rb +1 -1
  388. data/lib/rubygems/source/local.rb +2 -2
  389. data/lib/rubygems/source/specific_file.rb +1 -1
  390. data/lib/rubygems/source.rb +27 -32
  391. data/lib/rubygems/source_list.rb +5 -9
  392. data/lib/rubygems/spec_fetcher.rb +37 -37
  393. data/lib/rubygems/specification.rb +265 -211
  394. data/lib/rubygems/specification_policy.rb +49 -30
  395. data/lib/rubygems/stub_specification.rb +24 -27
  396. data/lib/rubygems/text.rb +22 -21
  397. data/lib/rubygems/tsort/.document +1 -0
  398. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  399. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  400. data/lib/rubygems/tsort.rb +3 -0
  401. data/lib/rubygems/uninstaller.rb +29 -26
  402. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  403. data/lib/rubygems/update_suggestion.rb +69 -0
  404. data/lib/rubygems/uri.rb +45 -30
  405. data/lib/rubygems/uri_formatter.rb +1 -1
  406. data/lib/rubygems/user_interaction.rb +42 -28
  407. data/lib/rubygems/util/licenses.rb +4 -2
  408. data/lib/rubygems/util.rb +12 -16
  409. data/lib/rubygems/validator.rb +6 -6
  410. data/lib/rubygems/version.rb +28 -17
  411. data/lib/rubygems/version_option.rb +5 -5
  412. data/lib/rubygems.rb +129 -117
  413. data/rubygems-update.gemspec +3 -3
  414. data/setup.rb +11 -16
  415. data/test/rubygems/alternate_cert.pem +14 -14
  416. data/test/rubygems/alternate_cert_32.pem +15 -15
  417. data/test/rubygems/alternate_key.pem +25 -25
  418. data/test/rubygems/bundler_test_gem.rb +419 -0
  419. data/test/rubygems/child_cert.pem +15 -16
  420. data/test/rubygems/child_cert_32.pem +15 -16
  421. data/test/rubygems/child_key.pem +25 -25
  422. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  423. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  424. data/test/rubygems/encrypted_private_key.pem +26 -26
  425. data/test/rubygems/expired_cert.pem +15 -15
  426. data/test/rubygems/future_cert.pem +15 -15
  427. data/test/rubygems/future_cert_32.pem +15 -15
  428. data/test/rubygems/grandchild_cert.pem +15 -16
  429. data/test/rubygems/grandchild_cert_32.pem +15 -16
  430. data/test/rubygems/grandchild_key.pem +25 -25
  431. data/test/rubygems/helper.rb +237 -207
  432. data/test/rubygems/installer_test_case.rb +13 -13
  433. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  434. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  435. data/test/rubygems/invalid_key.pem +25 -25
  436. data/test/rubygems/invalid_signer_cert.pem +15 -15
  437. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  438. data/test/rubygems/invalidchild_cert.pem +15 -16
  439. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  440. data/test/rubygems/invalidchild_key.pem +25 -25
  441. data/test/rubygems/package/tar_test_case.rb +52 -17
  442. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  443. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  444. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  445. data/test/rubygems/private_key.pem +25 -25
  446. data/test/rubygems/public_cert.pem +16 -16
  447. data/test/rubygems/public_cert_32.pem +15 -15
  448. data/test/rubygems/public_key.pem +7 -7
  449. data/test/rubygems/rubygems_plugin.rb +2 -2
  450. data/test/rubygems/simple_gem.rb +1 -1
  451. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
  452. data/test/rubygems/test_bundled_ca.rb +11 -11
  453. data/test/rubygems/test_config.rb +5 -5
  454. data/test/rubygems/test_deprecate.rb +3 -3
  455. data/test/rubygems/test_exit.rb +17 -0
  456. data/test/rubygems/test_gem.rb +367 -757
  457. data/test/rubygems/test_gem_available_set.rb +21 -21
  458. data/test/rubygems/test_gem_bundler_version_finder.rb +27 -47
  459. data/test/rubygems/test_gem_command.rb +45 -45
  460. data/test/rubygems/test_gem_command_manager.rb +124 -27
  461. data/test/rubygems/test_gem_commands_build_command.rb +73 -63
  462. data/test/rubygems/test_gem_commands_cert_command.rb +105 -107
  463. data/test/rubygems/test_gem_commands_check_command.rb +4 -4
  464. data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
  465. data/test/rubygems/test_gem_commands_contents_command.rb +28 -28
  466. data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
  467. data/test/rubygems/test_gem_commands_environment_command.rb +38 -14
  468. data/test/rubygems/test_gem_commands_exec_command.rb +851 -0
  469. data/test/rubygems/test_gem_commands_fetch_command.rb +159 -26
  470. data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
  471. data/test/rubygems/test_gem_commands_help_command.rb +13 -13
  472. data/test/rubygems/test_gem_commands_info_command.rb +28 -2
  473. data/test/rubygems/test_gem_commands_install_command.rb +200 -132
  474. data/test/rubygems/test_gem_commands_list_command.rb +4 -4
  475. data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
  476. data/test/rubygems/test_gem_commands_mirror.rb +2 -2
  477. data/test/rubygems/test_gem_commands_open_command.rb +5 -5
  478. data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
  479. data/test/rubygems/test_gem_commands_owner_command.rb +126 -45
  480. data/test/rubygems/test_gem_commands_pristine_command.rb +141 -92
  481. data/test/rubygems/test_gem_commands_push_command.rb +85 -59
  482. data/test/rubygems/test_gem_commands_query_command.rb +73 -73
  483. data/test/rubygems/test_gem_commands_search_command.rb +2 -2
  484. data/test/rubygems/test_gem_commands_server_command.rb +6 -48
  485. data/test/rubygems/test_gem_commands_setup_command.rb +169 -92
  486. data/test/rubygems/test_gem_commands_signin_command.rb +154 -26
  487. data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
  488. data/test/rubygems/test_gem_commands_sources_command.rb +74 -25
  489. data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
  490. data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
  491. data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -82
  492. data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
  493. data/test/rubygems/test_gem_commands_update_command.rb +202 -91
  494. data/test/rubygems/test_gem_commands_which_command.rb +6 -6
  495. data/test/rubygems/test_gem_commands_yank_command.rb +43 -43
  496. data/test/rubygems/test_gem_config_file.rb +93 -81
  497. data/test/rubygems/test_gem_dependency.rb +78 -80
  498. data/test/rubygems/test_gem_dependency_installer.rb +165 -165
  499. data/test/rubygems/test_gem_dependency_list.rb +47 -47
  500. data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
  501. data/test/rubygems/test_gem_doctor.rb +26 -26
  502. data/test/rubygems/test_gem_ext_builder.rb +60 -62
  503. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  504. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  505. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  506. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  507. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  508. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  509. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  510. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +247 -0
  511. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  512. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  513. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  514. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  515. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  516. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  517. data/test/rubygems/test_gem_ext_cmake_builder.rb +17 -15
  518. data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
  519. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +53 -50
  520. data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
  521. data/test/rubygems/test_gem_gem_runner.rb +13 -8
  522. data/test/rubygems/test_gem_gemcutter_utilities.rb +71 -65
  523. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
  524. data/test/rubygems/test_gem_indexer.rb +90 -67
  525. data/test/rubygems/test_gem_install_update_options.rb +18 -18
  526. data/test/rubygems/test_gem_installer.rb +511 -327
  527. data/test/rubygems/test_gem_local_remote_options.rb +10 -10
  528. data/test/rubygems/test_gem_name_tuple.rb +4 -4
  529. data/test/rubygems/test_gem_package.rb +246 -236
  530. data/test/rubygems/test_gem_package_old.rb +13 -13
  531. data/test/rubygems/test_gem_package_tar_header.rb +47 -47
  532. data/test/rubygems/test_gem_package_tar_reader.rb +55 -8
  533. data/test/rubygems/test_gem_package_tar_reader_entry.rb +161 -16
  534. data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
  535. data/test/rubygems/test_gem_package_task.rb +18 -18
  536. data/test/rubygems/test_gem_path_support.rb +15 -19
  537. data/test/rubygems/test_gem_platform.rb +335 -214
  538. data/test/rubygems/test_gem_rdoc.rb +14 -14
  539. data/test/rubygems/test_gem_remote_fetcher.rb +169 -154
  540. data/test/rubygems/test_gem_request.rb +65 -59
  541. data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
  542. data/test/rubygems/test_gem_request_set.rb +100 -100
  543. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +209 -211
  544. data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
  545. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -58
  546. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
  547. data/test/rubygems/test_gem_requirement.rb +47 -42
  548. data/test/rubygems/test_gem_resolver.rb +173 -106
  549. data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
  550. data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
  551. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
  552. data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
  553. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
  554. data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
  555. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
  556. data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
  557. data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
  558. data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
  559. data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
  560. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
  561. data/test/rubygems/test_gem_resolver_installer_set.rb +79 -35
  562. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
  563. data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
  564. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
  565. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
  566. data/test/rubygems/test_gem_resolver_specification.rb +8 -8
  567. data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
  568. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
  569. data/test/rubygems/test_gem_security.rb +69 -69
  570. data/test/rubygems/test_gem_security_policy.rb +72 -72
  571. data/test/rubygems/test_gem_security_signer.rb +34 -34
  572. data/test/rubygems/test_gem_security_trust_dir.rb +6 -6
  573. data/test/rubygems/test_gem_silent_ui.rb +38 -32
  574. data/test/rubygems/test_gem_source.rb +44 -44
  575. data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
  576. data/test/rubygems/test_gem_source_git.rb +69 -62
  577. data/test/rubygems/test_gem_source_installed.rb +16 -16
  578. data/test/rubygems/test_gem_source_list.rb +5 -5
  579. data/test/rubygems/test_gem_source_local.rb +14 -14
  580. data/test/rubygems/test_gem_source_lock.rb +31 -31
  581. data/test/rubygems/test_gem_source_specific_file.rb +17 -17
  582. data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
  583. data/test/rubygems/test_gem_source_vendor.rb +13 -13
  584. data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
  585. data/test/rubygems/test_gem_specification.rb +560 -493
  586. data/test/rubygems/test_gem_stream_ui.rb +20 -20
  587. data/test/rubygems/test_gem_stub_specification.rb +32 -48
  588. data/test/rubygems/test_gem_text.rb +7 -1
  589. data/test/rubygems/test_gem_uninstaller.rb +113 -113
  590. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
  591. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  592. data/test/rubygems/test_gem_uri.rb +4 -4
  593. data/test/rubygems/test_gem_uri_formatter.rb +14 -14
  594. data/test/rubygems/test_gem_util.rb +23 -23
  595. data/test/rubygems/test_gem_validator.rb +8 -8
  596. data/test/rubygems/test_gem_version.rb +27 -16
  597. data/test/rubygems/test_gem_version_option.rb +15 -15
  598. data/test/rubygems/test_kernel.rb +42 -60
  599. data/test/rubygems/test_project_sanity.rb +2 -2
  600. data/test/rubygems/test_remote_fetch_error.rb +6 -6
  601. data/test/rubygems/test_require.rb +132 -174
  602. data/test/rubygems/test_rubygems.rb +42 -12
  603. data/test/rubygems/utilities.rb +59 -37
  604. data/test/rubygems/wrong_key_cert.pem +15 -15
  605. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  606. data/test/test_changelog_generator.rb +1 -0
  607. metadata +97 -41
  608. data/bundler/lib/bundler/dep_proxy.rb +0 -55
  609. data/bundler/lib/bundler/gemdeps.rb +0 -29
  610. data/bundler/lib/bundler/psyched_yaml.rb +0 -22
  611. data/bundler/lib/bundler/templates/gems.rb +0 -8
  612. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  613. data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
  614. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  615. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  616. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  617. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  618. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  619. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  620. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  621. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  622. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  623. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  624. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  625. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  626. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  627. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  628. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  629. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  630. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  631. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  632. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  633. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  634. data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  635. data/bundler/lib/bundler/version_ranges.rb +0 -122
  636. data/lib/rubygems/psych_additions.rb +0 -10
  637. data/lib/rubygems/server.rb +0 -882
  638. data/test/rubygems/bogussources.rb +0 -9
  639. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  640. data/test/rubygems/test_gem_server.rb +0 -608
  641. /data/bundler/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'installer_test_case'
2
+ require_relative "installer_test_case"
3
3
 
4
4
  class TestGemInstaller < Gem::InstallerTestCase
5
5
  def setup
@@ -18,11 +18,12 @@ class TestGemInstaller < Gem::InstallerTestCase
18
18
  end
19
19
 
20
20
  def test_app_script_text
21
- installer = setup_base_installer
21
+ load_relative "no" do
22
+ installer = setup_base_installer
22
23
 
23
- util_make_exec @spec, ''
24
+ util_make_exec @spec, ""
24
25
 
25
- expected = <<-EOF
26
+ expected = <<-EOF
26
27
  #!#{Gem.ruby}
27
28
  #
28
29
  # This file was generated by RubyGems.
@@ -52,10 +53,11 @@ else
52
53
  gem "a", version
53
54
  load Gem.bin_path("a", "executable", version)
54
55
  end
55
- EOF
56
+ EOF
56
57
 
57
- wrapper = installer.app_script_text 'executable'
58
- assert_equal expected, wrapper
58
+ wrapper = installer.app_script_text "executable"
59
+ assert_equal expected, wrapper
60
+ end
59
61
  end
60
62
 
61
63
  def test_check_executable_overwrite
@@ -64,12 +66,12 @@ end
64
66
  installer.generate_bin
65
67
 
66
68
  @spec = Gem::Specification.new do |s|
67
- s.files = ['lib/code.rb']
69
+ s.files = ["lib/code.rb"]
68
70
  s.name = "a"
69
71
  s.version = "3"
70
72
  s.summary = "summary"
71
73
  s.description = "desc"
72
- s.require_path = 'lib'
74
+ s.require_path = "lib"
73
75
  end
74
76
 
75
77
  util_make_exec
@@ -77,7 +79,7 @@ end
77
79
  installer.wrappers = true
78
80
  installer.generate_bin
79
81
 
80
- installed_exec = File.join util_inst_bindir, 'executable'
82
+ installed_exec = File.join util_inst_bindir, "executable"
81
83
  assert_path_exist installed_exec
82
84
 
83
85
  wrapper = File.read installed_exec
@@ -96,7 +98,7 @@ end
96
98
  installer.generate_bin
97
99
  end
98
100
 
99
- conflicted = File.join @gemhome, 'bin', 'executable'
101
+ conflicted = File.join @gemhome, "bin", "executable"
100
102
  assert_match %r{\A"executable" from a conflicts with (?:#{Regexp.quote(conflicted)}|installed executable from conflict)\z},
101
103
  e.message
102
104
  end
@@ -109,15 +111,15 @@ end
109
111
  installer.generate_bin
110
112
 
111
113
  @spec = Gem::Specification.new do |s|
112
- s.files = ['lib/code.rb']
114
+ s.files = ["lib/code.rb"]
113
115
  s.name = "a"
114
116
  s.version = "3"
115
117
  s.summary = "summary"
116
118
  s.description = "desc"
117
- s.require_path = 'lib'
119
+ s.require_path = "lib"
118
120
  end
119
121
 
120
- File.open File.join(util_inst_bindir, 'executable'), 'w' do |io|
122
+ File.open File.join(util_inst_bindir, "executable"), "w" do |io|
121
123
  io.write <<-EXEC
122
124
  #!/usr/local/bin/ruby
123
125
  #
@@ -128,14 +130,14 @@ gem 'other', version
128
130
  end
129
131
 
130
132
  util_make_exec
131
- Gem::Installer.exec_format = 'foo-%s-bar'
133
+ Gem::Installer.exec_format = "foo-%s-bar"
132
134
  installer.gem_dir = @spec.gem_dir
133
135
  installer.wrappers = true
134
136
  installer.format_executable = true
135
137
 
136
138
  installer.generate_bin # should not raise
137
139
 
138
- installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
140
+ installed_exec = File.join util_inst_bindir, "foo-executable-bar"
139
141
  assert_path_exist installed_exec
140
142
 
141
143
  wrapper = File.read installed_exec
@@ -170,7 +172,7 @@ gem 'other', version
170
172
 
171
173
  installer.generate_bin
172
174
 
173
- installed_exec = File.join util_inst_bindir, 'executable'
175
+ installed_exec = File.join util_inst_bindir, "executable"
174
176
  assert_path_exist installed_exec
175
177
 
176
178
  wrapper = File.read installed_exec
@@ -185,7 +187,7 @@ gem 'other', version
185
187
 
186
188
  installer.generate_bin
187
189
 
188
- installed_exec = File.join util_inst_bindir, 'executable'
190
+ installed_exec = File.join util_inst_bindir, "executable"
189
191
  assert_path_exist installed_exec
190
192
 
191
193
  wrapper = File.read installed_exec
@@ -201,8 +203,8 @@ gem 'other', version
201
203
  bin_dir = bin_dir.downcase
202
204
  end
203
205
 
204
- orig_PATH, ENV['PATH'] =
205
- ENV['PATH'], [ENV['PATH'], bin_dir].join(File::PATH_SEPARATOR)
206
+ orig_PATH, ENV["PATH"] =
207
+ ENV["PATH"], [ENV["PATH"], bin_dir].join(File::PATH_SEPARATOR)
206
208
 
207
209
  use_ui @ui do
208
210
  installer.check_that_user_bin_dir_is_in_path
@@ -212,7 +214,7 @@ gem 'other', version
212
214
 
213
215
  return unless win_platform?
214
216
 
215
- ENV['PATH'] = [orig_PATH, bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)].join(File::PATH_SEPARATOR)
217
+ ENV["PATH"] = [orig_PATH, bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)].join(File::PATH_SEPARATOR)
216
218
 
217
219
  use_ui @ui do
218
220
  installer.check_that_user_bin_dir_is_in_path
@@ -220,17 +222,17 @@ gem 'other', version
220
222
 
221
223
  assert_empty @ui.error
222
224
  ensure
223
- ENV['PATH'] = orig_PATH
225
+ ENV["PATH"] = orig_PATH
224
226
  end
225
227
 
226
228
  def test_check_that_user_bin_dir_is_in_path_tilde
227
229
  pend "Tilde is PATH is not supported under MS Windows" if win_platform?
228
230
 
229
- orig_PATH, ENV['PATH'] =
230
- ENV['PATH'], [ENV['PATH'], '~/bin'].join(File::PATH_SEPARATOR)
231
+ orig_PATH, ENV["PATH"] =
232
+ ENV["PATH"], [ENV["PATH"], "~/bin"].join(File::PATH_SEPARATOR)
231
233
 
232
234
  installer = setup_base_installer
233
- installer.bin_dir.replace File.join @userhome, 'bin'
235
+ installer.bin_dir.replace File.join @userhome, "bin"
234
236
 
235
237
  use_ui @ui do
236
238
  installer.check_that_user_bin_dir_is_in_path
@@ -238,7 +240,7 @@ gem 'other', version
238
240
 
239
241
  assert_empty @ui.error
240
242
  ensure
241
- ENV['PATH'] = orig_PATH unless win_platform?
243
+ ENV["PATH"] = orig_PATH unless win_platform?
242
244
  end
243
245
 
244
246
  def test_check_that_user_bin_dir_is_in_path_not_in_path
@@ -260,22 +262,22 @@ gem 'other', version
260
262
  def test_ensure_dependency
261
263
  installer = setup_base_installer
262
264
 
263
- util_spec 'a'
265
+ util_spec "a"
264
266
 
265
- dep = Gem::Dependency.new 'a', '>= 2'
267
+ dep = Gem::Dependency.new "a", ">= 2"
266
268
  assert installer.ensure_dependency(@spec, dep)
267
269
 
268
- dep = Gem::Dependency.new 'b', '> 2'
270
+ dep = Gem::Dependency.new "b", "> 2"
269
271
  e = assert_raise Gem::InstallError do
270
272
  installer.ensure_dependency @spec, dep
271
273
  end
272
274
 
273
- assert_equal 'a requires b (> 2)', e.message
275
+ assert_equal "a requires b (> 2)", e.message
274
276
  end
275
277
 
276
278
  def test_ensure_loadable_spec
277
- a, a_gem = util_gem 'a', 2 do |s|
278
- s.add_dependency 'garbage ~> 5'
279
+ a, a_gem = util_gem "a", 2 do |s|
280
+ s.add_dependency "garbage ~> 5"
279
281
  end
280
282
 
281
283
  installer = Gem::Installer.at a_gem
@@ -289,10 +291,10 @@ gem 'other', version
289
291
  end
290
292
 
291
293
  def test_ensure_loadable_spec_security_policy
292
- pend 'openssl is missing' unless Gem::HAVE_OPENSSL
294
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
293
295
 
294
- _, a_gem = util_gem 'a', 2 do |s|
295
- s.add_dependency 'garbage ~> 5'
296
+ _, a_gem = util_gem "a", 2 do |s|
297
+ s.add_dependency "garbage ~> 5"
296
298
  end
297
299
 
298
300
  policy = Gem::Security::HighSecurity
@@ -308,7 +310,7 @@ gem 'other', version
308
310
 
309
311
  installer.extract_files
310
312
 
311
- assert_path_exist File.join @spec.gem_dir, 'bin/executable'
313
+ assert_path_exist File.join @spec.gem_dir, "bin/executable"
312
314
  end
313
315
 
314
316
  def test_generate_bin_bindir
@@ -317,12 +319,12 @@ gem 'other', version
317
319
  installer.wrappers = true
318
320
 
319
321
  @spec.executables = %w[executable]
320
- @spec.bindir = 'bin'
322
+ @spec.bindir = "bin"
321
323
 
322
- exec_file = installer.formatted_program_filename 'executable'
324
+ exec_file = installer.formatted_program_filename "executable"
323
325
  exec_path = File.join @spec.gem_dir, exec_file
324
- File.open exec_path, 'w' do |f|
325
- f.puts '#!/usr/bin/ruby'
326
+ File.open exec_path, "w" do |f|
327
+ f.puts "#!/usr/bin/ruby"
326
328
  end
327
329
 
328
330
  installer.gem_dir = @spec.gem_dir
@@ -330,7 +332,7 @@ gem 'other', version
330
332
  installer.generate_bin
331
333
 
332
334
  assert_directory_exists util_inst_bindir
333
- installed_exec = File.join(util_inst_bindir, 'executable')
335
+ installed_exec = File.join(util_inst_bindir, "executable")
334
336
  assert_path_exist installed_exec
335
337
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
336
338
 
@@ -350,7 +352,7 @@ gem 'other', version
350
352
  :install_dir => "/non/existent",
351
353
  }
352
354
 
353
- inst = Gem::Installer.at '', options
355
+ inst = Gem::Installer.at "", options
354
356
 
355
357
  Gem::Installer.path_warning = false
356
358
 
@@ -373,7 +375,7 @@ gem 'other', version
373
375
 
374
376
  installer.generate_bin
375
377
  assert_directory_exists util_inst_bindir
376
- installed_exec = File.join util_inst_bindir, 'executable'
378
+ installed_exec = File.join util_inst_bindir, "executable"
377
379
  assert_path_exist installed_exec
378
380
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
379
381
 
@@ -389,10 +391,10 @@ gem 'other', version
389
391
  util_make_exec
390
392
  installer.gem_dir = @spec.gem_dir
391
393
 
392
- Gem::Installer.exec_format = 'foo-%s-bar'
394
+ Gem::Installer.exec_format = "foo-%s-bar"
393
395
  installer.generate_bin
394
396
  assert_directory_exists util_inst_bindir
395
- installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
397
+ installed_exec = File.join util_inst_bindir, "foo-executable-bar"
396
398
  assert_path_exist installed_exec
397
399
  ensure
398
400
  Gem::Installer.exec_format = nil
@@ -405,10 +407,10 @@ gem 'other', version
405
407
  util_make_exec
406
408
  installer.gem_dir = @spec.gem_dir
407
409
 
408
- Gem::Installer.exec_format = 'foo-%s-bar'
410
+ Gem::Installer.exec_format = "foo-%s-bar"
409
411
  installer.generate_bin
410
412
  assert_directory_exists util_inst_bindir
411
- installed_exec = File.join util_inst_bindir, 'executable'
413
+ installed_exec = File.join util_inst_bindir, "executable"
412
414
  assert_path_exist installed_exec
413
415
  ensure
414
416
  Gem::Installer.exec_format = nil
@@ -420,19 +422,19 @@ gem 'other', version
420
422
  installer.wrappers = true
421
423
 
422
424
  gem_dir = File.join("#{@gemhome}2", "gems", @spec.full_name)
423
- gem_bindir = File.join gem_dir, 'bin'
425
+ gem_bindir = File.join gem_dir, "bin"
424
426
  FileUtils.mkdir_p gem_bindir
425
- File.open File.join(gem_bindir, 'executable'), 'w' do |f|
427
+ File.open File.join(gem_bindir, "executable"), "w" do |f|
426
428
  f.puts "#!/bin/ruby"
427
429
  end
428
430
 
429
431
  installer.gem_home = "#{@gemhome}2"
430
432
  installer.gem_dir = gem_dir
431
- installer.bin_dir = File.join "#{@gemhome}2", 'bin'
433
+ installer.bin_dir = File.join "#{@gemhome}2", "bin"
432
434
 
433
435
  installer.generate_bin
434
436
 
435
- installed_exec = File.join("#{@gemhome}2", "bin", 'executable')
437
+ installed_exec = File.join("#{@gemhome}2", "bin", "executable")
436
438
  assert_path_exist installed_exec
437
439
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
438
440
 
@@ -448,7 +450,7 @@ gem 'other', version
448
450
  installer.wrappers = true
449
451
  installer.generate_bin
450
452
 
451
- assert_path_not_exist util_inst_bindir, 'bin dir was created when not needed'
453
+ assert_path_not_exist util_inst_bindir, "bin dir was created when not needed"
452
454
  end
453
455
 
454
456
  def test_generate_bin_script_no_perms
@@ -460,9 +462,9 @@ gem 'other', version
460
462
  Dir.mkdir util_inst_bindir
461
463
 
462
464
  if win_platform?
463
- pend('test_generate_bin_script_no_perms skipped on MS Windows')
465
+ pend("test_generate_bin_script_no_perms skipped on MS Windows")
464
466
  elsif Process.uid.zero?
465
- pend('test_generate_bin_script_no_perms skipped in root privilege')
467
+ pend("test_generate_bin_script_no_perms skipped in root privilege")
466
468
  else
467
469
  FileUtils.chmod 0000, util_inst_bindir
468
470
 
@@ -471,7 +473,7 @@ gem 'other', version
471
473
  end
472
474
  end
473
475
  ensure
474
- FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?)
476
+ FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG || win_platform?)
475
477
  end
476
478
 
477
479
  def test_generate_bin_script_no_shebang
@@ -480,16 +482,16 @@ gem 'other', version
480
482
  installer.wrappers = true
481
483
  @spec.executables = %w[executable]
482
484
 
483
- gem_dir = File.join @gemhome, 'gems', @spec.full_name
484
- gem_bindir = File.join gem_dir, 'bin'
485
+ gem_dir = File.join @gemhome, "gems", @spec.full_name
486
+ gem_bindir = File.join gem_dir, "bin"
485
487
  FileUtils.mkdir_p gem_bindir
486
- File.open File.join(gem_bindir, 'executable'), 'w' do |f|
488
+ File.open File.join(gem_bindir, "executable"), "w" do |f|
487
489
  f.puts "blah blah blah"
488
490
  end
489
491
 
490
492
  installer.generate_bin
491
493
 
492
- installed_exec = File.join @gemhome, 'bin', 'executable'
494
+ installed_exec = File.join @gemhome, "bin", "executable"
493
495
  assert_path_exist installed_exec
494
496
  assert_equal mask, File.stat(installed_exec).mode unless win_platform?
495
497
 
@@ -505,9 +507,9 @@ gem 'other', version
505
507
  installer.wrappers = true
506
508
  util_make_exec
507
509
  installer.gem_dir = @spec.gem_dir
508
- installed_exec = File.join(util_inst_bindir, 'executable')
510
+ installed_exec = File.join(util_inst_bindir, "executable")
509
511
 
510
- real_exec = File.join @spec.gem_dir, 'bin', 'executable'
512
+ real_exec = File.join @spec.gem_dir, "bin", "executable"
511
513
 
512
514
  # fake --no-wrappers for previous install
513
515
  unless Gem.win_platform?
@@ -523,7 +525,7 @@ gem 'other', version
523
525
  assert_match %r{generated by RubyGems}, File.read(installed_exec)
524
526
 
525
527
  refute_match %r{generated by RubyGems}, File.read(real_exec),
526
- 'real executable overwritten'
528
+ "real executable overwritten"
527
529
  end
528
530
 
529
531
  def test_generate_bin_symlink
@@ -537,9 +539,9 @@ gem 'other', version
537
539
 
538
540
  installer.generate_bin
539
541
  assert_directory_exists util_inst_bindir
540
- installed_exec = File.join util_inst_bindir, 'executable'
542
+ installed_exec = File.join util_inst_bindir, "executable"
541
543
  assert_equal true, File.symlink?(installed_exec)
542
- assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
544
+ assert_equal(File.join(@spec.gem_dir, "bin", "executable"),
543
545
  File.readlink(installed_exec))
544
546
  end
545
547
 
@@ -564,9 +566,9 @@ gem 'other', version
564
566
  Dir.mkdir util_inst_bindir
565
567
 
566
568
  if win_platform?
567
- pend('test_generate_bin_symlink_no_perms skipped on MS Windows')
569
+ pend("test_generate_bin_symlink_no_perms skipped on MS Windows")
568
570
  elsif Process.uid.zero?
569
- pend('test_user_install_disabled_read_only test skipped in root privilege')
571
+ pend("test_user_install_disabled_read_only test skipped in root privilege")
570
572
  else
571
573
  FileUtils.chmod 0000, util_inst_bindir
572
574
 
@@ -575,7 +577,7 @@ gem 'other', version
575
577
  end
576
578
  end
577
579
  ensure
578
- FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG or win_platform?)
580
+ FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG || win_platform?)
579
581
  end
580
582
 
581
583
  def test_generate_bin_symlink_update_newer
@@ -588,24 +590,24 @@ gem 'other', version
588
590
  installer.gem_dir = @spec.gem_dir
589
591
 
590
592
  installer.generate_bin
591
- installed_exec = File.join(util_inst_bindir, 'executable')
592
- assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
593
+ installed_exec = File.join(util_inst_bindir, "executable")
594
+ assert_equal(File.join(@spec.gem_dir, "bin", "executable"),
593
595
  File.readlink(installed_exec))
594
596
 
595
597
  @spec = Gem::Specification.new do |s|
596
- s.files = ['lib/code.rb']
598
+ s.files = ["lib/code.rb"]
597
599
  s.name = "a"
598
600
  s.version = "3"
599
601
  s.summary = "summary"
600
602
  s.description = "desc"
601
- s.require_path = 'lib'
603
+ s.require_path = "lib"
602
604
  end
603
605
 
604
606
  util_make_exec
605
607
  installer.gem_dir = @spec.gem_dir
606
608
  installer.generate_bin
607
- installed_exec = File.join(util_inst_bindir, 'executable')
608
- assert_equal(@spec.bin_file('executable'),
609
+ installed_exec = File.join(util_inst_bindir, "executable")
610
+ assert_equal(@spec.bin_file("executable"),
609
611
  File.readlink(installed_exec),
610
612
  "Ensure symlink moved to latest version")
611
613
  end
@@ -620,17 +622,17 @@ gem 'other', version
620
622
  installer.gem_dir = @spec.gem_dir
621
623
 
622
624
  installer.generate_bin
623
- installed_exec = File.join(util_inst_bindir, 'executable')
624
- assert_equal(File.join(@spec.gem_dir, 'bin', 'executable'),
625
+ installed_exec = File.join(util_inst_bindir, "executable")
626
+ assert_equal(File.join(@spec.gem_dir, "bin", "executable"),
625
627
  File.readlink(installed_exec))
626
628
 
627
629
  spec = Gem::Specification.new do |s|
628
- s.files = ['lib/code.rb']
630
+ s.files = ["lib/code.rb"]
629
631
  s.name = "a"
630
632
  s.version = "1"
631
633
  s.summary = "summary"
632
634
  s.description = "desc"
633
- s.require_path = 'lib'
635
+ s.require_path = "lib"
634
636
  end
635
637
 
636
638
  util_make_exec
@@ -641,8 +643,8 @@ gem 'other', version
641
643
 
642
644
  installer.generate_bin
643
645
 
644
- installed_exec = File.join util_inst_bindir, 'executable'
645
- expected = File.join @spec.gem_dir, 'bin', 'executable'
646
+ installed_exec = File.join util_inst_bindir, "executable"
647
+ expected = File.join @spec.gem_dir, "bin", "executable"
646
648
  assert_equal(expected,
647
649
  File.readlink(installed_exec),
648
650
  "Ensure symlink not moved")
@@ -659,16 +661,16 @@ gem 'other', version
659
661
 
660
662
  installer.generate_bin
661
663
 
662
- installed_exec = File.join util_inst_bindir, 'executable'
664
+ installed_exec = File.join util_inst_bindir, "executable"
663
665
  assert_path_exist installed_exec
664
666
 
665
667
  @spec = Gem::Specification.new do |s|
666
- s.files = ['lib/code.rb']
668
+ s.files = ["lib/code.rb"]
667
669
  s.name = "a"
668
670
  s.version = "3"
669
671
  s.summary = "summary"
670
672
  s.description = "desc"
671
- s.require_path = 'lib'
673
+ s.require_path = "lib"
672
674
  end
673
675
  util_make_exec
674
676
 
@@ -678,8 +680,8 @@ gem 'other', version
678
680
 
679
681
  installer.generate_bin
680
682
 
681
- installed_exec = File.join util_inst_bindir, 'executable'
682
- assert_equal(@spec.bin_file('executable'),
683
+ installed_exec = File.join util_inst_bindir, "executable"
684
+ assert_equal(@spec.bin_file("executable"),
683
685
  File.readlink(installed_exec),
684
686
  "Ensure symlink moved to latest version")
685
687
  end
@@ -689,7 +691,7 @@ gem 'other', version
689
691
  Gem.win_platform = true
690
692
  old_alt_separator = File::ALT_SEPARATOR
691
693
  File.__send__(:remove_const, :ALT_SEPARATOR)
692
- File.const_set(:ALT_SEPARATOR, '\\')
694
+ File.const_set(:ALT_SEPARATOR, "\\")
693
695
 
694
696
  installer = setup_base_installer
695
697
 
@@ -702,7 +704,7 @@ gem 'other', version
702
704
  end
703
705
 
704
706
  assert_directory_exists util_inst_bindir
705
- installed_exec = File.join(util_inst_bindir, 'executable')
707
+ installed_exec = File.join(util_inst_bindir, "executable")
706
708
  assert_path_exist installed_exec
707
709
 
708
710
  if symlink_supported?
@@ -724,17 +726,19 @@ gem 'other', version
724
726
  def test_generate_bin_uses_default_shebang
725
727
  pend "Symlinks not supported or not enabled" unless symlink_supported?
726
728
 
727
- installer = setup_base_installer
729
+ load_relative "no" do
730
+ installer = setup_base_installer
728
731
 
729
- installer.wrappers = true
730
- util_make_exec
732
+ installer.wrappers = true
733
+ util_make_exec
731
734
 
732
- installer.generate_bin
735
+ installer.generate_bin
733
736
 
734
- default_shebang = Gem.ruby
735
- shebang_line = File.open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
736
- assert_match(/\A#!/, shebang_line)
737
- assert_match(/#{default_shebang}/, shebang_line)
737
+ default_shebang = Gem.ruby
738
+ shebang_line = File.open("#{@gemhome}/bin/executable") {|f| f.readlines.first }
739
+ assert_match(/\A#!/, shebang_line)
740
+ assert_match(/#{default_shebang}/, shebang_line)
741
+ end
738
742
  end
739
743
 
740
744
  def test_generate_bin_with_dangling_symlink
@@ -752,13 +756,16 @@ gem 'other', version
752
756
  end
753
757
  end
754
758
 
755
- assert_match %r{bin/ascii_binder` is dangling symlink pointing to `bin/asciibinder`}, @ui.error
759
+ errors = @ui.error.split("\n")
760
+ assert_equal "WARNING: ascii_binder-0.1.10.1 ships with a dangling symlink named bin/ascii_binder pointing to missing bin/asciibinder file. Ignoring", errors.shift
761
+ assert_empty errors
762
+
756
763
  assert_empty @ui.output
757
764
  end
758
765
 
759
766
  def test_generate_plugins
760
767
  installer = util_setup_installer do |spec|
761
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
768
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
762
769
  io.write "puts __FILE__"
763
770
  end
764
771
 
@@ -769,18 +776,18 @@ gem 'other', version
769
776
  installer.install
770
777
  end
771
778
 
772
- plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
779
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
773
780
 
774
781
  FileUtils.rm plugin_path
775
782
 
776
783
  installer.generate_plugins
777
784
 
778
- assert File.exist?(plugin_path), 'plugin not written'
785
+ assert File.exist?(plugin_path), "plugin not written"
779
786
  end
780
787
 
781
788
  def test_generate_plugins_with_install_dir
782
- spec = quick_gem 'a' do |s|
783
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
789
+ spec = quick_gem "a" do |s|
790
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
784
791
  io.write "puts __FILE__"
785
792
  end
786
793
 
@@ -789,17 +796,17 @@ gem 'other', version
789
796
 
790
797
  util_build_gem spec
791
798
 
792
- plugin_path = File.join "#{@gemhome}2", 'plugins', 'a_plugin.rb'
799
+ plugin_path = File.join "#{@gemhome}2", "plugins", "a_plugin.rb"
793
800
  installer = util_installer spec, "#{@gemhome}2"
794
801
 
795
802
  assert_equal spec, installer.install
796
803
 
797
- assert File.exist?(plugin_path), 'plugin not written to install_dir'
804
+ assert File.exist?(plugin_path), "plugin not written to install_dir"
798
805
  end
799
806
 
800
807
  def test_generate_plugins_with_user_install
801
- spec = quick_gem 'a' do |s|
802
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
808
+ spec = quick_gem "a" do |s|
809
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
803
810
  io.write "puts __FILE__"
804
811
  end
805
812
 
@@ -809,19 +816,19 @@ gem 'other', version
809
816
  util_build_gem spec
810
817
 
811
818
  File.chmod(0555, Gem.plugindir)
812
- system_path = File.join(Gem.plugindir, 'a_plugin.rb')
813
- user_path = File.join(Gem.plugindir(Gem.user_dir), 'a_plugin.rb')
819
+ system_path = File.join(Gem.plugindir, "a_plugin.rb")
820
+ user_path = File.join(Gem.plugindir(Gem.user_dir), "a_plugin.rb")
814
821
  installer = util_installer spec, Gem.dir, :user
815
822
 
816
823
  assert_equal spec, installer.install
817
824
 
818
- assert !File.exist?(system_path), 'plugin incorrectly written to system plugins_dir'
819
- assert File.exist?(user_path), 'plugin not written to user plugins_dir'
825
+ assert !File.exist?(system_path), "plugin incorrectly written to system plugins_dir"
826
+ assert File.exist?(user_path), "plugin not written to user plugins_dir"
820
827
  end
821
828
 
822
829
  def test_generate_plugins_with_build_root
823
- spec = quick_gem 'a' do |s|
824
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
830
+ spec = quick_gem "a" do |s|
831
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
825
832
  io.write "puts __FILE__"
826
833
  end
827
834
 
@@ -831,17 +838,17 @@ gem 'other', version
831
838
  util_build_gem spec
832
839
 
833
840
  File.chmod(0555, Gem.plugindir)
834
- system_path = File.join(Gem.plugindir, 'a_plugin.rb')
841
+ system_path = File.join(Gem.plugindir, "a_plugin.rb")
835
842
 
836
- build_root = File.join(@tempdir, 'build_root')
837
- build_root_path = File.join(build_root, Gem.plugindir.gsub(/^[a-zA-Z]:/, ''), 'a_plugin.rb')
843
+ build_root = File.join(@tempdir, "build_root")
844
+ build_root_path = File.join(build_root, Gem.plugindir.gsub(/^[a-zA-Z]:/, ""), "a_plugin.rb")
838
845
 
839
846
  installer = Gem::Installer.at spec.cache_file, :build_root => build_root
840
847
 
841
848
  assert_equal spec, installer.install
842
849
 
843
- assert !File.exist?(system_path), 'plugin written incorrect written to system plugins_dir'
844
- assert File.exist?(build_root_path), 'plugin not written to build_root'
850
+ assert !File.exist?(system_path), "plugin written incorrect written to system plugins_dir"
851
+ assert File.exist?(build_root_path), "plugin not written to build_root"
845
852
 
846
853
  refute_includes File.read(build_root_path), build_root
847
854
  end
@@ -849,49 +856,49 @@ gem 'other', version
849
856
  def test_keeps_plugins_up_to_date
850
857
  # NOTE: version a-2 is already installed by setup hooks
851
858
 
852
- write_file File.join(@tempdir, 'lib', 'rubygems_plugin.rb') do |io|
859
+ write_file File.join(@tempdir, "lib", "rubygems_plugin.rb") do |io|
853
860
  io.write "puts __FILE__"
854
861
  end
855
862
 
856
863
  build_rake_in do
857
864
  util_setup_installer do |spec|
858
- spec.version = '1'
865
+ spec.version = "1"
859
866
  spec.files += %w[lib/rubygems_plugin.rb]
860
867
  end.install
861
868
 
862
- plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
863
- refute File.exist?(plugin_path), 'old version installed while newer version without plugin also installed, but plugin written'
869
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
870
+ refute File.exist?(plugin_path), "old version installed while newer version without plugin also installed, but plugin written"
864
871
 
865
872
  util_setup_installer do |spec|
866
- spec.version = '2'
873
+ spec.version = "2"
867
874
  spec.files += %w[lib/rubygems_plugin.rb]
868
875
  end.install
869
876
 
870
- plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
871
- assert File.exist?(plugin_path), 'latest version reinstalled, but plugin not written'
872
- assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
877
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
878
+ assert File.exist?(plugin_path), "latest version reinstalled, but plugin not written"
879
+ assert_match %r{\Arequire.*a-2/lib/rubygems_plugin\.rb}, File.read(plugin_path), "written plugin has incorrect content"
873
880
 
874
881
  util_setup_installer do |spec|
875
- spec.version = '3'
882
+ spec.version = "3"
876
883
  spec.files += %w[lib/rubygems_plugin.rb]
877
884
  end.install
878
885
 
879
- plugin_path = File.join Gem.plugindir, 'a_plugin.rb'
880
- assert File.exist?(plugin_path), 'latest version installed, but plugin removed'
881
- assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), 'written plugin has incorrect content'
886
+ plugin_path = File.join Gem.plugindir, "a_plugin.rb"
887
+ assert File.exist?(plugin_path), "latest version installed, but plugin removed"
888
+ assert_match %r{\Arequire.*a-3/lib/rubygems_plugin\.rb}, File.read(plugin_path), "written plugin has incorrect content"
882
889
 
883
890
  util_setup_installer do |spec|
884
- spec.version = '4'
891
+ spec.version = "4"
885
892
  end.install
886
893
 
887
- refute File.exist?(plugin_path), 'new version installed without a plugin while older version with a plugin installed, but plugin not removed'
894
+ refute File.exist?(plugin_path), "new version installed without a plugin while older version with a plugin installed, but plugin not removed"
888
895
  end
889
896
  end
890
897
 
891
898
  def test_generates_plugins_dir_under_install_dir_if_not_there
892
899
  Gem.use_paths "#{@gemhome}2" # Set GEM_HOME to an uninitialized repo
893
900
 
894
- @spec = util_spec 'a'
901
+ @spec = util_spec "a"
895
902
 
896
903
  path = Gem::Package.build @spec
897
904
 
@@ -900,8 +907,8 @@ gem 'other', version
900
907
  end
901
908
 
902
909
  def test_initialize
903
- spec = util_spec 'a' do |s|
904
- s.platform = Gem::Platform.new 'mswin32'
910
+ spec = util_spec "a" do |s|
911
+ s.platform = Gem::Platform.new "mswin32"
905
912
  end
906
913
 
907
914
  gem = File.join @tempdir, spec.file_name
@@ -912,8 +919,8 @@ gem 'other', version
912
919
 
913
920
  installer = Gem::Installer.at gem
914
921
 
915
- assert_equal File.join(@gemhome, 'gems', spec.full_name), installer.gem_dir
916
- assert_equal File.join(@gemhome, 'bin'), installer.bin_dir
922
+ assert_equal File.join(@gemhome, "gems", spec.full_name), installer.gem_dir
923
+ assert_equal File.join(@gemhome, "bin"), installer.bin_dir
917
924
  end
918
925
 
919
926
  def test_initialize_user_install
@@ -921,7 +928,7 @@ gem 'other', version
921
928
 
922
929
  installer = Gem::Installer.at @gem, :user_install => true
923
930
 
924
- assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
931
+ assert_equal File.join(Gem.user_dir, "gems", @spec.full_name),
925
932
  installer.gem_dir
926
933
  assert_equal Gem.bindir(Gem.user_dir), installer.bin_dir
927
934
  end
@@ -932,7 +939,7 @@ gem 'other', version
932
939
  installer =
933
940
  Gem::Installer.at @gem, :user_install => true, :bin_dir => @tempdir
934
941
 
935
- assert_equal File.join(Gem.user_dir, 'gems', @spec.full_name),
942
+ assert_equal File.join(Gem.user_dir, "gems", @spec.full_name),
936
943
  installer.gem_dir
937
944
  assert_equal @tempdir, installer.bin_dir
938
945
  end
@@ -940,29 +947,26 @@ gem 'other', version
940
947
  def test_install
941
948
  installer = util_setup_installer
942
949
 
943
- gemdir = File.join @gemhome, 'gems', @spec.full_name
944
- cache_file = File.join @gemhome, 'cache', @spec.file_name
945
- stub_exe = File.join @gemhome, 'bin', 'executable'
946
- rakefile = File.join gemdir, 'ext', 'a', 'Rakefile'
947
- spec_file = File.join @gemhome, 'specifications', @spec.spec_name
950
+ gemdir = File.join @gemhome, "gems", @spec.full_name
951
+ cache_file = File.join @gemhome, "cache", @spec.file_name
952
+ stub_exe = File.join @gemhome, "bin", "executable"
953
+ rakefile = File.join gemdir, "ext", "a", "Rakefile"
954
+ spec_file = File.join @gemhome, "specifications", @spec.spec_name
948
955
 
949
956
  Gem.pre_install do
950
- assert_path_not_exist cache_file, 'cache file must not exist yet'
951
- assert_path_not_exist spec_file, 'spec file must not exist yet'
957
+ assert_path_not_exist cache_file, "cache file must not exist yet"
952
958
  true
953
959
  end
954
960
 
955
961
  Gem.post_build do
956
- assert_path_exist gemdir, 'gem install dir must exist'
957
- assert_path_exist rakefile, 'gem executable must exist'
958
- assert_path_not_exist stub_exe, 'gem executable must not exist'
959
- assert_path_not_exist spec_file, 'spec file must not exist yet'
962
+ assert_path_exist gemdir, "gem install dir must exist"
963
+ assert_path_exist rakefile, "gem executable must exist"
964
+ assert_path_not_exist stub_exe, "gem executable must not exist"
960
965
  true
961
966
  end
962
967
 
963
968
  Gem.post_install do
964
- assert_path_exist cache_file, 'cache file must exist'
965
- assert_path_exist spec_file, 'spec file must exist'
969
+ assert_path_exist cache_file, "cache file must exist"
966
970
  end
967
971
 
968
972
  @newspec = nil
@@ -974,15 +978,15 @@ gem 'other', version
974
978
 
975
979
  assert_equal @spec, @newspec
976
980
  assert_path_exist gemdir
977
- assert_path_exist stub_exe, 'gem executable must exist'
981
+ assert_path_exist stub_exe, "gem executable must exist"
978
982
 
979
- exe = File.join gemdir, 'bin', 'executable'
983
+ exe = File.join gemdir, "bin", "executable"
980
984
  assert_path_exist exe
981
985
 
982
986
  exe_mode = File.stat(exe).mode & 0111
983
987
  assert_equal 0111, exe_mode, "0%o" % exe_mode unless win_platform?
984
988
 
985
- assert_path_exist File.join gemdir, 'lib', 'code.rb'
989
+ assert_path_exist File.join gemdir, "lib", "code.rb"
986
990
 
987
991
  assert_path_exist rakefile
988
992
 
@@ -999,7 +1003,7 @@ gem 'other', version
999
1003
 
1000
1004
  installer.wrappers = true
1001
1005
 
1002
- gemdir = File.join @gemhome, 'gems', @spec.full_name
1006
+ gemdir = File.join @gemhome, "gems", @spec.full_name
1003
1007
 
1004
1008
  @newspec = nil
1005
1009
  build_rake_in do
@@ -1008,7 +1012,7 @@ gem 'other', version
1008
1012
  end
1009
1013
  end
1010
1014
 
1011
- exe = File.join gemdir, 'bin', 'executable'
1015
+ exe = File.join gemdir, "bin", "executable"
1012
1016
 
1013
1017
  e = assert_raise RuntimeError do
1014
1018
  instance_eval File.read(exe)
@@ -1022,10 +1026,10 @@ gem 'other', version
1022
1026
 
1023
1027
  # build old version that has a bin file
1024
1028
  installer = util_setup_gem do |spec|
1025
- File.open File.join('bin', 'executable'), 'w' do |f|
1029
+ File.open File.join("bin", "executable"), "w" do |f|
1026
1030
  f.puts "require 'code'"
1027
1031
  end
1028
- File.open File.join('lib', 'code.rb'), 'w' do |f|
1032
+ File.open File.join("lib", "code.rb"), "w" do |f|
1029
1033
  f.puts 'raise "I have an executable"'
1030
1034
  end
1031
1035
  end
@@ -1037,15 +1041,15 @@ gem 'other', version
1037
1041
  end
1038
1042
  end
1039
1043
 
1040
- old_bin_file = File.join installer.bin_dir, 'executable'
1044
+ old_bin_file = File.join installer.bin_dir, "executable"
1041
1045
 
1042
1046
  # build new version that doesn't have a bin file
1043
1047
  installer = util_setup_gem do |spec|
1044
- FileUtils.rm File.join('bin', 'executable')
1045
- spec.files.delete File.join('bin', 'executable')
1046
- spec.executables.delete 'executable'
1048
+ FileUtils.rm File.join("bin", "executable")
1049
+ spec.files.delete File.join("bin", "executable")
1050
+ spec.executables.delete "executable"
1047
1051
  spec.version = @spec.version.bump
1048
- File.open File.join('lib', 'code.rb'), 'w' do |f|
1052
+ File.open File.join("lib", "code.rb"), "w" do |f|
1049
1053
  f.puts 'raise "I do not have an executable"'
1050
1054
  end
1051
1055
  end
@@ -1062,7 +1066,7 @@ gem 'other', version
1062
1066
 
1063
1067
  # We expect the bin stub to activate the version that actually contains
1064
1068
  # the binstub.
1065
- assert_match('I have an executable', e.message)
1069
+ assert_match("I have an executable", e.message)
1066
1070
  end
1067
1071
 
1068
1072
  def test_install_creates_binstub_that_understand_version
@@ -1077,7 +1081,7 @@ gem 'other', version
1077
1081
  end
1078
1082
  end
1079
1083
 
1080
- exe = File.join @gemhome, 'bin', 'executable'
1084
+ exe = File.join @gemhome, "bin", "executable"
1081
1085
 
1082
1086
  ARGV.unshift "_3.0_"
1083
1087
 
@@ -1095,17 +1099,17 @@ gem 'other', version
1095
1099
  end
1096
1100
 
1097
1101
  def test_install_creates_binstub_that_prefers_user_installed_gem_to_default
1098
- default_spec = new_default_spec('default', '2', nil, 'exe/executable')
1099
- default_spec.executables = 'executable'
1102
+ default_spec = new_default_spec("default", "2", nil, "exe/executable")
1103
+ default_spec.executables = "executable"
1100
1104
  install_default_gems default_spec
1101
1105
 
1102
- exe = File.join @gemhome, 'bin', 'executable'
1106
+ exe = File.join @gemhome, "bin", "executable"
1103
1107
 
1104
1108
  assert_path_exist exe, "default gem's executable not installed"
1105
1109
 
1106
1110
  installer = util_setup_installer do |spec|
1107
- spec.name = 'default'
1108
- spec.version = '2'
1111
+ spec.name = "default"
1112
+ spec.version = "2"
1109
1113
  end
1110
1114
 
1111
1115
  util_clear_gems
@@ -1138,7 +1142,7 @@ gem 'other', version
1138
1142
  end
1139
1143
  end
1140
1144
 
1141
- exe = File.join @gemhome, 'bin', 'executable'
1145
+ exe = File.join @gemhome, "bin", "executable"
1142
1146
 
1143
1147
  extra_arg = "\xE4pfel".dup.force_encoding("UTF-8")
1144
1148
  ARGV.unshift extra_arg
@@ -1165,16 +1169,16 @@ gem 'other', version
1165
1169
  end
1166
1170
  end
1167
1171
 
1168
- gemdir = File.join(@gemhome, 'gems', @spec.full_name)
1169
- assert_path_exist File.join gemdir, 'lib', 'code.rb'
1172
+ gemdir = File.join(@gemhome, "gems", @spec.full_name)
1173
+ assert_path_exist File.join gemdir, "lib", "code.rb"
1170
1174
 
1171
1175
  installer = util_setup_installer
1172
1176
 
1173
1177
  # Morph spec to have lib/other.rb instead of code.rb and recreate
1174
- @spec.files = File.join('lib', 'other.rb')
1178
+ @spec.files = File.join("lib", "other.rb")
1175
1179
  Dir.chdir @tempdir do
1176
- File.open File.join('lib', 'other.rb'), 'w' do |f|
1177
- f.puts '1'
1180
+ File.open File.join("lib", "other.rb"), "w" do |f|
1181
+ f.puts "1"
1178
1182
  end
1179
1183
 
1180
1184
  use_ui ui do
@@ -1189,14 +1193,14 @@ gem 'other', version
1189
1193
  end
1190
1194
  end
1191
1195
 
1192
- assert_path_exist File.join gemdir, 'lib', 'other.rb'
1193
- assert_path_not_exist File.join gemdir, 'lib', 'code.rb',
1196
+ assert_path_exist File.join gemdir, "lib", "other.rb"
1197
+ assert_path_not_exist File.join gemdir, "lib", "code.rb",
1194
1198
  "code.rb from prior install of same gem shouldn't remain here"
1195
1199
  end
1196
1200
 
1197
1201
  def test_install_force
1198
- _, missing_dep_gem = util_gem 'missing_dep', '1' do |s|
1199
- s.add_dependency 'doesnt_exist', '1'
1202
+ _, missing_dep_gem = util_gem "missing_dep", "1" do |s|
1203
+ s.add_dependency "doesnt_exist", "1"
1200
1204
  end
1201
1205
 
1202
1206
  use_ui @ui do
@@ -1204,12 +1208,12 @@ gem 'other', version
1204
1208
  installer.install
1205
1209
  end
1206
1210
 
1207
- gem_dir = File.join(@gemhome, 'gems', 'missing_dep-1')
1211
+ gem_dir = File.join(@gemhome, "gems", "missing_dep-1")
1208
1212
  assert_path_exist gem_dir
1209
1213
  end
1210
1214
 
1211
1215
  def test_install_build_root
1212
- build_root = File.join(@tempdir, 'build_root')
1216
+ build_root = File.join(@tempdir, "build_root")
1213
1217
 
1214
1218
  @gem = setup_base_gem
1215
1219
  installer = Gem::Installer.at @gem, :build_root => build_root
@@ -1220,24 +1224,26 @@ gem 'other', version
1220
1224
  def test_install_missing_dirs
1221
1225
  installer = setup_base_installer
1222
1226
 
1223
- FileUtils.rm_f File.join(Gem.dir, 'cache')
1224
- FileUtils.rm_f File.join(Gem.dir, 'doc')
1225
- FileUtils.rm_f File.join(Gem.dir, 'specifications')
1227
+ FileUtils.rm_rf File.join(Gem.dir, "doc")
1228
+ FileUtils.rm_rf File.join(Gem.dir, "specifications")
1226
1229
 
1227
1230
  use_ui @ui do
1228
1231
  installer.install
1229
1232
  end
1230
1233
 
1231
- assert_directory_exists File.join(Gem.dir, 'cache')
1232
- assert_directory_exists File.join(Gem.dir, 'doc')
1233
- assert_directory_exists File.join(Gem.dir, 'specifications')
1234
+ assert_directory_exists File.join(Gem.dir, "doc")
1235
+ assert_directory_exists File.join(Gem.dir, "specifications")
1234
1236
 
1235
- assert_path_exist File.join @gemhome, 'cache', @spec.file_name
1236
- assert_path_exist File.join @gemhome, 'specifications', @spec.spec_name
1237
+ assert_path_exist File.join @gemhome, "cache", @spec.file_name
1238
+ assert_path_exist File.join @gemhome, "specifications", @spec.spec_name
1237
1239
  end
1238
1240
 
1239
1241
  def test_install_post_build_false
1240
- installer = setup_base_installer
1242
+ @spec = util_spec "a"
1243
+
1244
+ util_build_gem @spec
1245
+
1246
+ installer = util_installer @spec, @gemhome
1241
1247
 
1242
1248
  Gem.post_build do
1243
1249
  false
@@ -1253,10 +1259,10 @@ gem 'other', version
1253
1259
  assert_equal "post-build hook at #{location} failed for a-2", e.message
1254
1260
  end
1255
1261
 
1256
- spec_file = File.join @gemhome, 'specifications', @spec.spec_name
1262
+ spec_file = File.join @gemhome, "specifications", @spec.spec_name
1257
1263
  assert_path_not_exist spec_file
1258
1264
 
1259
- gem_dir = File.join @gemhome, 'gems', @spec.full_name
1265
+ gem_dir = File.join @gemhome, "gems", @spec.full_name
1260
1266
  assert_path_not_exist gem_dir
1261
1267
  end
1262
1268
 
@@ -1271,15 +1277,19 @@ gem 'other', version
1271
1277
  installer.install
1272
1278
  end
1273
1279
 
1274
- spec_file = File.join @gemhome, 'specifications', @spec.spec_name
1280
+ spec_file = File.join @gemhome, "specifications", @spec.spec_name
1275
1281
  assert_path_exist spec_file
1276
1282
 
1277
- gem_dir = File.join @gemhome, 'gems', @spec.full_name
1283
+ gem_dir = File.join @gemhome, "gems", @spec.full_name
1278
1284
  assert_path_exist gem_dir
1279
1285
  end
1280
1286
 
1281
1287
  def test_install_pre_install_false
1282
- installer = setup_base_installer
1288
+ @spec = util_spec "a"
1289
+
1290
+ util_build_gem @spec
1291
+
1292
+ installer = util_installer @spec, @gemhome
1283
1293
 
1284
1294
  Gem.pre_install do
1285
1295
  false
@@ -1295,7 +1305,7 @@ gem 'other', version
1295
1305
  assert_equal "pre-install hook at #{location} failed for a-2", e.message
1296
1306
  end
1297
1307
 
1298
- spec_file = File.join @gemhome, 'specifications', @spec.spec_name
1308
+ spec_file = File.join @gemhome, "specifications", @spec.spec_name
1299
1309
  assert_path_not_exist spec_file
1300
1310
  end
1301
1311
 
@@ -1310,13 +1320,13 @@ gem 'other', version
1310
1320
  installer.install
1311
1321
  end
1312
1322
 
1313
- spec_file = File.join @gemhome, 'specifications', @spec.spec_name
1323
+ spec_file = File.join @gemhome, "specifications", @spec.spec_name
1314
1324
  assert_path_exist spec_file
1315
1325
  end
1316
1326
 
1317
1327
  def test_install_with_message
1318
1328
  @spec = setup_base_spec
1319
- @spec.post_install_message = 'I am a shiny gem!'
1329
+ @spec.post_install_message = "I am a shiny gem!"
1320
1330
 
1321
1331
  use_ui @ui do
1322
1332
  path = Gem::Package.build @spec
@@ -1330,7 +1340,7 @@ gem 'other', version
1330
1340
 
1331
1341
  def test_install_with_skipped_message
1332
1342
  @spec = setup_base_spec
1333
- @spec.post_install_message = 'I am a shiny gem!'
1343
+ @spec.post_install_message = "I am a shiny gem!"
1334
1344
 
1335
1345
  use_ui @ui do
1336
1346
  path = Gem::Package.build @spec
@@ -1363,7 +1373,7 @@ gem 'other', version
1363
1373
  installer.install
1364
1374
  end
1365
1375
 
1366
- expected_makefile = File.join gemhome2, 'gems', @spec.full_name, 'Makefile'
1376
+ expected_makefile = File.join gemhome2, "gems", @spec.full_name, "Makefile"
1367
1377
 
1368
1378
  assert_path_exist expected_makefile
1369
1379
  end
@@ -1428,11 +1438,11 @@ gem 'other', version
1428
1438
  installer.install
1429
1439
  end
1430
1440
 
1431
- expected_makefile = File.join Gem.user_dir, 'gems', @spec.full_name, 'Makefile'
1441
+ expected_makefile = File.join Gem.user_dir, "gems", @spec.full_name, "Makefile"
1432
1442
 
1433
1443
  assert_path_exist expected_makefile
1434
1444
  assert_path_exist expected_extension_dir
1435
- assert_path_not_exist File.join expected_extension_dir, 'gem_make.out'
1445
+ assert_path_not_exist File.join expected_extension_dir, "gem_make.out"
1436
1446
  end
1437
1447
 
1438
1448
  def test_find_lib_file_after_install
@@ -1462,7 +1472,7 @@ gem 'other', version
1462
1472
  end
1463
1473
 
1464
1474
  Dir.mkdir File.join(@tempdir, "lib")
1465
- write_file File.join(@tempdir, 'lib', "b.rb") do |io|
1475
+ write_file File.join(@tempdir, "lib", "b.rb") do |io|
1466
1476
  io.write "# b.rb"
1467
1477
  end
1468
1478
 
@@ -1476,14 +1486,14 @@ gem 'other', version
1476
1486
  end
1477
1487
 
1478
1488
  expected = File.join @spec.full_require_paths.find {|path|
1479
- File.exist? File.join path, 'b.rb'
1480
- }, 'b.rb'
1481
- assert_equal expected, @spec.matches_for_glob('b.rb').first
1489
+ File.exist? File.join path, "b.rb"
1490
+ }, "b.rb"
1491
+ assert_equal expected, @spec.matches_for_glob("b.rb").first
1482
1492
  end
1483
1493
 
1484
1494
  def test_install_extension_and_script
1485
1495
  pend "Makefile creation crashes on jruby" if Gem.java_platform?
1486
- pend if /mswin/ =~ RUBY_PLATFORM && ENV.key?('GITHUB_ACTIONS') # not working from the beginning
1496
+ pend if RUBY_PLATFORM.include?("mswin") && ENV.key?("GITHUB_ACTIONS") # not working from the beginning
1487
1497
 
1488
1498
  @spec = setup_base_spec
1489
1499
  @spec.extensions << "extconf.rb"
@@ -1549,7 +1559,7 @@ gem 'other', version
1549
1559
  write_file File.join(@tempdir, file)
1550
1560
  end
1551
1561
 
1552
- so = File.join(@spec.gem_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
1562
+ so = File.join(@spec.extension_dir, "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}")
1553
1563
  assert_path_not_exist so
1554
1564
  use_ui @ui do
1555
1565
  path = Gem::Package.build @spec
@@ -1559,30 +1569,65 @@ gem 'other', version
1559
1569
  end
1560
1570
  assert_path_exist so
1561
1571
  rescue
1562
- puts '-' * 78
1563
- puts File.read File.join(@gemhome, 'gems', 'a-2', 'Makefile')
1564
- puts '-' * 78
1572
+ puts "-" * 78
1573
+ puts File.read File.join(@gemhome, "gems", "a-2", "Makefile")
1574
+ puts "-" * 78
1565
1575
 
1566
- path = File.join(@gemhome, 'gems', 'a-2', 'gem_make.out')
1576
+ path = File.join(@gemhome, "gems", "a-2", "gem_make.out")
1567
1577
 
1568
1578
  if File.exist?(path)
1569
1579
  puts File.read(path)
1570
- puts '-' * 78
1580
+ puts "-" * 78
1571
1581
  end
1572
1582
 
1573
1583
  raise
1574
1584
  end
1575
1585
  end
1576
1586
 
1587
+ def test_install_extension_clean_intermediate_files
1588
+ pend "extensions don't quite work on jruby" if Gem.java_platform?
1589
+ @spec = setup_base_spec
1590
+ @spec.require_paths = ["."]
1591
+ @spec.extensions << "extconf.rb"
1592
+
1593
+ File.write File.join(@tempdir, "extconf.rb"), <<-RUBY
1594
+ require "mkmf"
1595
+ CONFIG['CC'] = '$(TOUCH) $@ ||'
1596
+ CONFIG['LDSHARED'] = '$(TOUCH) $@ ||'
1597
+ $ruby = '#{Gem.ruby}'
1598
+ create_makefile("#{@spec.name}")
1599
+ RUBY
1600
+
1601
+ # empty depend file for no auto dependencies
1602
+ @spec.files += %W[depend #{@spec.name}.c].each do |file|
1603
+ write_file File.join(@tempdir, file)
1604
+ end
1605
+
1606
+ shared_object = "#{@spec.name}.#{RbConfig::CONFIG["DLEXT"]}"
1607
+ extension_file = File.join @spec.extension_dir, shared_object
1608
+ intermediate_file = File.join @spec.gem_dir, shared_object
1609
+
1610
+ assert_path_not_exist extension_file, "no before installing"
1611
+ use_ui @ui do
1612
+ path = Gem::Package.build @spec
1613
+
1614
+ installer = Gem::Installer.at path
1615
+ installer.install
1616
+ end
1617
+
1618
+ assert_path_exist extension_file, "installed"
1619
+ assert_path_not_exist intermediate_file
1620
+ end
1621
+
1577
1622
  def test_installation_satisfies_dependency_eh
1578
1623
  installer = setup_base_installer
1579
1624
 
1580
- util_spec 'a'
1625
+ util_spec "a"
1581
1626
 
1582
- dep = Gem::Dependency.new 'a', '>= 2'
1627
+ dep = Gem::Dependency.new "a", ">= 2"
1583
1628
  assert installer.installation_satisfies_dependency?(dep)
1584
1629
 
1585
- dep = Gem::Dependency.new 'a', '> 2'
1630
+ dep = Gem::Dependency.new "a", "> 2"
1586
1631
  refute installer.installation_satisfies_dependency?(dep)
1587
1632
  end
1588
1633
 
@@ -1591,15 +1636,15 @@ gem 'other', version
1591
1636
  installer.options[:development] = true
1592
1637
  installer.options[:dev_shallow] = true
1593
1638
 
1594
- util_spec 'a'
1639
+ util_spec "a"
1595
1640
 
1596
- dep = Gem::Dependency.new 'a', :development
1641
+ dep = Gem::Dependency.new "a", :development
1597
1642
  assert installer.installation_satisfies_dependency?(dep)
1598
1643
  end
1599
1644
 
1600
1645
  def test_pre_install_checks_dependencies
1601
1646
  installer = setup_base_installer
1602
- @spec.add_dependency 'b', '> 5'
1647
+ @spec.add_dependency "b", "> 5"
1603
1648
  installer = util_setup_gem
1604
1649
  installer.force = false
1605
1650
 
@@ -1612,7 +1657,7 @@ gem 'other', version
1612
1657
 
1613
1658
  def test_pre_install_checks_dependencies_ignore
1614
1659
  installer = util_setup_installer
1615
- @spec.add_dependency 'b', '> 5'
1660
+ @spec.add_dependency "b", "> 5"
1616
1661
  installer.ignore_dependencies = true
1617
1662
 
1618
1663
  build_rake_in do
@@ -1626,16 +1671,16 @@ gem 'other', version
1626
1671
  gemhome2 = "#{@gemhome}2"
1627
1672
 
1628
1673
  @gem = setup_base_gem
1629
- @spec.add_dependency 'd'
1674
+ @spec.add_dependency "d"
1630
1675
 
1631
- quick_gem 'd', 2
1676
+ quick_gem "d", 2
1632
1677
 
1633
1678
  gem = File.join @gemhome, @spec.file_name
1634
1679
 
1635
1680
  FileUtils.mv @gemhome, gemhome2
1636
1681
  FileUtils.mkdir @gemhome
1637
1682
 
1638
- FileUtils.mv File.join(gemhome2, 'cache', @spec.file_name), gem
1683
+ FileUtils.mv File.join(gemhome2, "cache", @spec.file_name), gem
1639
1684
 
1640
1685
  # Don't leak any already activated gems into the installer, require
1641
1686
  # that it work everything out on it's own.
@@ -1651,7 +1696,7 @@ gem 'other', version
1651
1696
  end
1652
1697
 
1653
1698
  def test_pre_install_checks_malicious_name
1654
- spec = util_spec '../malicious', '1'
1699
+ spec = util_spec "../malicious", "1"
1655
1700
  def spec.full_name # so the spec is buildable
1656
1701
  "malicious-1"
1657
1702
  end
@@ -1659,19 +1704,19 @@ gem 'other', version
1659
1704
 
1660
1705
  util_build_gem spec
1661
1706
 
1662
- gem = File.join(@gemhome, 'cache', spec.file_name)
1707
+ gem = File.join(@gemhome, "cache", spec.file_name)
1663
1708
 
1664
1709
  use_ui @ui do
1665
1710
  installer = Gem::Installer.at gem
1666
1711
  e = assert_raise Gem::InstallError do
1667
1712
  installer.pre_install_checks
1668
1713
  end
1669
- assert_equal '#<Gem::Specification name=../malicious version=1> has an invalid name', e.message
1714
+ assert_equal "#<Gem::Specification name=../malicious version=1> has an invalid name", e.message
1670
1715
  end
1671
1716
  end
1672
1717
 
1673
1718
  def test_pre_install_checks_malicious_name_before_eval
1674
- spec = util_spec "malicious\n::Object.const_set(:FROM_EVAL, true)#", '1'
1719
+ spec = util_spec "malicious\n::Object.const_set(:FROM_EVAL, true)#", "1"
1675
1720
  def spec.full_name # so the spec is buildable
1676
1721
  "malicious-1"
1677
1722
  end
@@ -1679,7 +1724,7 @@ gem 'other', version
1679
1724
 
1680
1725
  util_build_gem spec
1681
1726
 
1682
- gem = File.join(@gemhome, 'cache', spec.file_name)
1727
+ gem = File.join(@gemhome, "cache", spec.file_name)
1683
1728
 
1684
1729
  use_ui @ui do
1685
1730
  installer = Gem::Installer.at gem
@@ -1692,7 +1737,7 @@ gem 'other', version
1692
1737
  end
1693
1738
 
1694
1739
  def test_pre_install_checks_malicious_require_paths_before_eval
1695
- spec = util_spec "malicious", '1'
1740
+ spec = util_spec "malicious", "1"
1696
1741
  def spec.full_name # so the spec is buildable
1697
1742
  "malicious-1"
1698
1743
  end
@@ -1701,7 +1746,7 @@ gem 'other', version
1701
1746
 
1702
1747
  util_build_gem spec
1703
1748
 
1704
- gem = File.join(@gemhome, 'cache', spec.file_name)
1749
+ gem = File.join(@gemhome, "cache", spec.file_name)
1705
1750
 
1706
1751
  use_ui @ui do
1707
1752
  installer = Gem::Installer.at gem
@@ -1715,7 +1760,7 @@ gem 'other', version
1715
1760
  def test_pre_install_checks_malicious_extensions_before_eval
1716
1761
  pend "mswin environment disallow to create file contained the carriage return code." if Gem.win_platform?
1717
1762
 
1718
- spec = util_spec "malicious", '1'
1763
+ spec = util_spec "malicious", "1"
1719
1764
  def spec.full_name # so the spec is buildable
1720
1765
  "malicious-1"
1721
1766
  end
@@ -1724,7 +1769,7 @@ gem 'other', version
1724
1769
 
1725
1770
  util_build_gem spec
1726
1771
 
1727
- gem = File.join(@gemhome, 'cache', spec.file_name)
1772
+ gem = File.join(@gemhome, "cache", spec.file_name)
1728
1773
 
1729
1774
  use_ui @ui do
1730
1775
  installer = Gem::Installer.at gem
@@ -1736,7 +1781,7 @@ gem 'other', version
1736
1781
  end
1737
1782
 
1738
1783
  def test_pre_install_checks_malicious_specification_version_before_eval
1739
- spec = util_spec "malicious", '1'
1784
+ spec = util_spec "malicious", "1"
1740
1785
  def spec.full_name # so the spec is buildable
1741
1786
  "malicious-1"
1742
1787
  end
@@ -1745,7 +1790,7 @@ gem 'other', version
1745
1790
 
1746
1791
  util_build_gem spec
1747
1792
 
1748
- gem = File.join(@gemhome, 'cache', spec.file_name)
1793
+ gem = File.join(@gemhome, "cache", spec.file_name)
1749
1794
 
1750
1795
  use_ui @ui do
1751
1796
  installer = Gem::Installer.at gem
@@ -1757,16 +1802,16 @@ gem 'other', version
1757
1802
  end
1758
1803
 
1759
1804
  def test_pre_install_checks_malicious_dependencies_before_eval
1760
- spec = util_spec "malicious", '1'
1805
+ spec = util_spec "malicious", "1"
1761
1806
  def spec.full_name # so the spec is buildable
1762
1807
  "malicious-1"
1763
1808
  end
1764
1809
  def spec.validate(*args); end
1765
- spec.add_dependency "b\nfoo", '> 5'
1810
+ spec.add_dependency "b\nfoo", "> 5"
1766
1811
 
1767
1812
  util_build_gem spec
1768
1813
 
1769
- gem = File.join(@gemhome, 'cache', spec.file_name)
1814
+ gem = File.join(@gemhome, "cache", spec.file_name)
1770
1815
 
1771
1816
  use_ui @ui do
1772
1817
  installer = Gem::Installer.at gem
@@ -1783,7 +1828,7 @@ gem 'other', version
1783
1828
 
1784
1829
  installer = Gem::Installer.at(
1785
1830
  gem_with_ill_formated_platform,
1786
- :install_dir => @gem_home,
1831
+ :install_dir => @gemhome,
1787
1832
  :user_install => false,
1788
1833
  :force => true
1789
1834
  )
@@ -1799,28 +1844,30 @@ gem 'other', version
1799
1844
  end
1800
1845
 
1801
1846
  def test_shebang
1802
- installer = setup_base_installer
1847
+ load_relative "no" do
1848
+ installer = setup_base_installer
1803
1849
 
1804
- util_make_exec @spec, "#!/usr/bin/ruby"
1850
+ util_make_exec @spec, "#!/usr/bin/ruby"
1805
1851
 
1806
- shebang = installer.shebang 'executable'
1852
+ shebang = installer.shebang "executable"
1807
1853
 
1808
- assert_equal "#!#{Gem.ruby}", shebang
1854
+ assert_equal "#!#{Gem.ruby}", shebang
1855
+ end
1809
1856
  end
1810
1857
 
1811
1858
  def test_process_options
1812
1859
  installer = setup_base_installer
1813
1860
 
1814
1861
  assert_nil installer.build_root
1815
- assert_equal File.join(@gemhome, 'bin'), installer.bin_dir
1862
+ assert_equal File.join(@gemhome, "bin"), installer.bin_dir
1816
1863
  assert_equal @gemhome, installer.gem_home
1817
1864
  end
1818
1865
 
1819
1866
  def test_process_options_build_root
1820
- build_root = File.join @tempdir, 'build_root'
1821
- bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'bin')
1822
- gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''))
1823
- plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ''), 'plugins')
1867
+ build_root = File.join @tempdir, "build_root"
1868
+ bin_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ""), "bin")
1869
+ gem_home = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ""))
1870
+ plugins_dir = File.join(build_root, @gemhome.gsub(/^[a-zA-Z]:/, ""), "plugins")
1824
1871
 
1825
1872
  @gem = setup_base_gem
1826
1873
  installer = use_ui(@ui) { Gem::Installer.at @gem, :build_root => build_root }
@@ -1839,51 +1886,89 @@ gem 'other', version
1839
1886
  end
1840
1887
 
1841
1888
  def test_shebang_arguments
1842
- installer = setup_base_installer
1889
+ load_relative "no" do
1890
+ installer = setup_base_installer
1843
1891
 
1844
- util_make_exec @spec, "#!/usr/bin/ruby -ws"
1892
+ util_make_exec @spec, "#!/usr/bin/ruby -ws"
1893
+
1894
+ shebang = installer.shebang "executable"
1895
+
1896
+ assert_equal "#!#{Gem.ruby} -ws", shebang
1897
+ end
1898
+ end
1845
1899
 
1846
- shebang = installer.shebang 'executable'
1900
+ def test_shebang_arguments_with_load_relative
1901
+ load_relative "yes" do
1902
+ installer = setup_base_installer
1847
1903
 
1848
- assert_equal "#!#{Gem.ruby} -ws", shebang
1904
+ util_make_exec @spec, "#!/usr/bin/ruby -ws"
1905
+
1906
+ shebang = installer.shebang "executable"
1907
+
1908
+ shebang_lines = shebang.split "\n"
1909
+
1910
+ assert_equal "#!/bin/sh", shebang_lines.shift
1911
+ assert_includes shebang_lines, "#!#{Gem.ruby} -ws"
1912
+ end
1849
1913
  end
1850
1914
 
1851
1915
  def test_shebang_empty
1852
- installer = setup_base_installer
1916
+ load_relative "no" do
1917
+ installer = setup_base_installer
1853
1918
 
1854
- util_make_exec @spec, ''
1919
+ util_make_exec @spec, ""
1855
1920
 
1856
- shebang = installer.shebang 'executable'
1857
- assert_equal "#!#{Gem.ruby}", shebang
1921
+ shebang = installer.shebang "executable"
1922
+ assert_equal "#!#{Gem.ruby}", shebang
1923
+ end
1858
1924
  end
1859
1925
 
1860
1926
  def test_shebang_env
1861
- installer = setup_base_installer
1927
+ load_relative "no" do
1928
+ installer = setup_base_installer
1862
1929
 
1863
- util_make_exec @spec, "#!/usr/bin/env ruby"
1930
+ util_make_exec @spec, "#!/usr/bin/env ruby"
1864
1931
 
1865
- shebang = installer.shebang 'executable'
1932
+ shebang = installer.shebang "executable"
1866
1933
 
1867
- assert_equal "#!#{Gem.ruby}", shebang
1934
+ assert_equal "#!#{Gem.ruby}", shebang
1935
+ end
1868
1936
  end
1869
1937
 
1870
1938
  def test_shebang_env_arguments
1871
- installer = setup_base_installer
1939
+ load_relative "no" do
1940
+ installer = setup_base_installer
1872
1941
 
1873
- util_make_exec @spec, "#!/usr/bin/env ruby -ws"
1942
+ util_make_exec @spec, "#!/usr/bin/env ruby -ws"
1874
1943
 
1875
- shebang = installer.shebang 'executable'
1944
+ shebang = installer.shebang "executable"
1876
1945
 
1877
- assert_equal "#!#{Gem.ruby} -ws", shebang
1946
+ assert_equal "#!#{Gem.ruby} -ws", shebang
1947
+ end
1948
+ end
1949
+
1950
+ def test_shebang_env_arguments_with_load_relative
1951
+ load_relative "yes" do
1952
+ installer = setup_base_installer
1953
+
1954
+ util_make_exec @spec, "#!/usr/bin/env ruby -ws"
1955
+
1956
+ shebang = installer.shebang "executable"
1957
+
1958
+ shebang_lines = shebang.split "\n"
1959
+
1960
+ assert_equal "#!/bin/sh", shebang_lines.shift
1961
+ assert_includes shebang_lines, "#!#{Gem.ruby} -ws"
1962
+ end
1878
1963
  end
1879
1964
 
1880
1965
  def test_shebang_env_shebang
1881
1966
  installer = setup_base_installer
1882
1967
 
1883
- util_make_exec @spec, ''
1968
+ util_make_exec @spec, ""
1884
1969
  installer.env_shebang = true
1885
1970
 
1886
- shebang = installer.shebang 'executable'
1971
+ shebang = installer.shebang "executable"
1887
1972
 
1888
1973
  bin_env = get_bin_env
1889
1974
 
@@ -1892,76 +1977,133 @@ gem 'other', version
1892
1977
  end
1893
1978
 
1894
1979
  def test_shebang_nested
1895
- installer = setup_base_installer
1980
+ load_relative "no" do
1981
+ installer = setup_base_installer
1896
1982
 
1897
- util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
1983
+ util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
1898
1984
 
1899
- shebang = installer.shebang 'executable'
1985
+ shebang = installer.shebang "executable"
1900
1986
 
1901
- assert_equal "#!#{Gem.ruby}", shebang
1987
+ assert_equal "#!#{Gem.ruby}", shebang
1988
+ end
1902
1989
  end
1903
1990
 
1904
1991
  def test_shebang_nested_arguments
1905
- installer = setup_base_installer
1992
+ load_relative "no" do
1993
+ installer = setup_base_installer
1906
1994
 
1907
- util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
1995
+ util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
1908
1996
 
1909
- shebang = installer.shebang 'executable'
1997
+ shebang = installer.shebang "executable"
1910
1998
 
1911
- assert_equal "#!#{Gem.ruby} -ws", shebang
1999
+ assert_equal "#!#{Gem.ruby} -ws", shebang
2000
+ end
2001
+ end
2002
+
2003
+ def test_shebang_nested_arguments_with_load_relative
2004
+ load_relative "yes" do
2005
+ installer = setup_base_installer
2006
+
2007
+ util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
2008
+
2009
+ shebang = installer.shebang "executable"
2010
+
2011
+ shebang_lines = shebang.split "\n"
2012
+
2013
+ assert_equal "#!/bin/sh", shebang_lines.shift
2014
+ assert_includes shebang_lines, "#!#{Gem.ruby} -ws"
2015
+ end
1912
2016
  end
1913
2017
 
1914
2018
  def test_shebang_version
1915
- installer = setup_base_installer
2019
+ load_relative "no" do
2020
+ installer = setup_base_installer
1916
2021
 
1917
- util_make_exec @spec, "#!/usr/bin/ruby18"
2022
+ util_make_exec @spec, "#!/usr/bin/ruby18"
1918
2023
 
1919
- shebang = installer.shebang 'executable'
2024
+ shebang = installer.shebang "executable"
1920
2025
 
1921
- assert_equal "#!#{Gem.ruby}", shebang
2026
+ assert_equal "#!#{Gem.ruby}", shebang
2027
+ end
1922
2028
  end
1923
2029
 
1924
2030
  def test_shebang_version_arguments
1925
- installer = setup_base_installer
2031
+ load_relative "no" do
2032
+ installer = setup_base_installer
1926
2033
 
1927
- util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
2034
+ util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
1928
2035
 
1929
- shebang = installer.shebang 'executable'
2036
+ shebang = installer.shebang "executable"
1930
2037
 
1931
- assert_equal "#!#{Gem.ruby} -ws", shebang
2038
+ assert_equal "#!#{Gem.ruby} -ws", shebang
2039
+ end
2040
+ end
2041
+
2042
+ def test_shebang_version_arguments_with_load_relative
2043
+ load_relative "yes" do
2044
+ installer = setup_base_installer
2045
+
2046
+ util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
2047
+
2048
+ shebang = installer.shebang "executable"
2049
+
2050
+ shebang_lines = shebang.split "\n"
2051
+
2052
+ assert_equal "#!/bin/sh", shebang_lines.shift
2053
+ assert_includes shebang_lines, "#!#{Gem.ruby} -ws"
2054
+ end
1932
2055
  end
1933
2056
 
1934
2057
  def test_shebang_version_env
1935
- installer = setup_base_installer
2058
+ load_relative "no" do
2059
+ installer = setup_base_installer
1936
2060
 
1937
- util_make_exec @spec, "#!/usr/bin/env ruby18"
2061
+ util_make_exec @spec, "#!/usr/bin/env ruby18"
1938
2062
 
1939
- shebang = installer.shebang 'executable'
2063
+ shebang = installer.shebang "executable"
1940
2064
 
1941
- assert_equal "#!#{Gem.ruby}", shebang
2065
+ assert_equal "#!#{Gem.ruby}", shebang
2066
+ end
1942
2067
  end
1943
2068
 
1944
2069
  def test_shebang_version_env_arguments
1945
- installer = setup_base_installer
2070
+ load_relative "no" do
2071
+ installer = setup_base_installer
2072
+
2073
+ util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
2074
+
2075
+ shebang = installer.shebang "executable"
2076
+
2077
+ assert_equal "#!#{Gem.ruby} -ws", shebang
2078
+ end
2079
+ end
2080
+
2081
+ def test_shebang_version_env_arguments_with_load_relative
2082
+ load_relative "yes" do
2083
+ installer = setup_base_installer
2084
+
2085
+ util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
1946
2086
 
1947
- util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
2087
+ shebang = installer.shebang "executable"
1948
2088
 
1949
- shebang = installer.shebang 'executable'
2089
+ shebang_lines = shebang.split "\n"
1950
2090
 
1951
- assert_equal "#!#{Gem.ruby} -ws", shebang
2091
+ assert_equal "#!/bin/sh", shebang_lines.shift
2092
+ assert_includes shebang_lines, "#!#{Gem.ruby} -ws"
2093
+ end
1952
2094
  end
1953
2095
 
1954
2096
  def test_shebang_custom
1955
2097
  installer = setup_base_installer
1956
2098
 
1957
2099
  conf = Gem::ConfigFile.new []
1958
- conf[:custom_shebang] = 'test'
2100
+ conf[:custom_shebang] = "test"
1959
2101
 
1960
2102
  Gem.configuration = conf
1961
2103
 
1962
2104
  util_make_exec @spec, "#!/usr/bin/ruby"
1963
2105
 
1964
- shebang = installer.shebang 'executable'
2106
+ shebang = installer.shebang "executable"
1965
2107
 
1966
2108
  assert_equal "#!test", shebang
1967
2109
  end
@@ -1979,13 +2121,13 @@ gem 'other', version
1979
2121
 
1980
2122
  bin_env = get_bin_env
1981
2123
  conf = Gem::ConfigFile.new []
1982
- conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec 4 $name'
2124
+ conf[:custom_shebang] = "1 $env 2 $ruby 3 $exec 4 $name"
1983
2125
 
1984
2126
  Gem.configuration = conf
1985
2127
 
1986
2128
  util_make_exec @spec, "#!/usr/bin/ruby"
1987
2129
 
1988
- shebang = installer.shebang 'executable'
2130
+ shebang = installer.shebang "executable"
1989
2131
 
1990
2132
  assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} 3 executable 4 a", shebang
1991
2133
  end
@@ -1995,13 +2137,13 @@ gem 'other', version
1995
2137
 
1996
2138
  bin_env = get_bin_env
1997
2139
  conf = Gem::ConfigFile.new []
1998
- conf[:custom_shebang] = '1 $env 2 $ruby 3 $exec'
2140
+ conf[:custom_shebang] = "1 $env 2 $ruby 3 $exec"
1999
2141
 
2000
2142
  Gem.configuration = conf
2001
2143
 
2002
2144
  util_make_exec @spec, "#!/usr/bin/ruby -ws"
2003
2145
 
2004
- shebang = installer.shebang 'executable'
2146
+ shebang = installer.shebang "executable"
2005
2147
 
2006
2148
  assert_equal "#!1 #{bin_env} 2 #{Gem.ruby} -ws 3 executable", shebang
2007
2149
  end
@@ -2009,14 +2151,14 @@ gem 'other', version
2009
2151
  def test_unpack
2010
2152
  installer = util_setup_installer
2011
2153
 
2012
- dest = File.join @gemhome, 'gems', @spec.full_name
2154
+ dest = File.join @gemhome, "gems", @spec.full_name
2013
2155
 
2014
2156
  Gem::Deprecate.skip_during do
2015
2157
  installer.unpack dest
2016
2158
  end
2017
2159
 
2018
- assert_path_exist File.join dest, 'lib', 'code.rb'
2019
- assert_path_exist File.join dest, 'bin', 'executable'
2160
+ assert_path_exist File.join dest, "lib", "code.rb"
2161
+ assert_path_exist File.join dest, "bin", "executable"
2020
2162
  end
2021
2163
 
2022
2164
  def test_write_build_info_file
@@ -2059,12 +2201,12 @@ gem 'other', version
2059
2201
 
2060
2202
  assert_path_not_exist @spec.build_info_file
2061
2203
  assert_path_exist \
2062
- File.join("#{@gemhome}2", 'build_info', "#{@spec.full_name}.info")
2204
+ File.join("#{@gemhome}2", "build_info", "#{@spec.full_name}.info")
2063
2205
  end
2064
2206
 
2065
2207
  def test_write_cache_file
2066
2208
  @gem = setup_base_gem
2067
- cache_file = File.join @gemhome, 'cache', @spec.file_name
2209
+ cache_file = File.join @gemhome, "cache", @spec.file_name
2068
2210
  gem = File.join @gemhome, @spec.file_name
2069
2211
 
2070
2212
  FileUtils.mv cache_file, gem
@@ -2115,6 +2257,37 @@ gem 'other', version
2115
2257
  assert_equal @spec, eval(File.read(@spec.spec_file))
2116
2258
  end
2117
2259
 
2260
+ def test_leaves_no_empty_cached_spec_when_no_more_disk_space
2261
+ @spec = setup_base_spec
2262
+ FileUtils.rm @spec.spec_file
2263
+ assert_path_not_exist @spec.spec_file
2264
+
2265
+ @spec.files = %w[a.rb b.rb c.rb]
2266
+
2267
+ installer = Gem::Installer.for_spec @spec
2268
+ installer.gem_home = @gemhome
2269
+
2270
+ File.class_eval do
2271
+ alias_method :original_write, :write
2272
+
2273
+ def write(data)
2274
+ raise Errno::ENOSPC
2275
+ end
2276
+ end
2277
+
2278
+ assert_raise Errno::ENOSPC do
2279
+ installer.write_spec
2280
+ end
2281
+
2282
+ assert_path_not_exist @spec.spec_file
2283
+ ensure
2284
+ File.class_eval do
2285
+ remove_method :write
2286
+ alias_method :write, :original_write # rubocop:disable Lint/DuplicateMethods
2287
+ remove_method :original_write
2288
+ end
2289
+ end
2290
+
2118
2291
  def test_dir
2119
2292
  installer = setup_base_installer
2120
2293
 
@@ -2122,7 +2295,7 @@ gem 'other', version
2122
2295
  end
2123
2296
 
2124
2297
  def test_default_gem_loaded_from
2125
- spec = util_spec 'a'
2298
+ spec = util_spec "a"
2126
2299
  installer = Gem::Installer.for_spec spec, :install_as_default => true
2127
2300
  installer.install
2128
2301
  assert_predicate spec, :default_gem?
@@ -2131,7 +2304,7 @@ gem 'other', version
2131
2304
  def test_default_gem_without_wrappers
2132
2305
  installer = setup_base_installer
2133
2306
 
2134
- FileUtils.rm_f File.join(Gem.dir, 'specifications')
2307
+ FileUtils.rm_rf File.join(Gem.default_dir, "specifications")
2135
2308
 
2136
2309
  installer.wrappers = false
2137
2310
  installer.options[:install_as_default] = true
@@ -2141,20 +2314,20 @@ gem 'other', version
2141
2314
  installer.install
2142
2315
  end
2143
2316
 
2144
- assert_directory_exists File.join(@spec.gem_dir, 'bin')
2145
- installed_exec = File.join @spec.gem_dir, 'bin', 'executable'
2317
+ assert_directory_exists File.join(@spec.gem_dir, "bin")
2318
+ installed_exec = File.join @spec.gem_dir, "bin", "executable"
2146
2319
  assert_path_exist installed_exec
2147
2320
 
2148
- assert_directory_exists File.join(Gem.default_dir, 'specifications')
2149
- assert_directory_exists File.join(Gem.default_dir, 'specifications', 'default')
2321
+ assert_directory_exists File.join(Gem.default_dir, "specifications")
2322
+ assert_directory_exists File.join(Gem.default_dir, "specifications", "default")
2150
2323
 
2151
- default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'a-2.gemspec')
2324
+ default_spec = eval File.read File.join(Gem.default_dir, "specifications", "default", "a-2.gemspec")
2152
2325
  assert_equal Gem::Version.new("2"), default_spec.version
2153
- assert_equal ['bin/executable'], default_spec.files
2326
+ assert_equal ["bin/executable"], default_spec.files
2154
2327
 
2155
2328
  assert_directory_exists util_inst_bindir
2156
2329
 
2157
- installed_exec = File.join util_inst_bindir, 'executable'
2330
+ installed_exec = File.join util_inst_bindir, "executable"
2158
2331
  assert_path_exist installed_exec
2159
2332
 
2160
2333
  wrapper = File.read installed_exec
@@ -2180,7 +2353,7 @@ gem 'other', version
2180
2353
 
2181
2354
  assert_directory_exists util_inst_bindir
2182
2355
 
2183
- installed_exec = File.join util_inst_bindir, 'executable'
2356
+ installed_exec = File.join util_inst_bindir, "executable"
2184
2357
  assert_path_exist installed_exec
2185
2358
 
2186
2359
  wrapper = File.read installed_exec
@@ -2188,8 +2361,8 @@ gem 'other', version
2188
2361
  end
2189
2362
 
2190
2363
  def test_default_gem_with_exe_as_bindir
2191
- @spec = quick_gem 'c' do |spec|
2192
- util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2364
+ @spec = quick_gem "c" do |spec|
2365
+ util_make_exec spec, "#!/usr/bin/ruby", "exe"
2193
2366
  end
2194
2367
 
2195
2368
  util_build_gem @spec
@@ -2205,16 +2378,16 @@ gem 'other', version
2205
2378
  installer.install
2206
2379
  end
2207
2380
 
2208
- assert_directory_exists File.join(@spec.gem_dir, 'exe')
2209
- installed_exec = File.join @spec.gem_dir, 'exe', 'executable'
2381
+ assert_directory_exists File.join(@spec.gem_dir, "exe")
2382
+ installed_exec = File.join @spec.gem_dir, "exe", "executable"
2210
2383
  assert_path_exist installed_exec
2211
2384
 
2212
- assert_directory_exists File.join(Gem.default_dir, 'specifications')
2213
- assert_directory_exists File.join(Gem.default_dir, 'specifications', 'default')
2385
+ assert_directory_exists File.join(Gem.default_dir, "specifications")
2386
+ assert_directory_exists File.join(Gem.default_dir, "specifications", "default")
2214
2387
 
2215
- default_spec = eval File.read File.join(Gem.default_dir, 'specifications', 'default', 'c-2.gemspec')
2388
+ default_spec = eval File.read File.join(Gem.default_dir, "specifications", "default", "c-2.gemspec")
2216
2389
  assert_equal Gem::Version.new("2"), default_spec.version
2217
- assert_equal ['exe/executable'], default_spec.files
2390
+ assert_equal ["exe/executable"], default_spec.files
2218
2391
  end
2219
2392
 
2220
2393
  def test_default_gem_to_specific_install_dir
@@ -2226,17 +2399,17 @@ gem 'other', version
2226
2399
  installer.install
2227
2400
  end
2228
2401
 
2229
- assert_directory_exists File.join("#{@gemhome}2", 'specifications')
2230
- assert_directory_exists File.join("#{@gemhome}2", 'specifications', 'default')
2402
+ assert_directory_exists File.join("#{@gemhome}2", "specifications")
2403
+ assert_directory_exists File.join("#{@gemhome}2", "specifications", "default")
2231
2404
 
2232
- default_spec = eval File.read File.join("#{@gemhome}2", 'specifications', 'default', 'a-2.gemspec')
2405
+ default_spec = eval File.read File.join("#{@gemhome}2", "specifications", "default", "a-2.gemspec")
2233
2406
  assert_equal Gem::Version.new("2"), default_spec.version
2234
- assert_equal ['bin/executable'], default_spec.files
2407
+ assert_equal ["bin/executable"], default_spec.files
2235
2408
  end
2236
2409
 
2237
2410
  def test_package_attribute
2238
- gem = quick_gem 'c' do |spec|
2239
- util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2411
+ gem = quick_gem "c" do |spec|
2412
+ util_make_exec spec, "#!/usr/bin/ruby", "exe"
2240
2413
  end
2241
2414
 
2242
2415
  installer = util_installer(gem, @gemhome)
@@ -2245,8 +2418,8 @@ gem 'other', version
2245
2418
  end
2246
2419
 
2247
2420
  def test_gem_attribute
2248
- gem = quick_gem 'c' do |spec|
2249
- util_make_exec spec, '#!/usr/bin/ruby', 'exe'
2421
+ gem = quick_gem "c" do |spec|
2422
+ util_make_exec spec, "#!/usr/bin/ruby", "exe"
2250
2423
  end
2251
2424
 
2252
2425
  installer = util_installer(gem, @gemhome)
@@ -2254,15 +2427,17 @@ gem 'other', version
2254
2427
  assert_kind_of(String, installer.gem)
2255
2428
  end
2256
2429
 
2430
+ private
2431
+
2257
2432
  def util_execless
2258
- @spec = util_spec 'z'
2433
+ @spec = util_spec "z"
2259
2434
  util_build_gem @spec
2260
2435
 
2261
2436
  util_installer @spec, @gemhome
2262
2437
  end
2263
2438
 
2264
2439
  def util_conflict_executable(wrappers)
2265
- conflict = quick_gem 'conflict' do |spec|
2440
+ conflict = quick_gem "conflict" do |spec|
2266
2441
  util_make_exec spec
2267
2442
  end
2268
2443
 
@@ -2276,4 +2451,13 @@ gem 'other', version
2276
2451
  def mask
2277
2452
  0100755
2278
2453
  end
2454
+
2455
+ def load_relative(value)
2456
+ orig_LIBRUBY_RELATIVE = RbConfig::CONFIG["LIBRUBY_RELATIVE"]
2457
+ RbConfig::CONFIG["LIBRUBY_RELATIVE"] = value
2458
+
2459
+ yield
2460
+ ensure
2461
+ RbConfig::CONFIG["LIBRUBY_RELATIVE"] = orig_LIBRUBY_RELATIVE
2462
+ end
2279
2463
  end