rubygems-update 3.3.18 → 3.6.2

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