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,2112 +0,0 @@
1
- # coding: US-ASCII
2
- require_relative 'helper'
3
- require 'rubygems'
4
- require 'rubygems/command'
5
- require 'rubygems/installer'
6
- require 'pathname'
7
- require 'tmpdir'
8
- require 'rbconfig'
9
-
10
- class TestGem < Gem::TestCase
11
- PLUGINS_LOADED = [] # rubocop:disable Style/MutableConstant
12
-
13
- PROJECT_DIR = File.expand_path('../..', __dir__).tap(&Gem::UNTAINT)
14
-
15
- def setup
16
- super
17
-
18
- PLUGINS_LOADED.clear
19
-
20
- common_installer_setup
21
-
22
- @additional = %w[a b].map {|d| File.join @tempdir, d }
23
-
24
- util_remove_interrupt_command
25
- end
26
-
27
- def test_self_finish_resolve
28
- a1 = util_spec "a", "1", "b" => "> 0"
29
- b1 = util_spec "b", "1", "c" => ">= 1"
30
- b2 = util_spec "b", "2", "c" => ">= 2"
31
- c1 = util_spec "c", "1"
32
- c2 = util_spec "c", "2"
33
-
34
- install_specs c1, c2, b1, b2, a1
35
-
36
- a1.activate
37
-
38
- assert_equal %w[a-1], loaded_spec_names
39
- assert_equal ["b (> 0)"], unresolved_names
40
-
41
- Gem.finish_resolve
42
-
43
- assert_equal %w[a-1 b-2 c-2], loaded_spec_names
44
- assert_equal [], unresolved_names
45
- end
46
-
47
- def test_self_finish_resolve_wtf
48
- a1 = util_spec "a", "1", "b" => "> 0", "d" => "> 0" # this
49
- b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/b.rb" # this
50
- b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/b.rb"
51
- c1 = util_spec "c", "1" # this
52
- c2 = util_spec "c", "2"
53
- d1 = util_spec "d", "1", { "c" => "< 2" }, "lib/d.rb"
54
- d2 = util_spec "d", "2", { "c" => "< 2" }, "lib/d.rb" # this
55
-
56
- install_specs c1, c2, b1, b2, d1, d2, a1
57
-
58
- a1.activate
59
-
60
- assert_equal %w[a-1], loaded_spec_names
61
- assert_equal ["b (> 0)", "d (> 0)"], unresolved_names
62
-
63
- Gem.finish_resolve
64
-
65
- assert_equal %w[a-1 b-1 c-1 d-2], loaded_spec_names
66
- assert_equal [], unresolved_names
67
- end
68
-
69
- def test_self_finish_resolve_respects_loaded_specs
70
- a1 = util_spec "a", "1", "b" => "> 0"
71
- b1 = util_spec "b", "1", "c" => ">= 1"
72
- b2 = util_spec "b", "2", "c" => ">= 2"
73
- c1 = util_spec "c", "1"
74
- c2 = util_spec "c", "2"
75
-
76
- install_specs c1, c2, b1, b2, a1
77
-
78
- a1.activate
79
- c1.activate
80
-
81
- assert_equal %w[a-1 c-1], loaded_spec_names
82
- assert_equal ["b (> 0)"], unresolved_names
83
-
84
- Gem.finish_resolve
85
-
86
- assert_equal %w[a-1 b-1 c-1], loaded_spec_names
87
- assert_equal [], unresolved_names
88
- end
89
-
90
- def test_self_install
91
- spec_fetcher do |f|
92
- f.gem 'a', 1
93
- f.spec 'a', 2
94
- end
95
-
96
- gemhome2 = "#{@gemhome}2"
97
-
98
- installed = Gem.install 'a', '= 1', :install_dir => gemhome2
99
-
100
- assert_equal %w[a-1], installed.map {|spec| spec.full_name }
101
-
102
- assert_path_exist File.join(gemhome2, 'gems', 'a-1')
103
- end
104
-
105
- def test_self_install_in_rescue
106
- spec_fetcher do |f|
107
- f.gem 'a', 1
108
- f.spec 'a', 2
109
- end
110
-
111
- gemhome2 = "#{@gemhome}2"
112
-
113
- installed =
114
- begin
115
- raise 'Error'
116
- rescue StandardError
117
- Gem.install 'a', '= 1', :install_dir => gemhome2
118
- end
119
- assert_equal %w[a-1], installed.map {|spec| spec.full_name }
120
- end
121
-
122
- def test_self_install_permissions
123
- assert_self_install_permissions
124
- end
125
-
126
- def test_self_install_permissions_umask_0
127
- umask = File.umask(0)
128
- assert_self_install_permissions
129
- ensure
130
- File.umask(umask)
131
- end
132
-
133
- def test_self_install_permissions_umask_077
134
- umask = File.umask(077)
135
- assert_self_install_permissions
136
- ensure
137
- File.umask(umask)
138
- end
139
-
140
- def test_self_install_permissions_with_format_executable
141
- assert_self_install_permissions(format_executable: true)
142
- end
143
-
144
- def test_self_install_permissions_with_format_executable_and_non_standard_ruby_install_name
145
- Gem::Installer.exec_format = nil
146
- ruby_install_name 'ruby27' do
147
- assert_self_install_permissions(format_executable: true)
148
- end
149
- ensure
150
- Gem::Installer.exec_format = nil
151
- end
152
-
153
- def assert_self_install_permissions(format_executable: false)
154
- mask = win_platform? ? 0700 : 0777
155
- options = {
156
- :dir_mode => 0500,
157
- :prog_mode => win_platform? ? 0410 : 0510,
158
- :data_mode => 0640,
159
- :wrappers => true,
160
- :format_executable => format_executable,
161
- }
162
- Dir.chdir @tempdir do
163
- Dir.mkdir 'bin'
164
- Dir.mkdir 'data'
165
-
166
- File.write 'bin/foo', "#!/usr/bin/env ruby\n"
167
- File.chmod 0755, 'bin/foo'
168
-
169
- File.write 'data/foo.txt', "blah\n"
170
-
171
- spec_fetcher do |f|
172
- f.gem 'foo', 1 do |s|
173
- s.executables = ['foo']
174
- s.files = %w[bin/foo data/foo.txt]
175
- end
176
- end
177
- Gem.install 'foo', Gem::Requirement.default, options
178
- end
179
-
180
- prog_mode = (options[:prog_mode] & mask).to_s(8)
181
- dir_mode = (options[:dir_mode] & mask).to_s(8)
182
- data_mode = (options[:data_mode] & mask).to_s(8)
183
- prog_name = 'foo'
184
- prog_name = RbConfig::CONFIG['ruby_install_name'].sub('ruby', 'foo') if options[:format_executable]
185
- expected = {
186
- "bin/#{prog_name}" => prog_mode,
187
- 'gems/foo-1' => dir_mode,
188
- 'gems/foo-1/bin' => dir_mode,
189
- 'gems/foo-1/data' => dir_mode,
190
- 'gems/foo-1/bin/foo' => prog_mode,
191
- 'gems/foo-1/data/foo.txt' => data_mode,
192
- }
193
- # add Windows script
194
- expected["bin/#{prog_name}.bat"] = mask.to_s(8) if win_platform?
195
- result = {}
196
- Dir.chdir @gemhome do
197
- expected.each_key do |n|
198
- result[n] = (File.stat(n).mode & mask).to_s(8)
199
- end
200
- end
201
- assert_equal(expected, result)
202
- ensure
203
- File.chmod(0755, *Dir.glob(@gemhome + '/gems/**/').map {|path| path.tap(&Gem::UNTAINT) })
204
- end
205
-
206
- def test_require_missing
207
- assert_raise ::LoadError do
208
- require "test_require_missing"
209
- end
210
- end
211
-
212
- def test_require_does_not_glob
213
- a1 = util_spec "a", "1", nil, "lib/a1.rb"
214
-
215
- install_specs a1
216
-
217
- assert_raise ::LoadError do
218
- require "a*"
219
- end
220
-
221
- assert_equal [], loaded_spec_names
222
- end
223
-
224
- def test_self_bin_path_active
225
- a1 = util_spec 'a', '1' do |s|
226
- s.executables = ['exec']
227
- end
228
-
229
- util_spec 'a', '2' do |s|
230
- s.executables = ['exec']
231
- end
232
-
233
- a1.activate
234
-
235
- assert_match 'a-1/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
236
- end
237
-
238
- def test_self_bin_path_picking_newest
239
- a1 = util_spec 'a', '1' do |s|
240
- s.executables = ['exec']
241
- end
242
-
243
- a2 = util_spec 'a', '2' do |s|
244
- s.executables = ['exec']
245
- end
246
-
247
- install_specs a1, a2
248
-
249
- assert_match 'a-2/bin/exec', Gem.bin_path('a', 'exec', '>= 0')
250
- end
251
-
252
- def test_self_activate_bin_path_no_exec_name
253
- e = assert_raise ArgumentError do
254
- Gem.activate_bin_path 'a'
255
- end
256
-
257
- assert_equal 'you must supply exec_name', e.message
258
- end
259
-
260
- def test_activate_bin_path_resolves_eagerly
261
- a1 = util_spec 'a', '1' do |s|
262
- s.executables = ['exec']
263
- s.add_dependency 'b'
264
- end
265
-
266
- b1 = util_spec 'b', '1' do |s|
267
- s.add_dependency 'c', '2'
268
- end
269
-
270
- b2 = util_spec 'b', '2' do |s|
271
- s.add_dependency 'c', '1'
272
- end
273
-
274
- c1 = util_spec 'c', '1'
275
- c2 = util_spec 'c', '2'
276
-
277
- install_specs c1, c2, b1, b2, a1
278
-
279
- Gem.activate_bin_path("a", "exec", ">= 0")
280
-
281
- # If we didn't eagerly resolve, this would activate c-2 and then the
282
- # finish_resolve would cause a conflict
283
- gem 'c'
284
- Gem.finish_resolve
285
-
286
- assert_equal %w[a-1 b-2 c-1], loaded_spec_names
287
- end
288
-
289
- def test_activate_bin_path_does_not_error_if_a_gem_thats_not_finally_activated_has_orphaned_dependencies
290
- a1 = util_spec 'a', '1' do |s|
291
- s.executables = ['exec']
292
- s.add_dependency 'b'
293
- end
294
-
295
- b1 = util_spec 'b', '1' do |s|
296
- s.add_dependency 'c', '1'
297
- end
298
-
299
- b2 = util_spec 'b', '2' do |s|
300
- s.add_dependency 'c', '2'
301
- end
302
-
303
- c2 = util_spec 'c', '2'
304
-
305
- install_specs c2, b1, b2, a1
306
-
307
- # c1 is missing, but not needed for activation, so we should not get any errors here
308
-
309
- Gem.activate_bin_path("a", "exec", ">= 0")
310
-
311
- assert_equal %w[a-1 b-2 c-2], loaded_spec_names
312
- end
313
-
314
- def test_activate_bin_path_raises_a_meaningful_error_if_a_gem_thats_finally_activated_has_orphaned_dependencies
315
- a1 = util_spec 'a', '1' do |s|
316
- s.executables = ['exec']
317
- s.add_dependency 'b'
318
- end
319
-
320
- b1 = util_spec 'b', '1' do |s|
321
- s.add_dependency 'c', '1'
322
- end
323
-
324
- b2 = util_spec 'b', '2' do |s|
325
- s.add_dependency 'c', '2'
326
- end
327
-
328
- c1 = util_spec 'c', '1'
329
-
330
- install_specs c1, b1, b2, a1
331
-
332
- # c2 is missing, and b2 which has it as a dependency will be activated, so we should get an error about the orphaned dependency
333
-
334
- e = assert_raise Gem::UnsatisfiableDependencyError do
335
- load Gem.activate_bin_path("a", "exec", ">= 0")
336
- end
337
-
338
- assert_equal "Unable to resolve dependency: 'b (>= 0)' requires 'c (= 2)'", e.message
339
- end
340
-
341
- def test_activate_bin_path_in_debug_mode
342
- a1 = util_spec 'a', '1' do |s|
343
- s.executables = ['exec']
344
- end
345
-
346
- install_specs a1
347
-
348
- require "open3"
349
- output, status = Open3.capture2e(
350
- { "GEM_HOME" => Gem.paths.home, "DEBUG_RESOLVER" => "1" },
351
- *ruby_with_rubygems_in_load_path, "-e", "\"Gem.activate_bin_path('a', 'exec', '>= 0')\""
352
- )
353
-
354
- assert status.success?, output
355
- end
356
-
357
- def test_activate_bin_path_selects_exact_bundler_version_if_present
358
- bundler_latest = util_spec 'bundler', '2.0.1' do |s|
359
- s.executables = ['bundle']
360
- end
361
-
362
- bundler_previous = util_spec 'bundler', '2.0.0' do |s|
363
- s.executables = ['bundle']
364
- end
365
-
366
- install_specs bundler_latest, bundler_previous
367
-
368
- File.open("Gemfile.lock", "w") do |f|
369
- f.write <<-L.gsub(/ {8}/, "")
370
- GEM
371
- remote: https://rubygems.org/
372
- specs:
373
-
374
- PLATFORMS
375
- ruby
376
-
377
- DEPENDENCIES
378
-
379
- BUNDLED WITH
380
- 2.0.0
381
- L
382
- end
383
-
384
- File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
385
-
386
- load Gem.activate_bin_path("bundler", "bundle", ">= 0.a")
387
-
388
- assert_equal %w[bundler-2.0.0], loaded_spec_names
389
- end
390
-
391
- def test_activate_bin_path_respects_underscore_selection_if_given
392
- bundler_latest = util_spec 'bundler', '2.0.1' do |s|
393
- s.executables = ['bundle']
394
- end
395
-
396
- bundler_previous = util_spec 'bundler', '1.17.3' do |s|
397
- s.executables = ['bundle']
398
- end
399
-
400
- install_specs bundler_latest, bundler_previous
401
-
402
- File.open("Gemfile.lock", "w") do |f|
403
- f.write <<-L.gsub(/ {8}/, "")
404
- GEM
405
- remote: https://rubygems.org/
406
- specs:
407
-
408
- PLATFORMS
409
- ruby
410
-
411
- DEPENDENCIES
412
-
413
- BUNDLED WITH
414
- 2.0.1
415
- L
416
- end
417
-
418
- File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
419
-
420
- load Gem.activate_bin_path("bundler", "bundle", "= 1.17.3")
421
-
422
- assert_equal %w[bundler-1.17.3], loaded_spec_names
423
- end
424
-
425
- def test_activate_bin_path_gives_proper_error_for_bundler_when_underscore_selection_given
426
- File.open("Gemfile.lock", "w") do |f|
427
- f.write <<-L.gsub(/ {8}/, "")
428
- GEM
429
- remote: https://rubygems.org/
430
- specs:
431
-
432
- PLATFORMS
433
- ruby
434
-
435
- DEPENDENCIES
436
-
437
- BUNDLED WITH
438
- 2.1.4
439
- L
440
- end
441
-
442
- File.open("Gemfile", "w") {|f| f.puts('source "https://rubygems.org"') }
443
-
444
- e = assert_raise Gem::GemNotFoundException do
445
- load Gem.activate_bin_path("bundler", "bundle", "= 2.2.8")
446
- end
447
-
448
- assert_equal "can't find gem bundler (= 2.2.8) with executable bundle", e.message
449
- end
450
-
451
- def test_self_bin_path_no_exec_name
452
- e = assert_raise ArgumentError do
453
- Gem.bin_path 'a'
454
- end
455
-
456
- assert_equal 'you must supply exec_name', e.message
457
- end
458
-
459
- def test_self_bin_path_bin_name
460
- install_specs util_exec_gem
461
- assert_equal @abin_path, Gem.bin_path('a', 'abin')
462
- end
463
-
464
- def test_self_bin_path_bin_name_version
465
- install_specs util_exec_gem
466
- assert_equal @abin_path, Gem.bin_path('a', 'abin', '4')
467
- end
468
-
469
- def test_self_bin_path_nonexistent_binfile
470
- util_spec 'a', '2' do |s|
471
- s.executables = ['exec']
472
- end
473
- assert_raise(Gem::GemNotFoundException) do
474
- Gem.bin_path('a', 'other', '2')
475
- end
476
- end
477
-
478
- def test_self_bin_path_no_bin_file
479
- util_spec 'a', '1'
480
- assert_raise(ArgumentError) do
481
- Gem.bin_path('a', nil, '1')
482
- end
483
- end
484
-
485
- def test_self_bin_path_not_found
486
- assert_raise(Gem::GemNotFoundException) do
487
- Gem.bin_path('non-existent', 'blah')
488
- end
489
- end
490
-
491
- def test_self_bin_path_bin_file_gone_in_latest
492
- install_specs util_exec_gem
493
- spec = util_spec 'a', '10' do |s|
494
- s.executables = []
495
- end
496
- install_specs spec
497
- assert_equal @abin_path, Gem.bin_path('a', 'abin')
498
- end
499
-
500
- def test_self_bindir
501
- assert_equal File.join(@gemhome, 'bin'), Gem.bindir
502
- assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Gem.dir)
503
- assert_equal File.join(@gemhome, 'bin'), Gem.bindir(Pathname.new(Gem.dir))
504
- end
505
-
506
- def test_self_bindir_default_dir
507
- default = Gem.default_dir
508
-
509
- assert_equal Gem.default_bindir, Gem.bindir(default)
510
- end
511
-
512
- def test_self_clear_paths
513
- assert_match(/gemhome$/, Gem.dir)
514
- assert_match(/gemhome$/, Gem.path.first)
515
-
516
- Gem.clear_paths
517
-
518
- assert_nil Gem::Specification.send(:class_variable_get, :@@all)
519
- end
520
-
521
- def test_self_configuration
522
- expected = Gem::ConfigFile.new []
523
- Gem.configuration = nil
524
-
525
- assert_equal expected, Gem.configuration
526
- end
527
-
528
- def test_self_datadir
529
- foo = nil
530
-
531
- Dir.chdir @tempdir do
532
- FileUtils.mkdir_p 'data'
533
- File.open File.join('data', 'foo.txt'), 'w' do |fp|
534
- fp.puts 'blah'
535
- end
536
-
537
- foo = util_spec 'foo' do |s|
538
- s.files = %w[data/foo.txt]
539
- end
540
-
541
- install_gem foo
542
- end
543
-
544
- gem 'foo'
545
-
546
- expected = File.join @gemhome, 'gems', foo.full_name, 'data', 'foo'
547
-
548
- assert_equal expected, Gem::Specification.find_by_name("foo").datadir
549
- end
550
-
551
- def test_self_datadir_nonexistent_package
552
- assert_raise(Gem::MissingSpecError) do
553
- Gem::Specification.find_by_name("xyzzy").datadir
554
- end
555
- end
556
-
557
- def test_self_default_exec_format
558
- ruby_install_name 'ruby' do
559
- assert_equal '%s', Gem.default_exec_format
560
- end
561
- end
562
-
563
- def test_self_default_exec_format_18
564
- ruby_install_name 'ruby18' do
565
- assert_equal '%s18', Gem.default_exec_format
566
- end
567
- end
568
-
569
- def test_self_default_exec_format_jruby
570
- ruby_install_name 'jruby' do
571
- assert_equal 'j%s', Gem.default_exec_format
572
- end
573
- end
574
-
575
- def test_default_path
576
- vendordir(File.join(@tempdir, 'vendor')) do
577
- FileUtils.rm_rf Gem.user_home
578
-
579
- expected = [Gem.default_dir]
580
-
581
- assert_equal expected, Gem.default_path
582
- end
583
- end
584
-
585
- def test_default_path_missing_vendor
586
- vendordir(nil) do
587
- FileUtils.rm_rf Gem.user_home
588
-
589
- expected = [Gem.default_dir]
590
-
591
- assert_equal expected, Gem.default_path
592
- end
593
- end
594
-
595
- def test_default_path_user_home
596
- vendordir(File.join(@tempdir, 'vendor')) do
597
- expected = [Gem.user_dir, Gem.default_dir]
598
-
599
- assert_equal expected, Gem.default_path
600
- end
601
- end
602
-
603
- def test_default_path_vendor_dir
604
- vendordir(File.join(@tempdir, 'vendor')) do
605
- FileUtils.mkdir_p Gem.vendor_dir
606
-
607
- FileUtils.rm_rf Gem.user_home
608
-
609
- expected = [Gem.default_dir, Gem.vendor_dir]
610
-
611
- assert_equal expected, Gem.default_path
612
- end
613
- end
614
-
615
- def test_self_default_sources
616
- assert_equal %w[https://rubygems.org/], Gem.default_sources
617
- end
618
-
619
- def test_self_use_gemdeps
620
- with_rubygems_gemdeps('-') do
621
- FileUtils.mkdir_p 'detect/a/b'
622
- FileUtils.mkdir_p 'detect/a/Isolate'
623
-
624
- FileUtils.touch 'detect/Isolate'
625
-
626
- begin
627
- Dir.chdir 'detect/a/b'
628
-
629
- Gem.use_gemdeps
630
-
631
- assert_equal add_bundler_full_name([]), loaded_spec_names
632
- ensure
633
- Dir.chdir @tempdir
634
- end
635
- end
636
- end
637
-
638
- def test_self_dir
639
- assert_equal @gemhome, Gem.dir
640
- end
641
-
642
- def test_self_ensure_gem_directories
643
- FileUtils.rm_r @gemhome
644
- Gem.use_paths @gemhome
645
-
646
- Gem.ensure_gem_subdirectories @gemhome
647
-
648
- assert_path_exist File.join @gemhome, 'build_info'
649
- assert_path_exist File.join @gemhome, 'cache'
650
- assert_path_exist File.join @gemhome, 'doc'
651
- assert_path_exist File.join @gemhome, 'extensions'
652
- assert_path_exist File.join @gemhome, 'gems'
653
- assert_path_exist File.join @gemhome, 'specifications'
654
- end
655
-
656
- def test_self_ensure_gem_directories_permissions
657
- FileUtils.rm_r @gemhome
658
- Gem.use_paths @gemhome
659
-
660
- Gem.ensure_gem_subdirectories @gemhome, 0750
661
-
662
- assert_directory_exists File.join(@gemhome, "cache")
663
-
664
- assert_equal 0750, File::Stat.new(@gemhome).mode & 0777
665
- assert_equal 0750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0777
666
- end unless win_platform?
667
-
668
- def test_self_ensure_gem_directories_safe_permissions
669
- FileUtils.rm_r @gemhome
670
- Gem.use_paths @gemhome
671
-
672
- old_umask = File.umask
673
- File.umask 0
674
- Gem.ensure_gem_subdirectories @gemhome
675
-
676
- assert_equal 0, File::Stat.new(@gemhome).mode & 002
677
- assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 002
678
- ensure
679
- File.umask old_umask
680
- end unless win_platform?
681
-
682
- def test_self_ensure_gem_directories_missing_parents
683
- gemdir = File.join @tempdir, 'a/b/c/gemdir'
684
- FileUtils.rm_rf File.join(@tempdir, 'a') rescue nil
685
- refute File.exist?(File.join(@tempdir, 'a')),
686
- "manually remove #{File.join @tempdir, 'a'}, tests are broken"
687
- Gem.use_paths gemdir
688
-
689
- Gem.ensure_gem_subdirectories gemdir
690
-
691
- assert_directory_exists util_cache_dir
692
- end
693
-
694
- unless win_platform? || Process.uid.zero? # only for FS that support write protection
695
- def test_self_ensure_gem_directories_write_protected
696
- gemdir = File.join @tempdir, "egd"
697
- FileUtils.rm_r gemdir rescue nil
698
- refute File.exist?(gemdir), "manually remove #{gemdir}, tests are broken"
699
- FileUtils.mkdir_p gemdir
700
- FileUtils.chmod 0400, gemdir
701
- Gem.use_paths gemdir
702
-
703
- Gem.ensure_gem_subdirectories gemdir
704
-
705
- refute File.exist?(util_cache_dir)
706
- ensure
707
- FileUtils.chmod 0600, gemdir
708
- end
709
-
710
- def test_self_ensure_gem_directories_write_protected_parents
711
- parent = File.join(@tempdir, "egd")
712
- gemdir = "#{parent}/a/b/c"
713
-
714
- FileUtils.rm_r parent rescue nil
715
- refute File.exist?(parent), "manually remove #{parent}, tests are broken"
716
- FileUtils.mkdir_p parent
717
- FileUtils.chmod 0400, parent
718
- Gem.use_paths(gemdir)
719
-
720
- Gem.ensure_gem_subdirectories gemdir
721
-
722
- refute File.exist? File.join(gemdir, "gems")
723
- ensure
724
- FileUtils.chmod 0600, parent
725
- end
726
-
727
- def test_self_ensure_gem_directories_non_existent_paths
728
- Gem.ensure_gem_subdirectories '/proc/0123456789/bogus' # should not raise
729
- Gem.ensure_gem_subdirectories 'classpath:/bogus/x' # JRuby embed scenario
730
- end
731
- end
732
-
733
- def test_self_extension_dir_shared
734
- enable_shared 'yes' do
735
- assert_equal Gem.ruby_api_version, Gem.extension_api_version
736
- end
737
- end
738
-
739
- def test_self_extension_dir_static
740
- enable_shared 'no' do
741
- assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
742
- end
743
- end
744
-
745
- def test_self_find_files
746
- cwd = File.expand_path("test/rubygems", PROJECT_DIR)
747
- $LOAD_PATH.unshift cwd
748
-
749
- discover_path = File.join 'lib', 'sff', 'discover.rb'
750
-
751
- foo1, foo2 = %w[1 2].map do |version|
752
- spec = quick_gem 'sff', version do |s|
753
- s.files << discover_path
754
- end
755
-
756
- write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
757
- fp.puts "# #{spec.full_name}"
758
- end
759
-
760
- spec
761
- end
762
-
763
- Gem.refresh
764
-
765
- expected = [
766
- File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
767
- File.join(foo2.full_gem_path, discover_path),
768
- File.join(foo1.full_gem_path, discover_path),
769
- ]
770
-
771
- assert_equal expected, Gem.find_files('sff/discover')
772
- assert_equal expected, Gem.find_files('sff/**.rb'), '[ruby-core:31730]'
773
- ensure
774
- assert_equal cwd, $LOAD_PATH.shift
775
- end
776
-
777
- def test_self_find_files_with_gemfile
778
- cwd = File.expand_path("test/rubygems", PROJECT_DIR)
779
- actual_load_path = $LOAD_PATH.unshift(cwd).dup
780
-
781
- discover_path = File.join 'lib', 'sff', 'discover.rb'
782
-
783
- foo1, _ = %w[1 2].map do |version|
784
- spec = quick_gem 'sff', version do |s|
785
- s.files << discover_path
786
- end
787
-
788
- write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
789
- fp.puts "# #{spec.full_name}"
790
- end
791
-
792
- spec
793
- end
794
- Gem.refresh
795
-
796
- write_file(File.join Dir.pwd, 'Gemfile') do |fp|
797
- fp.puts "source 'https://rubygems.org'"
798
- fp.puts "gem '#{foo1.name}', '#{foo1.version}'"
799
- end
800
- Gem.use_gemdeps(File.join Dir.pwd, 'Gemfile')
801
-
802
- expected = [
803
- File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
804
- File.join(foo1.full_gem_path, discover_path),
805
- ].sort
806
-
807
- assert_equal expected, Gem.find_files('sff/discover').sort
808
- assert_equal expected, Gem.find_files('sff/**.rb').sort, '[ruby-core:31730]'
809
- ensure
810
- assert_equal cwd, actual_load_path.shift unless Gem.java_platform?
811
- end
812
-
813
- def test_self_find_latest_files
814
- cwd = File.expand_path("test/rubygems", PROJECT_DIR)
815
- $LOAD_PATH.unshift cwd
816
-
817
- discover_path = File.join 'lib', 'sff', 'discover.rb'
818
-
819
- _, foo2 = %w[1 2].map do |version|
820
- spec = quick_gem 'sff', version do |s|
821
- s.files << discover_path
822
- end
823
-
824
- write_file(File.join 'gems', spec.full_name, discover_path) do |fp|
825
- fp.puts "# #{spec.full_name}"
826
- end
827
-
828
- spec
829
- end
830
-
831
- Gem.refresh
832
-
833
- expected = [
834
- File.expand_path('test/rubygems/sff/discover.rb', PROJECT_DIR),
835
- File.join(foo2.full_gem_path, discover_path),
836
- ]
837
-
838
- assert_equal expected, Gem.find_latest_files('sff/discover')
839
- assert_equal expected, Gem.find_latest_files('sff/**.rb'), '[ruby-core:31730]'
840
- ensure
841
- assert_equal cwd, $LOAD_PATH.shift
842
- end
843
-
844
- def test_self_latest_spec_for
845
- gems = spec_fetcher do |fetcher|
846
- fetcher.spec 'a', 1
847
- fetcher.spec 'a', '3.a'
848
- fetcher.spec 'a', 2
849
- end
850
-
851
- spec = Gem.latest_spec_for 'a'
852
-
853
- assert_equal gems['a-2'], spec
854
- end
855
-
856
- def test_self_latest_spec_for_multiple_sources
857
- uri = 'https://example.sample.com/'
858
- source = Gem::Source.new(uri)
859
- source_list = Gem::SourceList.new
860
- source_list << Gem::Source.new(@uri)
861
- source_list << source
862
- Gem.sources.replace source_list
863
-
864
- spec_fetcher(uri) do |fetcher|
865
- fetcher.spec 'a', 1.1
866
- end
867
-
868
- gems = spec_fetcher do |fetcher|
869
- fetcher.spec 'a', 1
870
- fetcher.spec 'a', '3.a'
871
- fetcher.spec 'a', 2
872
- end
873
- spec = Gem.latest_spec_for 'a'
874
- assert_equal gems['a-2'], spec
875
- end
876
-
877
- def test_self_latest_rubygems_version
878
- spec_fetcher do |fetcher|
879
- fetcher.spec 'rubygems-update', '1.8.23'
880
- fetcher.spec 'rubygems-update', '1.8.24'
881
- fetcher.spec 'rubygems-update', '2.0.0.preview3'
882
- end
883
-
884
- version = Gem.latest_rubygems_version
885
-
886
- assert_equal Gem::Version.new('1.8.24'), version
887
- end
888
-
889
- def test_self_latest_version_for
890
- spec_fetcher do |fetcher|
891
- fetcher.spec 'a', 1
892
- fetcher.spec 'a', 2
893
- fetcher.spec 'a', '3.a'
894
- end
895
-
896
- version = Gem.latest_version_for 'a'
897
-
898
- assert_equal Gem::Version.new(2), version
899
- end
900
-
901
- def test_self_latest_version_for_multiple_sources
902
- uri = 'https://example.sample.com/'
903
- source = Gem::Source.new(uri)
904
- source_list = Gem::SourceList.new
905
- source_list << Gem::Source.new(@uri)
906
- source_list << source
907
- Gem.sources.replace source_list
908
-
909
- spec_fetcher(uri) do |fetcher|
910
- fetcher.spec 'a', 1.1
911
- end
912
-
913
- spec_fetcher do |fetcher|
914
- fetcher.spec 'a', 1
915
- fetcher.spec 'a', 2
916
- fetcher.spec 'a', '3.a'
917
- end
918
-
919
- version = Gem.latest_version_for 'a'
920
-
921
- assert_equal Gem::Version.new(2), version
922
- end
923
-
924
- def test_self_loaded_specs
925
- foo = util_spec 'foo'
926
- install_gem foo
927
-
928
- foo.activate
929
-
930
- assert_equal true, Gem.loaded_specs.keys.include?('foo')
931
- end
932
-
933
- def test_self_path
934
- assert_equal [Gem.dir], Gem.path
935
- end
936
-
937
- def test_self_path_default
938
- ENV.delete "GEM_HOME"
939
- ENV.delete "GEM_PATH"
940
-
941
- Gem.instance_variable_set :@paths, nil
942
-
943
- assert_equal [Gem.default_path, Gem.dir].flatten.uniq, Gem.path
944
- end
945
-
946
- def test_self_path_ENV_PATH
947
- path_count = Gem.path.size
948
- Gem.clear_paths
949
-
950
- ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
951
-
952
- assert_equal @additional, Gem.path[0,2]
953
-
954
- assert_equal path_count + @additional.size, Gem.path.size,
955
- "extra path components: #{Gem.path[2..-1].inspect}"
956
- assert_equal Gem.dir, Gem.path.last
957
- end
958
-
959
- def test_self_path_duplicate
960
- Gem.clear_paths
961
- util_ensure_gem_dirs
962
- dirs = @additional + [@gemhome] + [File.join(@tempdir, 'a')]
963
-
964
- ENV['GEM_HOME'] = @gemhome
965
- ENV['GEM_PATH'] = dirs.join File::PATH_SEPARATOR
966
-
967
- assert_equal @gemhome, Gem.dir
968
-
969
- paths = [Gem.dir]
970
- assert_equal @additional + paths, Gem.path
971
- end
972
-
973
- def test_self_path_overlap
974
- Gem.clear_paths
975
-
976
- util_ensure_gem_dirs
977
- ENV['GEM_HOME'] = @gemhome
978
- ENV['GEM_PATH'] = @additional.join(File::PATH_SEPARATOR)
979
-
980
- assert_equal @gemhome, Gem.dir
981
-
982
- paths = [Gem.dir]
983
- assert_equal @additional + paths, Gem.path
984
- end
985
-
986
- def test_self_platforms
987
- assert_equal [Gem::Platform::RUBY, Gem::Platform.local], Gem.platforms
988
- end
989
-
990
- def test_self_prefix
991
- assert_equal PROJECT_DIR, Gem.prefix
992
- end
993
-
994
- def test_self_prefix_libdir
995
- orig_libdir = RbConfig::CONFIG['libdir']
996
- RbConfig::CONFIG['libdir'] = PROJECT_DIR
997
-
998
- assert_nil Gem.prefix
999
- ensure
1000
- RbConfig::CONFIG['libdir'] = orig_libdir
1001
- end
1002
-
1003
- def test_self_prefix_sitelibdir
1004
- orig_sitelibdir = RbConfig::CONFIG['sitelibdir']
1005
- RbConfig::CONFIG['sitelibdir'] = PROJECT_DIR
1006
-
1007
- assert_nil Gem.prefix
1008
- ensure
1009
- RbConfig::CONFIG['sitelibdir'] = orig_sitelibdir
1010
- end
1011
-
1012
- def test_self_read_binary
1013
- File.open 'test', 'w' do |io|
1014
- io.write "\xCF\x80"
1015
- end
1016
-
1017
- assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
1018
-
1019
- pend 'chmod not supported' if Gem.win_platform?
1020
-
1021
- begin
1022
- File.chmod 0444, 'test'
1023
-
1024
- assert_equal ["\xCF", "\x80"], Gem.read_binary('test').chars.to_a
1025
- ensure
1026
- File.chmod 0644, 'test'
1027
- end
1028
- end
1029
-
1030
- def test_self_refresh
1031
- util_make_gems
1032
-
1033
- a1_spec = @a1.spec_file
1034
- moved_path = File.join @tempdir, File.basename(a1_spec)
1035
-
1036
- FileUtils.mv a1_spec, moved_path
1037
-
1038
- Gem.refresh
1039
-
1040
- refute_includes Gem::Specification.all_names, @a1.full_name
1041
-
1042
- FileUtils.mv moved_path, a1_spec
1043
-
1044
- Gem.refresh
1045
-
1046
- assert_includes Gem::Specification.all_names, @a1.full_name
1047
- end
1048
-
1049
- def test_self_refresh_keeps_loaded_specs_activated
1050
- util_make_gems
1051
-
1052
- a1_spec = @a1.spec_file
1053
- moved_path = File.join @tempdir, File.basename(a1_spec)
1054
-
1055
- FileUtils.mv a1_spec, moved_path
1056
-
1057
- Gem.refresh
1058
-
1059
- s = Gem::Specification.first
1060
- s.activate
1061
-
1062
- Gem.refresh
1063
-
1064
- Gem::Specification.each {|spec| assert spec.activated? if spec == s }
1065
-
1066
- Gem.loaded_specs.delete(s)
1067
- Gem.refresh
1068
- end
1069
-
1070
- def test_self_ruby_escaping_spaces_in_path
1071
- with_clean_path_to_ruby do
1072
- with_rb_config_ruby("C:/Ruby 1.8/bin/ruby.exe") do
1073
- assert_equal "\"C:/Ruby 1.8/bin/ruby.exe\"", Gem.ruby
1074
- end
1075
- end
1076
- end
1077
-
1078
- def test_self_ruby_path_without_spaces
1079
- with_clean_path_to_ruby do
1080
- with_rb_config_ruby("C:/Ruby18/bin/ruby.exe") do
1081
- assert_equal "C:/Ruby18/bin/ruby.exe", Gem.ruby
1082
- end
1083
- end
1084
- end
1085
-
1086
- def test_self_ruby_api_version
1087
- orig_ruby_version, RbConfig::CONFIG['ruby_version'] = RbConfig::CONFIG['ruby_version'], '1.2.3'
1088
-
1089
- Gem.instance_variable_set :@ruby_api_version, nil
1090
-
1091
- assert_equal '1.2.3', Gem.ruby_api_version
1092
- ensure
1093
- Gem.instance_variable_set :@ruby_api_version, nil
1094
-
1095
- RbConfig::CONFIG['ruby_version'] = orig_ruby_version
1096
- end
1097
-
1098
- def test_self_env_requirement
1099
- ENV["GEM_REQUIREMENT_FOO"] = '>= 1.2.3'
1100
- ENV["GEM_REQUIREMENT_BAR"] = '1.2.3'
1101
- ENV["GEM_REQUIREMENT_BAZ"] = 'abcd'
1102
-
1103
- assert_equal Gem::Requirement.create('>= 1.2.3'), Gem.env_requirement('foo')
1104
- assert_equal Gem::Requirement.create('1.2.3'), Gem.env_requirement('bAr')
1105
- assert_raise(Gem::Requirement::BadRequirementError) { Gem.env_requirement('baz') }
1106
- assert_equal Gem::Requirement.default, Gem.env_requirement('qux')
1107
- end
1108
-
1109
- def test_self_ruby_version_with_non_mri_implementations
1110
- util_set_RUBY_VERSION '2.5.0', 0, 60928, 'jruby 9.2.0.0 (2.5.0) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]'
1111
-
1112
- assert_equal Gem::Version.new('2.5.0'), Gem.ruby_version
1113
- ensure
1114
- util_restore_RUBY_VERSION
1115
- end
1116
-
1117
- def test_self_ruby_version_with_svn_prerelease
1118
- util_set_RUBY_VERSION '2.6.0', -1, 63539, 'ruby 2.6.0preview2 (2018-05-31 trunk 63539) [x86_64-linux]'
1119
-
1120
- assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
1121
- ensure
1122
- util_restore_RUBY_VERSION
1123
- end
1124
-
1125
- def test_self_ruby_version_with_git_prerelease
1126
- util_set_RUBY_VERSION '2.7.0', -1, 'b563439274a402e33541f5695b1bfd4ac1085638', 'ruby 2.7.0preview3 (2019-11-23 master b563439274) [x86_64-linux]'
1127
-
1128
- assert_equal Gem::Version.new('2.7.0.preview3'), Gem.ruby_version
1129
- ensure
1130
- util_restore_RUBY_VERSION
1131
- end
1132
-
1133
- def test_self_ruby_version_with_non_mri_implementations_with_mri_prerelase_compatibility
1134
- util_set_RUBY_VERSION '2.6.0', -1, 63539, 'weirdjruby 9.2.0.0 (2.6.0preview2) 2018-05-24 81156a8 OpenJDK 64-Bit Server VM 25.171-b11 on 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11 [linux-x86_64]', 'weirdjruby', '9.2.0.0'
1135
-
1136
- assert_equal Gem::Version.new('2.6.0.preview2'), Gem.ruby_version
1137
- ensure
1138
- util_restore_RUBY_VERSION
1139
- end
1140
-
1141
- def test_self_ruby_version_with_svn_trunk
1142
- util_set_RUBY_VERSION '1.9.2', -1, 23493, 'ruby 1.9.2dev (2009-05-20 trunk 23493) [x86_64-linux]'
1143
-
1144
- assert_equal Gem::Version.new('1.9.2.dev'), Gem.ruby_version
1145
- ensure
1146
- util_restore_RUBY_VERSION
1147
- end
1148
-
1149
- def test_self_ruby_version_with_git_master
1150
- util_set_RUBY_VERSION '2.7.0', -1, '5de284ec78220e75643f89b454ce999da0c1c195', 'ruby 2.7.0dev (2019-12-23T01:37:30Z master 5de284ec78) [x86_64-linux]'
1151
-
1152
- assert_equal Gem::Version.new('2.7.0.dev'), Gem.ruby_version
1153
- ensure
1154
- util_restore_RUBY_VERSION
1155
- end
1156
-
1157
- def test_self_rubygems_version
1158
- assert_equal Gem::Version.new(Gem::VERSION), Gem.rubygems_version
1159
- end
1160
-
1161
- def test_self_paths_eq
1162
- other = File.join @tempdir, 'other'
1163
- path = [@userhome, other].join File::PATH_SEPARATOR
1164
-
1165
- #
1166
- # FIXME remove after fixing test_case
1167
- #
1168
- ENV["GEM_HOME"] = @gemhome
1169
- Gem.paths = { "GEM_PATH" => path }
1170
-
1171
- assert_equal [@userhome, other, @gemhome], Gem.path
1172
- end
1173
-
1174
- def test_self_paths_eq_nonexistent_home
1175
- ENV['GEM_HOME'] = @gemhome
1176
- Gem.clear_paths
1177
-
1178
- other = File.join @tempdir, 'other'
1179
-
1180
- ENV['HOME'] = other
1181
-
1182
- Gem.paths = { "GEM_PATH" => other }
1183
-
1184
- assert_equal [other, @gemhome], Gem.path
1185
- end
1186
-
1187
- def test_self_post_build
1188
- assert_equal 1, Gem.post_build_hooks.length
1189
-
1190
- Gem.post_build {|installer| }
1191
-
1192
- assert_equal 2, Gem.post_build_hooks.length
1193
- end
1194
-
1195
- def test_self_post_install
1196
- assert_equal 1, Gem.post_install_hooks.length
1197
-
1198
- Gem.post_install {|installer| }
1199
-
1200
- assert_equal 2, Gem.post_install_hooks.length
1201
- end
1202
-
1203
- def test_self_done_installing
1204
- assert_empty Gem.done_installing_hooks
1205
-
1206
- Gem.done_installing {|gems| }
1207
-
1208
- assert_equal 1, Gem.done_installing_hooks.length
1209
- end
1210
-
1211
- def test_self_post_reset
1212
- assert_empty Gem.post_reset_hooks
1213
-
1214
- Gem.post_reset {}
1215
-
1216
- assert_equal 1, Gem.post_reset_hooks.length
1217
- end
1218
-
1219
- def test_self_post_uninstall
1220
- assert_equal 1, Gem.post_uninstall_hooks.length
1221
-
1222
- Gem.post_uninstall {|installer| }
1223
-
1224
- assert_equal 2, Gem.post_uninstall_hooks.length
1225
- end
1226
-
1227
- def test_self_pre_install
1228
- assert_equal 1, Gem.pre_install_hooks.length
1229
-
1230
- Gem.pre_install {|installer| }
1231
-
1232
- assert_equal 2, Gem.pre_install_hooks.length
1233
- end
1234
-
1235
- def test_self_pre_reset
1236
- assert_empty Gem.pre_reset_hooks
1237
-
1238
- Gem.pre_reset {}
1239
-
1240
- assert_equal 1, Gem.pre_reset_hooks.length
1241
- end
1242
-
1243
- def test_self_pre_uninstall
1244
- assert_equal 1, Gem.pre_uninstall_hooks.length
1245
-
1246
- Gem.pre_uninstall {|installer| }
1247
-
1248
- assert_equal 2, Gem.pre_uninstall_hooks.length
1249
- end
1250
-
1251
- def test_self_sources
1252
- assert_equal %w[http://gems.example.com/], Gem.sources
1253
- Gem.sources = nil
1254
- Gem.configuration.sources = %w[http://test.example.com/]
1255
- assert_equal %w[http://test.example.com/], Gem.sources
1256
- end
1257
-
1258
- def test_try_activate_returns_true_for_activated_specs
1259
- b = util_spec 'b', '1.0' do |spec|
1260
- spec.files << 'lib/b.rb'
1261
- end
1262
- install_specs b
1263
-
1264
- assert Gem.try_activate('b'), 'try_activate should return true'
1265
- assert Gem.try_activate('b'), 'try_activate should still return true'
1266
- end
1267
-
1268
- def test_spec_order_is_consistent
1269
- b1 = util_spec 'b', '1.0'
1270
- b2 = util_spec 'b', '2.0'
1271
- b3 = util_spec 'b', '3.0'
1272
-
1273
- install_specs b1, b2, b3
1274
-
1275
- specs1 = Gem::Specification.stubs.find_all {|s| s.name == 'b' }
1276
- Gem::Specification.reset
1277
- specs2 = Gem::Specification.stubs_for('b')
1278
- assert_equal specs1.map(&:version), specs2.map(&:version)
1279
- end
1280
-
1281
- def test_self_try_activate_missing_dep
1282
- b = util_spec 'b', '1.0'
1283
- a = util_spec 'a', '1.0', 'b' => '>= 1.0'
1284
-
1285
- install_specs b, a
1286
- uninstall_gem b
1287
-
1288
- a_file = File.join a.gem_dir, 'lib', 'a_file.rb'
1289
-
1290
- write_file a_file do |io|
1291
- io.puts '# a_file.rb'
1292
- end
1293
-
1294
- e = assert_raise Gem::MissingSpecError do
1295
- Gem.try_activate 'a_file'
1296
- end
1297
-
1298
- assert_match %r{Could not find 'b' }, e.message
1299
- assert_match %r{at: #{a.spec_file}}, e.message
1300
- end
1301
-
1302
- def test_self_try_activate_missing_prerelease
1303
- b = util_spec 'b', '1.0rc1'
1304
- a = util_spec 'a', '1.0rc1', 'b' => '1.0rc1'
1305
-
1306
- install_specs b, a
1307
- uninstall_gem b
1308
-
1309
- a_file = File.join a.gem_dir, 'lib', 'a_file.rb'
1310
-
1311
- write_file a_file do |io|
1312
- io.puts '# a_file.rb'
1313
- end
1314
-
1315
- e = assert_raise Gem::MissingSpecError do
1316
- Gem.try_activate 'a_file'
1317
- end
1318
-
1319
- assert_match %r{Could not find 'b' \(= 1.0rc1\)}, e.message
1320
- end
1321
-
1322
- def test_self_try_activate_missing_extensions
1323
- spec = util_spec 'ext', '1' do |s|
1324
- s.extensions = %w[ext/extconf.rb]
1325
- s.mark_version
1326
- s.installed_by_version = v('2.2')
1327
- end
1328
-
1329
- # write the spec without install to simulate a failed install
1330
- write_file spec.spec_file do |io|
1331
- io.write spec.to_ruby_for_cache
1332
- end
1333
-
1334
- _, err = capture_output do
1335
- refute Gem.try_activate 'nonexistent'
1336
- end
1337
-
1338
- unless Gem.java_platform?
1339
- expected = "Ignoring ext-1 because its extensions are not built. " +
1340
- "Try: gem pristine ext --version 1\n"
1341
-
1342
- assert_equal expected, err
1343
- end
1344
- end
1345
-
1346
- def test_self_use_paths_with_nils
1347
- orig_home = ENV.delete 'GEM_HOME'
1348
- orig_path = ENV.delete 'GEM_PATH'
1349
- Gem.use_paths nil, nil
1350
- assert_equal Gem.default_dir, Gem.paths.home
1351
- path = (Gem.default_path + [Gem.paths.home]).uniq
1352
- assert_equal path, Gem.paths.path
1353
- ensure
1354
- ENV['GEM_HOME'] = orig_home
1355
- ENV['GEM_PATH'] = orig_path
1356
- end
1357
-
1358
- def test_setting_paths_does_not_warn_about_unknown_keys
1359
- stdout, stderr = capture_output do
1360
- Gem.paths = { 'foo' => [],
1361
- 'bar' => Object.new,
1362
- 'GEM_HOME' => Gem.paths.home,
1363
- 'GEM_PATH' => 'foo' }
1364
- end
1365
- assert_equal ['foo', Gem.paths.home], Gem.paths.path
1366
- assert_equal '', stderr
1367
- assert_equal '', stdout
1368
- end
1369
-
1370
- def test_setting_paths_does_not_mutate_parameter_object
1371
- Gem.paths = { 'GEM_HOME' => Gem.paths.home,
1372
- 'GEM_PATH' => 'foo' }.freeze
1373
- assert_equal ['foo', Gem.paths.home], Gem.paths.path
1374
- end
1375
-
1376
- def test_deprecated_paths=
1377
- stdout, stderr = capture_output do
1378
- Gem.paths = { 'GEM_HOME' => Gem.paths.home,
1379
- 'GEM_PATH' => [Gem.paths.home, 'foo'] }
1380
- end
1381
- assert_equal [Gem.paths.home, 'foo'], Gem.paths.path
1382
- assert_match(/Array values in the parameter to `Gem.paths=` are deprecated.\nPlease use a String or nil/m, stderr)
1383
- assert_equal '', stdout
1384
- end
1385
-
1386
- def test_self_use_paths
1387
- util_ensure_gem_dirs
1388
-
1389
- Gem.use_paths @gemhome, @additional
1390
-
1391
- assert_equal @gemhome, Gem.dir
1392
- assert_equal @additional + [Gem.dir], Gem.path
1393
- end
1394
-
1395
- def test_self_user_dir
1396
- parts = [@userhome, '.gem', Gem.ruby_engine]
1397
- parts << RbConfig::CONFIG['ruby_version'] unless RbConfig::CONFIG['ruby_version'].empty?
1398
-
1399
- FileUtils.mkdir_p File.join(parts)
1400
-
1401
- assert_equal File.join(parts), Gem.user_dir
1402
- end
1403
-
1404
- def test_self_user_home
1405
- if ENV['HOME']
1406
- assert_equal ENV['HOME'], Gem.user_home
1407
- else
1408
- assert true, 'count this test'
1409
- end
1410
- end
1411
-
1412
- def test_self_needs
1413
- a = util_spec "a", "1"
1414
- b = util_spec "b", "1", "c" => nil
1415
- c = util_spec "c", "2"
1416
-
1417
- install_specs a, c, b
1418
-
1419
- Gem.needs do |r|
1420
- r.gem "a"
1421
- r.gem "b", "= 1"
1422
- end
1423
-
1424
- activated = Gem::Specification.map {|x| x.full_name }
1425
-
1426
- assert_equal %w[a-1 b-1 c-2], activated.sort
1427
- end
1428
-
1429
- def test_self_needs_picks_up_unresolved_deps
1430
- a = util_spec "a", "1"
1431
- b = util_spec "b", "1", "c" => nil
1432
- c = util_spec "c", "2"
1433
- d = util_spec "d", "1", { 'e' => '= 1' }, "lib/d#{$$}.rb"
1434
- e = util_spec "e", "1"
1435
-
1436
- install_specs a, c, b, e, d
1437
-
1438
- Gem.needs do |r|
1439
- r.gem "a"
1440
- r.gem "b", "= 1"
1441
-
1442
- require "d#{$$}"
1443
- end
1444
-
1445
- assert_equal %w[a-1 b-1 c-2 d-1 e-1], loaded_spec_names
1446
- end
1447
-
1448
- def test_self_gunzip
1449
- input = "\x1F\x8B\b\0\xED\xA3\x1AQ\0\x03\xCBH" +
1450
- "\xCD\xC9\xC9\a\0\x86\xA6\x106\x05\0\0\0"
1451
-
1452
- output = Gem::Util.gunzip input
1453
-
1454
- assert_equal 'hello', output
1455
- assert_equal Encoding::BINARY, output.encoding
1456
- end
1457
-
1458
- def test_self_gzip
1459
- input = 'hello'
1460
-
1461
- output = Gem::Util.gzip input
1462
-
1463
- zipped = StringIO.new output
1464
-
1465
- assert_equal 'hello', Zlib::GzipReader.new(zipped).read
1466
- assert_equal Encoding::BINARY, output.encoding
1467
- end
1468
-
1469
- def test_self_vendor_dir
1470
- vendordir(File.join(@tempdir, 'vendor')) do
1471
- expected =
1472
- File.join RbConfig::CONFIG['vendordir'], 'gems',
1473
- RbConfig::CONFIG['ruby_version']
1474
-
1475
- assert_equal expected, Gem.vendor_dir
1476
- end
1477
- end
1478
-
1479
- def test_self_vendor_dir_ENV_GEM_VENDOR
1480
- ENV['GEM_VENDOR'] = File.join @tempdir, 'vendor', 'gems'
1481
-
1482
- assert_equal ENV['GEM_VENDOR'], Gem.vendor_dir
1483
- refute Gem.vendor_dir.frozen?
1484
- end
1485
-
1486
- def test_self_vendor_dir_missing
1487
- vendordir(nil) do
1488
- assert_nil Gem.vendor_dir
1489
- end
1490
- end
1491
-
1492
- def test_load_plugins
1493
- plugin_path = File.join "lib", "rubygems_plugin.rb"
1494
-
1495
- Dir.chdir @tempdir do
1496
- FileUtils.mkdir_p 'lib'
1497
- File.open plugin_path, "w" do |fp|
1498
- fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
1499
- end
1500
-
1501
- foo1 = util_spec 'foo', '1' do |s|
1502
- s.files << plugin_path
1503
- end
1504
-
1505
- install_gem foo1
1506
-
1507
- foo2 = util_spec 'foo', '2' do |s|
1508
- s.files << plugin_path
1509
- end
1510
-
1511
- install_gem foo2
1512
- end
1513
-
1514
- Gem::Specification.reset
1515
-
1516
- gem 'foo'
1517
-
1518
- Gem.load_plugins
1519
-
1520
- assert_equal %w[plugin], PLUGINS_LOADED
1521
- end
1522
-
1523
- def test_load_user_installed_plugins
1524
- plugin_path = File.join "lib", "rubygems_plugin.rb"
1525
-
1526
- Dir.chdir @tempdir do
1527
- FileUtils.mkdir_p 'lib'
1528
- File.open plugin_path, "w" do |fp|
1529
- fp.puts "class TestGem; PLUGINS_LOADED << 'plugin'; end"
1530
- end
1531
-
1532
- foo = util_spec 'foo', '1' do |s|
1533
- s.files << plugin_path
1534
- end
1535
-
1536
- install_gem_user foo
1537
- end
1538
-
1539
- Gem.paths = { "GEM_PATH" => [Gem.dir, Gem.user_dir].join(File::PATH_SEPARATOR) }
1540
-
1541
- gem 'foo'
1542
-
1543
- Gem.load_plugins
1544
-
1545
- assert_equal %w[plugin], PLUGINS_LOADED
1546
- end
1547
-
1548
- def test_load_env_plugins
1549
- with_plugin('load') { Gem.load_env_plugins }
1550
- assert_equal :loaded, TEST_PLUGIN_LOAD rescue nil
1551
-
1552
- util_remove_interrupt_command
1553
-
1554
- # Should attempt to cause a StandardError
1555
- with_plugin('standarderror') { Gem.load_env_plugins }
1556
- assert_equal :loaded, TEST_PLUGIN_STANDARDERROR rescue nil
1557
-
1558
- util_remove_interrupt_command
1559
-
1560
- # Should attempt to cause an Exception
1561
- with_plugin('exception') { Gem.load_env_plugins }
1562
- assert_equal :loaded, TEST_PLUGIN_EXCEPTION rescue nil
1563
- end
1564
-
1565
- def test_gem_path_ordering
1566
- refute_equal Gem.dir, Gem.user_dir
1567
-
1568
- write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1569
- write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1570
-
1571
- g = util_spec 'g', '1', nil, "lib/g.rb"
1572
- m = util_spec 'm', '1', nil, "lib/m.rb"
1573
-
1574
- install_gem g, :install_dir => Gem.dir
1575
- m0 = install_gem m, :install_dir => Gem.dir
1576
- m1 = install_gem m, :install_dir => Gem.user_dir
1577
-
1578
- assert_equal m0.gem_dir, File.join(Gem.dir, "gems", "m-1")
1579
- assert_equal m1.gem_dir, File.join(Gem.user_dir, "gems", "m-1")
1580
-
1581
- tests = [
1582
- [:dir0, [ Gem.dir, Gem.user_dir], m0],
1583
- [:dir1, [ Gem.user_dir, Gem.dir], m1],
1584
- ]
1585
-
1586
- tests.each do |_name, _paths, expected|
1587
- Gem.use_paths _paths.first, _paths
1588
- Gem::Specification.reset
1589
- Gem.searcher = nil
1590
-
1591
- assert_equal Gem::Dependency.new('m','1').to_specs,
1592
- Gem::Dependency.new('m','1').to_specs.sort
1593
-
1594
- assert_equal \
1595
- [expected.gem_dir],
1596
- Gem::Dependency.new('m','1').to_specs.map(&:gem_dir).sort,
1597
- "Wrong specs for #{_name}"
1598
-
1599
- spec = Gem::Dependency.new('m','1').to_spec
1600
-
1601
- assert_equal \
1602
- File.join(_paths.first, "gems", "m-1"),
1603
- spec.gem_dir,
1604
- "Wrong spec before require for #{_name}"
1605
- refute spec.activated?, "dependency already activated for #{_name}"
1606
-
1607
- gem "m"
1608
-
1609
- spec = Gem::Dependency.new('m','1').to_spec
1610
- assert spec.activated?, "dependency not activated for #{_name}"
1611
-
1612
- assert_equal \
1613
- File.join(_paths.first, "gems", "m-1"),
1614
- spec.gem_dir,
1615
- "Wrong spec after require for #{_name}"
1616
-
1617
- spec.instance_variable_set :@activated, false
1618
- Gem.loaded_specs.delete(spec.name)
1619
- $:.delete(File.join(spec.gem_dir, "lib"))
1620
- end
1621
- end
1622
-
1623
- def test_gem_path_ordering_short
1624
- write_file File.join(@tempdir, 'lib', "g.rb") {|fp| fp.puts "" }
1625
- write_file File.join(@tempdir, 'lib', 'm.rb') {|fp| fp.puts "" }
1626
-
1627
- g = util_spec 'g', '1', nil, "lib/g.rb"
1628
- m = util_spec 'm', '1', nil, "lib/m.rb"
1629
-
1630
- install_gem g, :install_dir => Gem.dir
1631
- install_gem m, :install_dir => Gem.dir
1632
- install_gem m, :install_dir => Gem.user_dir
1633
-
1634
- Gem.use_paths Gem.dir, [ Gem.dir, Gem.user_dir]
1635
-
1636
- assert_equal \
1637
- File.join(Gem.dir, "gems", "m-1"),
1638
- Gem::Dependency.new('m','1').to_spec.gem_dir,
1639
- "Wrong spec selected"
1640
- end
1641
-
1642
- def test_auto_activation_of_specific_gemdeps_file
1643
- a = util_spec "a", "1", nil, "lib/a.rb"
1644
- b = util_spec "b", "1", nil, "lib/b.rb"
1645
- c = util_spec "c", "1", nil, "lib/c.rb"
1646
-
1647
- install_specs a, b, c
1648
-
1649
- path = File.join @tempdir, "gem.deps.rb"
1650
-
1651
- File.open path, "w" do |f|
1652
- f.puts "gem 'a'"
1653
- f.puts "gem 'b'"
1654
- f.puts "gem 'c'"
1655
- end
1656
-
1657
- with_rubygems_gemdeps(path) do
1658
- Gem.use_gemdeps
1659
-
1660
- assert_equal add_bundler_full_name(%W[a-1 b-1 c-1]), loaded_spec_names
1661
- end
1662
- end
1663
-
1664
- def test_auto_activation_of_used_gemdeps_file
1665
- a = util_spec "a", "1", nil, "lib/a.rb"
1666
- b = util_spec "b", "1", nil, "lib/b.rb"
1667
- c = util_spec "c", "1", nil, "lib/c.rb"
1668
-
1669
- install_specs a, b, c
1670
-
1671
- path = File.join @tempdir, "gem.deps.rb"
1672
-
1673
- File.open path, "w" do |f|
1674
- f.puts "gem 'a'"
1675
- f.puts "gem 'b'"
1676
- f.puts "gem 'c'"
1677
- end
1678
-
1679
- with_rubygems_gemdeps("-") do
1680
- expected_specs = [a, b, util_spec("bundler", Bundler::VERSION), c].compact.map(&:full_name)
1681
-
1682
- Gem.use_gemdeps
1683
-
1684
- assert_equal expected_specs, loaded_spec_names
1685
- end
1686
- end
1687
-
1688
- BUNDLER_LIB_PATH = File.expand_path $LOAD_PATH.find {|lp| File.file?(File.join(lp, "bundler.rb")) }
1689
- BUNDLER_FULL_NAME = "bundler-#{Bundler::VERSION}".freeze
1690
-
1691
- def add_bundler_full_name(names)
1692
- names << BUNDLER_FULL_NAME
1693
- names.sort!
1694
- names
1695
- end
1696
-
1697
- def test_looks_for_gemdeps_files_automatically_from_binstubs
1698
- pend "Requiring bundler messes things up" if Gem.java_platform?
1699
-
1700
- a = util_spec "a", "1" do |s|
1701
- s.executables = %w[foo]
1702
- s.bindir = "exe"
1703
- end
1704
-
1705
- write_file File.join(@tempdir, 'exe', 'foo') do |fp|
1706
- fp.puts "puts Gem.loaded_specs.values.map(&:full_name).sort"
1707
- end
1708
-
1709
- b = util_spec "b", "1", nil, "lib/b.rb"
1710
- c = util_spec "c", "1", nil, "lib/c.rb"
1711
-
1712
- install_specs a, b, c
1713
-
1714
- path = File.join(@tempdir, "gd-tmp")
1715
- install_gem a, :install_dir => path
1716
- install_gem b, :install_dir => path
1717
- install_gem c, :install_dir => path
1718
-
1719
- ENV['GEM_PATH'] = path
1720
-
1721
- with_rubygems_gemdeps("-") do
1722
- new_PATH = [File.join(path, "bin"), ENV["PATH"]].join(File::PATH_SEPARATOR)
1723
- new_RUBYOPT = "-I#{rubygems_path} -I#{BUNDLER_LIB_PATH}"
1724
-
1725
- path = File.join @tempdir, "gem.deps.rb"
1726
-
1727
- File.open path, "w" do |f|
1728
- f.puts "gem 'a'"
1729
- end
1730
- out0 = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
1731
- IO.popen("foo", &:read).split(/\n/)
1732
- end
1733
-
1734
- File.open path, "a" do |f|
1735
- f.puts "gem 'b'"
1736
- f.puts "gem 'c'"
1737
- end
1738
- out = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
1739
- IO.popen("foo", &:read).split(/\n/)
1740
- end
1741
-
1742
- assert_equal ["b-1", "c-1"], out - out0
1743
- end
1744
- end
1745
-
1746
- def test_looks_for_gemdeps_files_automatically_from_binstubs_in_parent_dir
1747
- pend "Requiring bundler messes things up" if Gem.java_platform?
1748
-
1749
- a = util_spec "a", "1" do |s|
1750
- s.executables = %w[foo]
1751
- s.bindir = "exe"
1752
- end
1753
-
1754
- write_file File.join(@tempdir, 'exe', 'foo') do |fp|
1755
- fp.puts "puts Gem.loaded_specs.values.map(&:full_name).sort"
1756
- end
1757
-
1758
- b = util_spec "b", "1", nil, "lib/b.rb"
1759
- c = util_spec "c", "1", nil, "lib/c.rb"
1760
-
1761
- install_specs a, b, c
1762
-
1763
- path = File.join(@tempdir, "gd-tmp")
1764
- install_gem a, :install_dir => path
1765
- install_gem b, :install_dir => path
1766
- install_gem c, :install_dir => path
1767
-
1768
- ENV['GEM_PATH'] = path
1769
-
1770
- with_rubygems_gemdeps("-") do
1771
- Dir.mkdir "sub1"
1772
-
1773
- new_PATH = [File.join(path, "bin"), ENV["PATH"]].join(File::PATH_SEPARATOR)
1774
- new_RUBYOPT = "-I#{rubygems_path} -I#{BUNDLER_LIB_PATH}"
1775
-
1776
- path = File.join @tempdir, "gem.deps.rb"
1777
-
1778
- File.open path, "w" do |f|
1779
- f.puts "gem 'a'"
1780
- end
1781
- out0 = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
1782
- IO.popen("foo", :chdir => "sub1", &:read).split(/\n/)
1783
- end
1784
-
1785
- File.open path, "a" do |f|
1786
- f.puts "gem 'b'"
1787
- f.puts "gem 'c'"
1788
- end
1789
- out = with_path_and_rubyopt(new_PATH, new_RUBYOPT) do
1790
- IO.popen("foo", :chdir => "sub1", &:read).split(/\n/)
1791
- end
1792
-
1793
- Dir.rmdir "sub1"
1794
-
1795
- assert_equal ["b-1", "c-1"], out - out0
1796
- end
1797
- end
1798
-
1799
- def test_register_default_spec
1800
- Gem.clear_default_specs
1801
-
1802
- old_style = Gem::Specification.new do |spec|
1803
- spec.files = ["foo.rb", "bar.rb"]
1804
- end
1805
-
1806
- Gem.register_default_spec old_style
1807
-
1808
- assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
1809
- assert_equal old_style, Gem.find_unresolved_default_spec("bar.rb")
1810
- assert_nil Gem.find_unresolved_default_spec("baz.rb")
1811
-
1812
- Gem.clear_default_specs
1813
-
1814
- new_style = Gem::Specification.new do |spec|
1815
- spec.files = ["lib/foo.rb", "ext/bar.rb", "bin/exec", "README"]
1816
- spec.require_paths = ["lib", "ext"]
1817
- end
1818
-
1819
- Gem.register_default_spec new_style
1820
-
1821
- assert_equal new_style, Gem.find_unresolved_default_spec("foo.rb")
1822
- assert_equal new_style, Gem.find_unresolved_default_spec("bar.rb")
1823
- assert_nil Gem.find_unresolved_default_spec("exec")
1824
- assert_nil Gem.find_unresolved_default_spec("README")
1825
- end
1826
-
1827
- def test_register_default_spec_old_style_with_folder_starting_with_lib
1828
- Gem.clear_default_specs
1829
-
1830
- old_style = Gem::Specification.new do |spec|
1831
- spec.files = ["libexec/bundle", "foo.rb", "bar.rb"]
1832
- end
1833
-
1834
- Gem.register_default_spec old_style
1835
-
1836
- assert_equal old_style, Gem.find_unresolved_default_spec("foo.rb")
1837
- end
1838
-
1839
- def test_use_gemdeps
1840
- gem_deps_file = 'gem.deps.rb'.tap(&Gem::UNTAINT)
1841
- spec = util_spec 'a', 1
1842
- install_specs spec
1843
-
1844
- spec = Gem::Specification.find {|s| s == spec }
1845
- refute spec.activated?
1846
-
1847
- File.open gem_deps_file, 'w' do |io|
1848
- io.write 'gem "a"'
1849
- end
1850
-
1851
- assert_nil Gem.gemdeps
1852
-
1853
- Gem.use_gemdeps gem_deps_file
1854
-
1855
- assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1856
- refute_nil Gem.gemdeps
1857
- end
1858
-
1859
- def test_use_gemdeps_ENV
1860
- with_rubygems_gemdeps(nil) do
1861
- spec = util_spec 'a', 1
1862
-
1863
- refute spec.activated?
1864
-
1865
- File.open 'gem.deps.rb', 'w' do |io|
1866
- io.write 'gem "a"'
1867
- end
1868
-
1869
- Gem.use_gemdeps
1870
-
1871
- refute spec.activated?
1872
- end
1873
- end
1874
-
1875
- def test_use_gemdeps_argument_missing
1876
- e = assert_raise ArgumentError do
1877
- Gem.use_gemdeps 'gem.deps.rb'
1878
- end
1879
-
1880
- assert_equal 'Unable to find gem dependencies file at gem.deps.rb',
1881
- e.message
1882
- end
1883
-
1884
- def test_use_gemdeps_argument_missing_match_ENV
1885
- with_rubygems_gemdeps('gem.deps.rb') do
1886
- e = assert_raise ArgumentError do
1887
- Gem.use_gemdeps 'gem.deps.rb'
1888
- end
1889
-
1890
- assert_equal 'Unable to find gem dependencies file at gem.deps.rb',
1891
- e.message
1892
- end
1893
- end
1894
-
1895
- def test_use_gemdeps_automatic
1896
- with_rubygems_gemdeps('-') do
1897
- spec = util_spec 'a', 1
1898
- install_specs spec
1899
- spec = Gem::Specification.find {|s| s == spec }
1900
-
1901
- refute spec.activated?
1902
-
1903
- File.open 'Gemfile', 'w' do |io|
1904
- io.write 'gem "a"'
1905
- end
1906
-
1907
- Gem.use_gemdeps
1908
-
1909
- assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1910
- end
1911
- end
1912
-
1913
- def test_use_gemdeps_automatic_missing
1914
- with_rubygems_gemdeps('-') do
1915
- Gem.use_gemdeps
1916
-
1917
- assert true # count
1918
- end
1919
- end
1920
-
1921
- def test_use_gemdeps_disabled
1922
- with_rubygems_gemdeps('') do
1923
- spec = util_spec 'a', 1
1924
-
1925
- refute spec.activated?
1926
-
1927
- File.open 'gem.deps.rb', 'w' do |io|
1928
- io.write 'gem "a"'
1929
- end
1930
-
1931
- Gem.use_gemdeps
1932
-
1933
- refute spec.activated?
1934
- end
1935
- end
1936
-
1937
- def test_use_gemdeps_missing_gem
1938
- with_rubygems_gemdeps('x') do
1939
- File.open 'x', 'w' do |io|
1940
- io.write 'gem "a"'
1941
- end
1942
-
1943
- expected = <<-EXPECTED
1944
- Could not find gem 'a' in locally installed gems.
1945
- You may need to `bundle install` to install missing gems
1946
-
1947
- EXPECTED
1948
-
1949
- Gem::Deprecate.skip_during do
1950
- actual_stdout, actual_stderr = capture_output do
1951
- Gem.use_gemdeps
1952
- end
1953
- assert_empty actual_stdout
1954
- assert_equal(expected, actual_stderr)
1955
- end
1956
- end
1957
- end
1958
-
1959
- def test_use_gemdeps_specific
1960
- with_rubygems_gemdeps('x') do
1961
- spec = util_spec 'a', 1
1962
- install_specs spec
1963
-
1964
- spec = Gem::Specification.find {|s| s == spec }
1965
- refute spec.activated?
1966
-
1967
- File.open 'x', 'w' do |io|
1968
- io.write 'gem "a"'
1969
- end
1970
-
1971
- Gem.use_gemdeps
1972
-
1973
- assert_equal add_bundler_full_name(%W[a-1]), loaded_spec_names
1974
- end
1975
- end
1976
-
1977
- def test_operating_system_defaults
1978
- operating_system_defaults = Gem.operating_system_defaults
1979
-
1980
- assert operating_system_defaults != nil
1981
- assert operating_system_defaults.is_a? Hash
1982
- end
1983
-
1984
- def test_platform_defaults
1985
- platform_defaults = Gem.platform_defaults
1986
-
1987
- assert platform_defaults != nil
1988
- assert platform_defaults.is_a? Hash
1989
- end
1990
-
1991
- # Ensure that `Gem.source_date_epoch` is consistent even if
1992
- # $SOURCE_DATE_EPOCH has not been set.
1993
- def test_default_source_date_epoch_doesnt_change
1994
- old_epoch = ENV['SOURCE_DATE_EPOCH']
1995
- ENV['SOURCE_DATE_EPOCH'] = nil
1996
-
1997
- # Unfortunately, there is no real way to test this aside from waiting
1998
- # enough for `Time.now.to_i` to change -- which is a whole second.
1999
- #
2000
- # Fortunately, we only need to do this once.
2001
- a = Gem.source_date_epoch
2002
- sleep 1
2003
- b = Gem.source_date_epoch
2004
- assert_equal a, b
2005
- ensure
2006
- ENV['SOURCE_DATE_EPOCH'] = old_epoch
2007
- end
2008
-
2009
- private
2010
-
2011
- def ruby_install_name(name)
2012
- with_clean_path_to_ruby do
2013
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
2014
- RbConfig::CONFIG['ruby_install_name'] = name
2015
-
2016
- begin
2017
- yield
2018
- ensure
2019
- if orig_RUBY_INSTALL_NAME
2020
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
2021
- else
2022
- RbConfig::CONFIG.delete 'ruby_install_name'
2023
- end
2024
- end
2025
- end
2026
- end
2027
-
2028
- def with_rb_config_ruby(path)
2029
- rb_config_singleton_class = class << RbConfig; self; end
2030
- orig_path = RbConfig.ruby
2031
-
2032
- redefine_method(rb_config_singleton_class, :ruby, path)
2033
-
2034
- yield
2035
- ensure
2036
- redefine_method(rb_config_singleton_class, :ruby, orig_path)
2037
- end
2038
-
2039
- def redefine_method(base, method, new_result)
2040
- if RUBY_VERSION >= "2.5"
2041
- base.alias_method(method, method)
2042
- base.define_method(method) { new_result }
2043
- else
2044
- base.send(:alias_method, method, method)
2045
- base.send(:define_method, method) { new_result }
2046
- end
2047
- end
2048
-
2049
- def with_plugin(path)
2050
- test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
2051
- PROJECT_DIR)
2052
-
2053
- # A single test plugin should get loaded once only, in order to preserve
2054
- # sane test semantics.
2055
- refute_includes $LOAD_PATH, test_plugin_path
2056
- $LOAD_PATH.unshift test_plugin_path
2057
-
2058
- capture_output do
2059
- yield
2060
- end
2061
- ensure
2062
- $LOAD_PATH.delete test_plugin_path
2063
- end
2064
-
2065
- def util_ensure_gem_dirs
2066
- Gem.ensure_gem_subdirectories @gemhome
2067
-
2068
- #
2069
- # FIXME what does this solve precisely? -ebh
2070
- #
2071
- @additional.each do |dir|
2072
- Gem.ensure_gem_subdirectories @gemhome
2073
- end
2074
- end
2075
-
2076
- def util_exec_gem
2077
- spec, _ = util_spec 'a', '4' do |s|
2078
- s.executables = ['exec', 'abin']
2079
- end
2080
-
2081
- @exec_path = File.join spec.full_gem_path, spec.bindir, 'exec'
2082
- @abin_path = File.join spec.full_gem_path, spec.bindir, 'abin'
2083
- spec
2084
- end
2085
-
2086
- def util_remove_interrupt_command
2087
- Gem::Commands.send :remove_const, :InterruptCommand if
2088
- Gem::Commands.const_defined? :InterruptCommand
2089
- end
2090
-
2091
- def util_cache_dir
2092
- File.join Gem.dir, "cache"
2093
- end
2094
-
2095
- def with_path_and_rubyopt(path_value, rubyopt_value)
2096
- path, ENV['PATH'] = ENV['PATH'], path_value
2097
- rubyopt, ENV['RUBYOPT'] = ENV['RUBYOPT'], rubyopt_value
2098
-
2099
- yield
2100
- ensure
2101
- ENV['PATH'] = path
2102
- ENV['RUBYOPT'] = rubyopt
2103
- end
2104
-
2105
- def with_rubygems_gemdeps(value)
2106
- rubygems_gemdeps, ENV['RUBYGEMS_GEMDEPS'] = ENV['RUBYGEMS_GEMDEPS'], value
2107
-
2108
- yield
2109
- ensure
2110
- ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
2111
- end
2112
- end