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,1553 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/install_command'
4
- require 'rubygems/request_set'
5
- require 'rubygems/rdoc'
6
-
7
- class TestGemCommandsInstallCommand < Gem::TestCase
8
- def setup
9
- super
10
- common_installer_setup
11
-
12
- @cmd = Gem::Commands::InstallCommand.new
13
- @cmd.options[:document] = []
14
-
15
- @gemdeps = "tmp_install_gemdeps"
16
- @orig_args = Gem::Command.build_args
17
-
18
- common_installer_setup
19
- end
20
-
21
- def teardown
22
- super
23
-
24
- common_installer_teardown
25
-
26
- Gem::Command.build_args = @orig_args
27
- File.unlink @gemdeps if File.file? @gemdeps
28
- File.unlink "#{@gemdeps}.lock" if File.file? "#{@gemdeps}.lock"
29
- end
30
-
31
- def test_execute_exclude_prerelease
32
- spec_fetcher do |fetcher|
33
- fetcher.gem 'a', 2
34
- fetcher.gem 'a', '2.pre'
35
- end
36
-
37
- @cmd.options[:args] = %w[a]
38
-
39
- use_ui @ui do
40
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
41
- @cmd.execute
42
- end
43
- end
44
-
45
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
46
- end
47
-
48
- def test_execute_explicit_version_includes_prerelease
49
- specs = spec_fetcher do |fetcher|
50
- fetcher.gem 'a', 2
51
- fetcher.gem 'a', '2.a'
52
- end
53
-
54
- a2_pre = specs['a-2.a']
55
-
56
- @cmd.handle_options [a2_pre.name, '--version', a2_pre.version.to_s,
57
- "--no-document"]
58
- assert @cmd.options[:prerelease]
59
- assert @cmd.options[:version].satisfied_by?(a2_pre.version)
60
-
61
- use_ui @ui do
62
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
63
- @cmd.execute
64
- end
65
- end
66
-
67
- assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
68
- end
69
-
70
- def test_execute_local
71
- specs = spec_fetcher do |fetcher|
72
- fetcher.gem 'a', 2
73
- end
74
-
75
- @cmd.options[:domain] = :local
76
-
77
- FileUtils.mv specs['a-2'].cache_file, @tempdir
78
-
79
- @cmd.options[:args] = %w[a]
80
-
81
- use_ui @ui do
82
- orig_dir = Dir.pwd
83
- begin
84
- Dir.chdir @tempdir
85
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
86
- @cmd.execute
87
- end
88
- ensure
89
- Dir.chdir orig_dir
90
- end
91
- end
92
-
93
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
94
-
95
- assert_match "1 gem installed", @ui.output
96
- end
97
-
98
- def test_execute_local_dependency_nonexistent
99
- specs = spec_fetcher do |fetcher|
100
- fetcher.gem 'foo', 2, 'bar' => '0.5'
101
- end
102
-
103
- @cmd.options[:domain] = :local
104
-
105
- FileUtils.mv specs['foo-2'].cache_file, @tempdir
106
-
107
- @cmd.options[:args] = ['foo']
108
-
109
- use_ui @ui do
110
- orig_dir = Dir.pwd
111
- begin
112
- Dir.chdir @tempdir
113
- e = assert_raise Gem::MockGemUi::TermError do
114
- @cmd.execute
115
- end
116
- assert_equal 2, e.exit_code
117
- ensure
118
- Dir.chdir orig_dir
119
- end
120
- end
121
-
122
- expected = <<-EXPECTED
123
- ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
124
- EXPECTED
125
-
126
- assert_equal expected, @ui.error
127
- end
128
-
129
- def test_execute_local_dependency_nonexistent_ignore_dependencies
130
- specs = spec_fetcher do |fetcher|
131
- fetcher.gem 'foo', 2, 'bar' => '0.5'
132
- end
133
-
134
- @cmd.options[:domain] = :local
135
- @cmd.options[:ignore_dependencies] = true
136
-
137
- FileUtils.mv specs['foo-2'].cache_file, @tempdir
138
-
139
- @cmd.options[:args] = ['foo']
140
-
141
- use_ui @ui do
142
- orig_dir = Dir.pwd
143
- begin
144
- Dir.chdir orig_dir
145
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
146
- @cmd.execute
147
- end
148
- ensure
149
- Dir.chdir orig_dir
150
- end
151
- end
152
-
153
- assert_match "1 gem installed", @ui.output
154
- end
155
-
156
- def test_execute_local_transitive_prerelease
157
- specs = spec_fetcher do |fetcher|
158
- fetcher.download 'a', 2, 'b' => "2.a", 'c' => '3'
159
- fetcher.download 'b', '2.a'
160
- fetcher.download 'c', '3'
161
- end
162
-
163
- @cmd.options[:domain] = :local
164
-
165
- FileUtils.mv specs['a-2'].cache_file, @tempdir
166
- FileUtils.mv specs['b-2.a'].cache_file, @tempdir
167
- FileUtils.mv specs['c-3'].cache_file, @tempdir
168
-
169
- @cmd.options[:args] = %w[a]
170
-
171
- use_ui @ui do
172
- orig_dir = Dir.pwd
173
- begin
174
- Dir.chdir @tempdir
175
- FileUtils.rm_r [@gemhome, "gems"]
176
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
177
- @cmd.execute
178
- end
179
- ensure
180
- Dir.chdir orig_dir
181
- end
182
- end
183
-
184
- assert_equal %w[a-2 b-2.a c-3], @cmd.installed_specs.map {|spec| spec.full_name }.sort
185
-
186
- assert_match "3 gems installed", @ui.output
187
- end
188
-
189
- def test_execute_no_user_install
190
- pend 'skipped on MS Windows (chmod has no effect)' if win_platform?
191
- pend 'skipped in root privilege' if Process.uid.zero?
192
-
193
- specs = spec_fetcher do |fetcher|
194
- fetcher.gem 'a', 2
195
- end
196
-
197
- @cmd.options[:user_install] = false
198
-
199
- FileUtils.mv specs['a-2'].cache_file, @tempdir
200
-
201
- @cmd.options[:args] = %w[a]
202
-
203
- use_ui @ui do
204
- orig_dir = Dir.pwd
205
- begin
206
- FileUtils.chmod 0755, @userhome
207
- FileUtils.chmod 0555, @gemhome
208
-
209
- Dir.chdir @tempdir
210
- assert_raise Gem::FilePermissionError do
211
- @cmd.execute
212
- end
213
- ensure
214
- Dir.chdir orig_dir
215
- FileUtils.chmod 0755, @gemhome
216
- end
217
- end
218
- end
219
-
220
- def test_execute_local_missing
221
- spec_fetcher
222
-
223
- @cmd.options[:domain] = :local
224
-
225
- @cmd.options[:args] = %w[no_such_gem]
226
-
227
- use_ui @ui do
228
- e = assert_raise Gem::MockGemUi::TermError do
229
- @cmd.execute
230
- end
231
- assert_equal 2, e.exit_code
232
- end
233
-
234
- # HACK no repository was checked
235
- assert_match(/ould not find a valid gem 'no_such_gem'/, @ui.error)
236
- end
237
-
238
- def test_execute_local_missing_ignore_dependencies
239
- spec_fetcher
240
-
241
- @cmd.options[:domain] = :local
242
- @cmd.options[:ignore_dependencies] = true
243
-
244
- @cmd.options[:args] = %w[no_such_gem]
245
-
246
- use_ui @ui do
247
- e = assert_raise Gem::MockGemUi::TermError do
248
- @cmd.execute
249
- end
250
- assert_equal 2, e.exit_code
251
- end
252
-
253
- # HACK no repository was checked
254
- assert_match(/ould not find a valid gem 'no_such_gem'/, @ui.error)
255
- end
256
-
257
- def test_execute_no_gem
258
- @cmd.options[:args] = %w[]
259
-
260
- assert_raise Gem::CommandLineError do
261
- @cmd.execute
262
- end
263
- end
264
-
265
- def test_execute_nonexistent
266
- spec_fetcher
267
-
268
- @cmd.options[:args] = %w[nonexistent]
269
-
270
- use_ui @ui do
271
- e = assert_raise Gem::MockGemUi::TermError do
272
- @cmd.execute
273
- end
274
- assert_equal 2, e.exit_code
275
- end
276
-
277
- assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
278
- end
279
-
280
- def test_execute_nonexistent_force
281
- spec_fetcher
282
-
283
- @cmd.options[:args] = %w[nonexistent]
284
- @cmd.options[:force] = true
285
-
286
- use_ui @ui do
287
- e = assert_raise Gem::MockGemUi::TermError do
288
- @cmd.execute
289
- end
290
- assert_equal 2, e.exit_code
291
- end
292
-
293
- assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
294
- end
295
-
296
- def test_execute_dependency_nonexistent
297
- spec_fetcher do |fetcher|
298
- fetcher.spec 'foo', 2, 'bar' => '0.5'
299
- end
300
-
301
- @cmd.options[:args] = ['foo']
302
-
303
- use_ui @ui do
304
- e = assert_raise Gem::MockGemUi::TermError do
305
- @cmd.execute
306
- end
307
-
308
- assert_equal 2, e.exit_code
309
- end
310
-
311
- expected = <<-EXPECTED
312
- ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in any repository
313
- EXPECTED
314
-
315
- assert_equal expected, @ui.error
316
- end
317
-
318
- def test_execute_http_proxy
319
- use_ui @ui do
320
- e = assert_raise ArgumentError, @ui.error do
321
- @cmd.handle_options %w[-p=foo.bar.com]
322
- end
323
-
324
- assert_match "Invalid uri scheme for =foo.bar.com\nPreface URLs with one of [\"http://\", \"https://\", \"file://\", \"s3://\"]", e.message
325
- end
326
- end
327
-
328
- def test_execute_bad_source
329
- spec_fetcher
330
-
331
- # This is needed because we need to exercise the cache path
332
- # within SpecFetcher
333
- path = File.join Gem.spec_cache_dir, "not-there.nothing%80", "latest_specs.4.8"
334
-
335
- FileUtils.mkdir_p File.dirname(path)
336
-
337
- File.open path, "w" do |f|
338
- f.write Marshal.dump([])
339
- end
340
-
341
- Gem.sources.replace ["http://not-there.nothing"]
342
-
343
- @cmd.options[:args] = %w[nonexistent]
344
-
345
- use_ui @ui do
346
- e = assert_raise Gem::MockGemUi::TermError do
347
- @cmd.execute
348
- end
349
- assert_equal 2, e.exit_code
350
- end
351
-
352
- errs = @ui.error.split("\n")
353
-
354
- assert_match(/ould not find a valid gem 'nonexistent'/, errs.shift)
355
- assert_match(%r{Unable to download data from http://not-there.nothing}, errs.shift)
356
- end
357
-
358
- def test_execute_nonexistent_hint_disabled
359
- misspelled = "nonexistent_with_hint"
360
- correctly_spelled = "non_existent_with_hint"
361
-
362
- spec_fetcher do |fetcher|
363
- fetcher.spec correctly_spelled, 2
364
- end
365
-
366
- @cmd.options[:args] = [misspelled]
367
- @cmd.options[:suggest_alternate] = false
368
-
369
- use_ui @ui do
370
- e = assert_raise Gem::MockGemUi::TermError do
371
- @cmd.execute
372
- end
373
-
374
- assert_equal 2, e.exit_code
375
- end
376
-
377
- expected = <<-EXPECTED
378
- ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any repository
379
- EXPECTED
380
-
381
- assert_equal expected, @ui.error
382
- end
383
-
384
- def test_execute_nonexistent_with_hint
385
- misspelled = "nonexistent_with_hint"
386
- correctly_spelled = "non_existent_with_hint"
387
-
388
- spec_fetcher do |fetcher|
389
- fetcher.spec correctly_spelled, 2
390
- end
391
-
392
- @cmd.options[:args] = [misspelled]
393
-
394
- use_ui @ui do
395
- e = assert_raise Gem::MockGemUi::TermError do
396
- @cmd.execute
397
- end
398
-
399
- assert_equal 2, e.exit_code
400
- end
401
-
402
- expected = "ERROR: Could not find a valid gem 'nonexistent_with_hint' (>= 0) in any repository
403
- ERROR: Possible alternatives: non_existent_with_hint
404
- "
405
-
406
- assert_equal expected, @ui.error
407
- end
408
-
409
- def test_execute_nonexistent_with_dashes
410
- misspelled = "non-existent_with-hint"
411
- correctly_spelled = "nonexistent-with_hint"
412
-
413
- spec_fetcher do |fetcher|
414
- fetcher.download correctly_spelled, 2
415
- end
416
-
417
- @cmd.options[:args] = [misspelled]
418
-
419
- use_ui @ui do
420
- e = assert_raise Gem::MockGemUi::TermError do
421
- @cmd.execute
422
- end
423
-
424
- assert_equal 2, e.exit_code
425
- end
426
-
427
- expected = [
428
- "ERROR: Could not find a valid gem 'non-existent_with-hint' (>= 0) in any repository",
429
- "ERROR: Possible alternatives: nonexistent-with_hint",
430
- ]
431
-
432
- output = @ui.error.split "\n"
433
-
434
- assert_equal expected, output
435
- end
436
-
437
- def test_execute_conflicting_install_options
438
- @cmd.options[:user_install] = true
439
- @cmd.options[:install_dir] = "whatever"
440
-
441
- use_ui @ui do
442
- assert_raise Gem::MockGemUi::TermError do
443
- @cmd.execute
444
- end
445
- end
446
-
447
- expected = "ERROR: Use --install-dir or --user-install but not both\n"
448
-
449
- assert_equal expected, @ui.error
450
- end
451
-
452
- def test_execute_prerelease_skipped_when_no_flag_set
453
- spec_fetcher do |fetcher|
454
- fetcher.gem 'a', 1
455
- fetcher.gem 'a', '3.a'
456
- end
457
-
458
- @cmd.options[:prerelease] = false
459
- @cmd.options[:args] = %w[a]
460
-
461
- use_ui @ui do
462
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
463
- @cmd.execute
464
- end
465
- end
466
-
467
- assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
468
- end
469
-
470
- def test_execute_prerelease_wins_over_previous_ver
471
- spec_fetcher do |fetcher|
472
- fetcher.download 'a', 1
473
- fetcher.download 'a', '2.a'
474
- end
475
-
476
- @cmd.options[:prerelease] = true
477
- @cmd.options[:args] = %w[a]
478
-
479
- use_ui @ui do
480
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
481
- @cmd.execute
482
- end
483
- end
484
-
485
- assert_equal %w[a-2.a], @cmd.installed_specs.map {|spec| spec.full_name }
486
- end
487
-
488
- def test_execute_with_version_specified_by_colon
489
- spec_fetcher do |fetcher|
490
- fetcher.download 'a', 1
491
- fetcher.download 'a', 2
492
- end
493
-
494
- @cmd.options[:args] = %w[a:1]
495
-
496
- use_ui @ui do
497
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
498
- @cmd.execute
499
- end
500
- end
501
-
502
- assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
503
- end
504
-
505
- def test_execute_prerelease_skipped_when_non_pre_available
506
- spec_fetcher do |fetcher|
507
- fetcher.gem 'a', '2.pre'
508
- fetcher.gem 'a', 2
509
- end
510
-
511
- @cmd.options[:prerelease] = true
512
- @cmd.options[:args] = %w[a]
513
-
514
- use_ui @ui do
515
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
516
- @cmd.execute
517
- end
518
- end
519
-
520
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
521
- end
522
-
523
- def test_execute_required_ruby_version
524
- next_ruby = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".")
525
-
526
- local = Gem::Platform.local
527
- spec_fetcher do |fetcher|
528
- fetcher.download 'a', 2
529
- fetcher.download 'a', 2 do |s|
530
- s.required_ruby_version = "< #{RUBY_VERSION}.a"
531
- s.platform = local
532
- end
533
- fetcher.download 'a', 3 do |s|
534
- s.required_ruby_version = ">= #{next_ruby}"
535
- end
536
- fetcher.download 'a', 3 do |s|
537
- s.required_ruby_version = ">= #{next_ruby}"
538
- s.platform = local
539
- end
540
- end
541
-
542
- @cmd.options[:args] = %w[a]
543
-
544
- use_ui @ui do
545
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
546
- @cmd.execute
547
- end
548
- end
549
-
550
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
551
- end
552
-
553
- def test_execute_required_ruby_version_upper_bound
554
- local = Gem::Platform.local
555
- spec_fetcher do |fetcher|
556
- fetcher.gem 'a', 2.0
557
- fetcher.gem 'a', 2.0 do |s|
558
- s.required_ruby_version = "< #{RUBY_VERSION}.a"
559
- s.platform = local
560
- end
561
- end
562
-
563
- @cmd.options[:args] = %w[a]
564
-
565
- use_ui @ui do
566
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
567
- @cmd.execute
568
- end
569
- end
570
-
571
- assert_equal %w[a-2.0], @cmd.installed_specs.map {|spec| spec.full_name }
572
- end
573
-
574
- def test_execute_required_ruby_version_specific_not_met
575
- spec_fetcher do |fetcher|
576
- fetcher.gem 'a', '1.0' do |s|
577
- s.required_ruby_version = '= 1.4.6'
578
- end
579
- end
580
-
581
- @cmd.options[:args] = %w[a]
582
-
583
- use_ui @ui do
584
- assert_raise Gem::MockGemUi::TermError do
585
- @cmd.execute
586
- end
587
- end
588
-
589
- errs = @ui.error.split("\n")
590
- assert_equal "ERROR: Error installing a:", errs.shift
591
- assert_equal "\ta-1.0 requires Ruby version = 1.4.6. The current ruby version is #{Gem.ruby_version}.", errs.shift
592
- end
593
-
594
- def test_execute_required_ruby_version_specific_prerelease_met
595
- spec_fetcher do |fetcher|
596
- fetcher.gem 'a', '1.0' do |s|
597
- s.required_ruby_version = '>= 1.4.6.preview2'
598
- end
599
- end
600
-
601
- @cmd.options[:args] = %w[a]
602
-
603
- use_ui @ui do
604
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
605
- @cmd.execute
606
- end
607
- end
608
-
609
- assert_equal %w[a-1.0], @cmd.installed_specs.map {|spec| spec.full_name }
610
- end
611
-
612
- def test_execute_required_ruby_version_specific_prerelease_not_met
613
- next_ruby_pre = Gem.ruby_version.segments.map.with_index {|n, i| i == 1 ? n + 1 : n }.join(".") + ".a"
614
-
615
- spec_fetcher do |fetcher|
616
- fetcher.gem 'a', '1.0' do |s|
617
- s.required_ruby_version = "> #{next_ruby_pre}"
618
- end
619
- end
620
-
621
- @cmd.options[:args] = %w[a]
622
-
623
- use_ui @ui do
624
- assert_raise Gem::MockGemUi::TermError do
625
- @cmd.execute
626
- end
627
- end
628
-
629
- errs = @ui.error.split("\n")
630
- assert_equal "ERROR: Error installing a:", errs.shift
631
- assert_equal "\ta-1.0 requires Ruby version > #{next_ruby_pre}. The current ruby version is #{Gem.ruby_version}.", errs.shift
632
- end
633
-
634
- def test_execute_required_rubygems_version_wrong
635
- spec_fetcher do |fetcher|
636
- fetcher.gem 'a', '1.0' do |s|
637
- s.required_rubygems_version = '< 0'
638
- end
639
- end
640
-
641
- @cmd.options[:args] = %w[a]
642
-
643
- use_ui @ui do
644
- assert_raise Gem::MockGemUi::TermError do
645
- @cmd.execute
646
- end
647
- end
648
-
649
- errs = @ui.error.split("\n")
650
- assert_equal "ERROR: Error installing a:", errs.shift
651
- assert_equal "\ta-1.0 requires RubyGems version < 0. The current RubyGems version is #{Gem.rubygems_version}. Try 'gem update --system' to update RubyGems itself.", errs.shift
652
- end
653
-
654
- def test_execute_rdoc
655
- specs = spec_fetcher do |fetcher|
656
- fetcher.gem 'a', 2
657
- end
658
-
659
- Gem.done_installing(&Gem::RDoc.method(:generation_hook))
660
-
661
- @cmd.options[:document] = %w[rdoc ri]
662
- @cmd.options[:domain] = :local
663
-
664
- a2 = specs['a-2']
665
- FileUtils.mv a2.cache_file, @tempdir
666
-
667
- @cmd.options[:args] = %w[a]
668
-
669
- use_ui @ui do
670
- # Don't use Dir.chdir with a block, it warnings a lot because
671
- # of a downstream Dir.chdir with a block
672
- old = Dir.getwd
673
-
674
- begin
675
- Dir.chdir @tempdir
676
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
677
- @cmd.execute
678
- end
679
- ensure
680
- Dir.chdir old
681
- end
682
- end
683
-
684
- wait_for_child_process_to_exit
685
-
686
- assert_path_exist File.join(a2.doc_dir, 'ri')
687
- assert_path_exist File.join(a2.doc_dir, 'rdoc')
688
- end
689
-
690
- def test_execute_rdoc_with_path
691
- specs = spec_fetcher do |fetcher|
692
- fetcher.gem 'a', 2
693
- end
694
-
695
- Gem.done_installing(&Gem::RDoc.method(:generation_hook))
696
-
697
- @cmd.options[:document] = %w[rdoc ri]
698
- @cmd.options[:domain] = :local
699
- @cmd.options[:install_dir] = 'whatever'
700
-
701
- a2 = specs['a-2']
702
- FileUtils.mv a2.cache_file, @tempdir
703
-
704
- @cmd.options[:args] = %w[a]
705
-
706
- use_ui @ui do
707
- # Don't use Dir.chdir with a block, it warnings a lot because
708
- # of a downstream Dir.chdir with a block
709
- old = Dir.getwd
710
-
711
- begin
712
- Dir.chdir @tempdir
713
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
714
- @cmd.execute
715
- end
716
- ensure
717
- Dir.chdir old
718
- end
719
- end
720
-
721
- wait_for_child_process_to_exit
722
-
723
- assert_path_exist 'whatever/doc/a-2', 'documentation not installed'
724
- end
725
-
726
- def test_execute_saves_build_args
727
- specs = spec_fetcher do |fetcher|
728
- fetcher.gem 'a', 2
729
- end
730
-
731
- args = %w[--with-awesome=true --more-awesome=yes]
732
-
733
- Gem::Command.build_args = args
734
-
735
- a2 = specs['a-2']
736
- FileUtils.mv a2.cache_file, @tempdir
737
-
738
- @cmd.options[:domain] = :local
739
-
740
- @cmd.options[:args] = %w[a]
741
-
742
- use_ui @ui do
743
- # Don't use Dir.chdir with a block, it warnings a lot because
744
- # of a downstream Dir.chdir with a block
745
- old = Dir.getwd
746
-
747
- begin
748
- Dir.chdir @tempdir
749
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
750
- @cmd.execute
751
- end
752
- ensure
753
- Dir.chdir old
754
- end
755
- end
756
-
757
- path = a2.build_info_file
758
- assert_path_exist path
759
-
760
- assert_equal args, a2.build_args
761
- end
762
-
763
- def test_execute_remote
764
- spec_fetcher do |fetcher|
765
- fetcher.gem 'a', 2
766
- end
767
-
768
- @cmd.options[:args] = %w[a]
769
-
770
- use_ui @ui do
771
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
772
- @cmd.execute
773
- end
774
- end
775
-
776
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
777
-
778
- assert_match "1 gem installed", @ui.output
779
- end
780
-
781
- def test_execute_with_invalid_gem_file
782
- FileUtils.touch("a.gem")
783
-
784
- spec_fetcher do |fetcher|
785
- fetcher.gem 'a', 2
786
- end
787
-
788
- @cmd.options[:args] = %w[a]
789
-
790
- use_ui @ui do
791
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
792
- @cmd.execute
793
- end
794
- end
795
-
796
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
797
-
798
- assert_match "1 gem installed", @ui.output
799
- end
800
-
801
- def test_execute_remote_truncates_existing_gemspecs
802
- spec_fetcher do |fetcher|
803
- fetcher.gem 'a', 1
804
- end
805
-
806
- @cmd.options[:domain] = :remote
807
-
808
- @cmd.options[:args] = %w[a]
809
-
810
- use_ui @ui do
811
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
812
- @cmd.execute
813
- end
814
- end
815
-
816
- assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
817
- assert_match "1 gem installed", @ui.output
818
-
819
- a1_gemspec = File.join(@gemhome, 'specifications', "a-1.gemspec")
820
-
821
- initial_a1_gemspec_content = File.read(a1_gemspec)
822
- modified_a1_gemspec_content = initial_a1_gemspec_content + "\n # AAAAAAA\n"
823
- File.write(a1_gemspec, modified_a1_gemspec_content)
824
-
825
- use_ui @ui do
826
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
827
- @cmd.execute
828
- end
829
- end
830
-
831
- assert_equal initial_a1_gemspec_content, File.read(a1_gemspec)
832
- end
833
-
834
- def test_execute_remote_ignores_files
835
- specs = spec_fetcher do |fetcher|
836
- fetcher.gem 'a', 1
837
- fetcher.gem 'a', 2
838
- end
839
-
840
- @cmd.options[:domain] = :remote
841
-
842
- a1 = specs['a-1']
843
- a2 = specs['a-2']
844
-
845
- FileUtils.mv a2.cache_file, @tempdir
846
-
847
- @fetcher.data["#{@gem_repo}gems/#{a2.file_name}"] =
848
- read_binary(a1.cache_file)
849
-
850
- @cmd.options[:args] = [a2.name]
851
-
852
- gemdir = File.join @gemhome, 'specifications'
853
-
854
- a2_gemspec = File.join(gemdir, "a-2.gemspec")
855
- a1_gemspec = File.join(gemdir, "a-1.gemspec")
856
-
857
- FileUtils.rm_rf a1_gemspec
858
- FileUtils.rm_rf a2_gemspec
859
-
860
- start = Dir["#{gemdir}/*"]
861
-
862
- use_ui @ui do
863
- Dir.chdir @tempdir do
864
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
865
- @cmd.execute
866
- end
867
- end
868
- end
869
-
870
- assert_equal %w[a-1], @cmd.installed_specs.map {|spec| spec.full_name }
871
-
872
- assert_match "1 gem installed", @ui.output
873
-
874
- fin = Dir["#{gemdir}/*"]
875
-
876
- assert_equal [a1_gemspec], fin - start
877
- end
878
-
879
- def test_execute_two
880
- specs = spec_fetcher do |fetcher|
881
- fetcher.gem 'a', 2
882
- fetcher.gem 'b', 2
883
- end
884
-
885
- FileUtils.mv specs['a-2'].cache_file, @tempdir
886
- FileUtils.mv specs['b-2'].cache_file, @tempdir
887
-
888
- @cmd.options[:domain] = :local
889
-
890
- @cmd.options[:args] = %w[a b]
891
-
892
- use_ui @ui do
893
- orig_dir = Dir.pwd
894
- begin
895
- Dir.chdir @tempdir
896
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
897
- @cmd.execute
898
- end
899
- ensure
900
- Dir.chdir orig_dir
901
- end
902
- end
903
-
904
- assert_equal %w[a-2 b-2], @cmd.installed_specs.map {|spec| spec.full_name }
905
-
906
- assert_match "2 gems installed", @ui.output
907
- end
908
-
909
- def test_execute_two_version
910
- @cmd.options[:args] = %w[a b]
911
- @cmd.options[:version] = Gem::Requirement.new("> 1")
912
-
913
- use_ui @ui do
914
- e = assert_raise Gem::MockGemUi::TermError do
915
- @cmd.execute
916
- end
917
-
918
- assert_equal 1, e.exit_code
919
- end
920
-
921
- assert_empty @cmd.installed_specs
922
-
923
- msg = "ERROR: Can't use --version with multiple gems. You can specify multiple gems with" \
924
- " version requirements using `gem install 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
925
-
926
- assert_empty @ui.output
927
- assert_equal msg, @ui.error.chomp
928
- end
929
-
930
- def test_execute_two_version_specified_by_colon
931
- spec_fetcher do |fetcher|
932
- fetcher.gem 'a', 1
933
- fetcher.gem 'a', 2
934
- fetcher.gem 'b', 1
935
- fetcher.gem 'b', 2
936
- end
937
-
938
- @cmd.options[:args] = %w[a:1 b:1]
939
-
940
- use_ui @ui do
941
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
942
- @cmd.execute
943
- end
944
- end
945
-
946
- assert_equal %w[a-1 b-1], @cmd.installed_specs.map {|spec| spec.full_name }
947
- end
948
-
949
- def test_execute_conservative
950
- spec_fetcher do |fetcher|
951
- fetcher.download 'b', 2
952
-
953
- fetcher.gem 'a', 2
954
- end
955
-
956
- @cmd.options[:conservative] = true
957
-
958
- @cmd.options[:args] = %w[a b]
959
-
960
- use_ui @ui do
961
- orig_dir = Dir.pwd
962
- begin
963
- Dir.chdir @tempdir
964
- assert_raise Gem::MockGemUi::SystemExitException do
965
- @cmd.execute
966
- end
967
- ensure
968
- Dir.chdir orig_dir
969
- end
970
- end
971
-
972
- assert_equal %w[b-2], @cmd.installed_specs.map {|spec| spec.full_name }
973
-
974
- assert_equal "", @ui.error
975
- assert_match "1 gem installed", @ui.output
976
- end
977
-
978
- def test_install_gem_ignore_dependencies_both
979
- done_installing = false
980
- Gem.done_installing do
981
- done_installing = true
982
- end
983
-
984
- spec = util_spec 'a', 2
985
-
986
- util_build_gem spec
987
-
988
- FileUtils.mv spec.cache_file, @tempdir
989
-
990
- @cmd.options[:ignore_dependencies] = true
991
-
992
- @cmd.install_gem 'a', '>= 0'
993
-
994
- assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
995
-
996
- assert done_installing, 'documentation was not generated'
997
- end
998
-
999
- def test_install_gem_ignore_dependencies_remote
1000
- spec_fetcher do |fetcher|
1001
- fetcher.gem 'a', 2
1002
- end
1003
-
1004
- @cmd.options[:ignore_dependencies] = true
1005
-
1006
- @cmd.install_gem 'a', '>= 0'
1007
-
1008
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1009
- end
1010
-
1011
- def test_install_gem_ignore_dependencies_remote_platform_local
1012
- local = Gem::Platform.local
1013
- spec_fetcher do |fetcher|
1014
- fetcher.gem 'a', 3
1015
-
1016
- fetcher.gem 'a', 3 do |s|
1017
- s.platform = local
1018
- end
1019
- end
1020
-
1021
- @cmd.options[:ignore_dependencies] = true
1022
-
1023
- @cmd.install_gem 'a', '>= 0'
1024
-
1025
- assert_equal %W[a-3-#{local}], @cmd.installed_specs.map {|spec| spec.full_name }
1026
- end
1027
-
1028
- def test_install_gem_ignore_dependencies_specific_file
1029
- spec = util_spec 'a', 2
1030
-
1031
- util_build_gem spec
1032
-
1033
- FileUtils.mv spec.cache_file, @tempdir
1034
-
1035
- @cmd.options[:ignore_dependencies] = true
1036
-
1037
- @cmd.install_gem File.join(@tempdir, spec.file_name), nil
1038
-
1039
- assert_equal %w[a-2], @cmd.installed_specs.map {|s| s.full_name }
1040
- end
1041
-
1042
- def test_parses_requirement_from_gemname
1043
- spec_fetcher do |fetcher|
1044
- fetcher.gem 'a', 2
1045
- fetcher.gem 'b', 2
1046
- end
1047
-
1048
- @cmd.options[:domain] = :local
1049
-
1050
- req = "a:10.0"
1051
-
1052
- @cmd.options[:args] = [req]
1053
-
1054
- e = nil
1055
- use_ui @ui do
1056
- orig_dir = Dir.pwd
1057
- begin
1058
- Dir.chdir @tempdir
1059
- e = assert_raise Gem::MockGemUi::TermError do
1060
- @cmd.execute
1061
- end
1062
- ensure
1063
- Dir.chdir orig_dir
1064
- end
1065
- end
1066
-
1067
- assert_equal 2, e.exit_code
1068
- assert_match %r{Could not find a valid gem 'a' \(= 10.0\)}, @ui.error
1069
- end
1070
-
1071
- def test_show_errors_on_failure
1072
- Gem.sources.replace ["http://not-there.nothing"]
1073
-
1074
- @cmd.options[:args] = ["blah"]
1075
-
1076
- e = nil
1077
- use_ui @ui do
1078
- orig_dir = Dir.pwd
1079
- begin
1080
- Dir.chdir @tempdir
1081
- e = assert_raise Gem::MockGemUi::TermError do
1082
- @cmd.execute
1083
- end
1084
- ensure
1085
- Dir.chdir orig_dir
1086
- end
1087
- end
1088
-
1089
- assert_equal 2, e.exit_code
1090
-
1091
- assert_match 'Unable to download data', @ui.error
1092
- end
1093
-
1094
- def test_show_source_problems_even_on_success
1095
- spec_fetcher do |fetcher|
1096
- fetcher.download 'a', 2
1097
- end
1098
-
1099
- Gem.sources << "http://nonexistent.example"
1100
-
1101
- @cmd.options[:args] = %w[a]
1102
-
1103
- use_ui @ui do
1104
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1105
- @cmd.execute
1106
- end
1107
- end
1108
-
1109
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1110
-
1111
- assert_match "1 gem installed", @ui.output
1112
-
1113
- e = @ui.error
1114
-
1115
- x = "WARNING: Unable to pull data from 'http://nonexistent.example': no data for http://nonexistent.example/specs.4.8.gz (http://nonexistent.example/specs.4.8.gz)\n"
1116
- assert_equal x, e
1117
- end
1118
-
1119
- def test_redact_credentials_from_uri_on_warning
1120
- spec_fetcher do |fetcher|
1121
- fetcher.download 'a', 2
1122
- end
1123
-
1124
- Gem.sources << "http://username:SECURE_TOKEN@nonexistent.example"
1125
-
1126
- @cmd.options[:args] = %w[a]
1127
-
1128
- use_ui @ui do
1129
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1130
- @cmd.execute
1131
- end
1132
- end
1133
-
1134
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1135
-
1136
- assert_match "1 gem installed", @ui.output
1137
-
1138
- e = @ui.error
1139
-
1140
- x = "WARNING: Unable to pull data from 'http://username:REDACTED@nonexistent.example': no data for http://username:REDACTED@nonexistent.example/specs.4.8.gz (http://username:REDACTED@nonexistent.example/specs.4.8.gz)\n"
1141
- assert_equal x, e
1142
- end
1143
-
1144
- def test_execute_uses_from_a_gemdeps
1145
- spec_fetcher do |fetcher|
1146
- fetcher.gem 'a', 2
1147
- end
1148
-
1149
- File.open @gemdeps, "w" do |f|
1150
- f << "gem 'a'"
1151
- end
1152
-
1153
- @cmd.options[:gemdeps] = @gemdeps
1154
-
1155
- use_ui @ui do
1156
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1157
- @cmd.execute
1158
- end
1159
- end
1160
-
1161
- assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
1162
-
1163
- assert_match "Using a (2)", @ui.output
1164
- assert File.exist?("#{@gemdeps}.lock")
1165
- end
1166
-
1167
- def test_execute_uses_from_a_gemdeps_with_no_lock
1168
- spec_fetcher do |fetcher|
1169
- fetcher.gem 'a', 2
1170
- end
1171
-
1172
- File.open @gemdeps, "w" do |f|
1173
- f << "gem 'a'"
1174
- end
1175
-
1176
- @cmd.handle_options %w[--no-lock]
1177
- @cmd.options[:gemdeps] = @gemdeps
1178
-
1179
- use_ui @ui do
1180
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1181
- @cmd.execute
1182
- end
1183
- end
1184
-
1185
- assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
1186
-
1187
- assert_match "Using a (2)", @ui.output
1188
- assert !File.exist?("#{@gemdeps}.lock")
1189
- end
1190
-
1191
- def test_execute_installs_from_a_gemdeps_with_conservative
1192
- spec_fetcher do |fetcher|
1193
- fetcher.download 'a', 2
1194
- fetcher.gem 'a', 1
1195
- end
1196
-
1197
- File.open @gemdeps, "w" do |f|
1198
- f << "gem 'a'"
1199
- end
1200
-
1201
- @cmd.handle_options %w[--conservative]
1202
- @cmd.options[:gemdeps] = @gemdeps
1203
-
1204
- use_ui @ui do
1205
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1206
- @cmd.execute
1207
- end
1208
- end
1209
-
1210
- assert_equal %w[], @cmd.installed_specs.map {|spec| spec.full_name }
1211
-
1212
- assert_match "Using a (1)", @ui.output
1213
- end
1214
-
1215
- def test_execute_installs_from_a_gemdeps
1216
- spec_fetcher do |fetcher|
1217
- fetcher.download 'a', 2
1218
- end
1219
-
1220
- File.open @gemdeps, "w" do |f|
1221
- f << "gem 'a'"
1222
- end
1223
-
1224
- @cmd.options[:gemdeps] = @gemdeps
1225
-
1226
- use_ui @ui do
1227
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1228
- @cmd.execute
1229
- end
1230
- end
1231
-
1232
- assert_equal %w[a-2], @cmd.installed_specs.map {|spec| spec.full_name }
1233
-
1234
- assert_match "Installing a (2)", @ui.output
1235
- end
1236
-
1237
- def test_execute_installs_deps_a_gemdeps
1238
- spec_fetcher do |fetcher|
1239
- fetcher.download 'q', '1.0'
1240
- fetcher.download 'r', '2.0', 'q' => nil
1241
- end
1242
-
1243
- File.open @gemdeps, "w" do |f|
1244
- f << "gem 'r'"
1245
- end
1246
-
1247
- @cmd.options[:gemdeps] = @gemdeps
1248
-
1249
- use_ui @ui do
1250
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1251
- @cmd.execute
1252
- end
1253
- end
1254
-
1255
- names = @cmd.installed_specs.map {|spec| spec.full_name }
1256
-
1257
- assert_equal %w[q-1.0 r-2.0], names
1258
-
1259
- assert_match "Installing q (1.0)", @ui.output
1260
- assert_match "Installing r (2.0)", @ui.output
1261
- end
1262
-
1263
- def test_execute_uses_deps_a_gemdeps
1264
- spec_fetcher do |fetcher|
1265
- fetcher.download 'r', '2.0', 'q' => nil
1266
-
1267
- fetcher.spec 'q', '1.0'
1268
- end
1269
-
1270
- File.open @gemdeps, "w" do |f|
1271
- f << "gem 'r'"
1272
- end
1273
-
1274
- @cmd.options[:gemdeps] = @gemdeps
1275
-
1276
- use_ui @ui do
1277
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1278
- @cmd.execute
1279
- end
1280
- end
1281
-
1282
- names = @cmd.installed_specs.map {|spec| spec.full_name }
1283
-
1284
- assert_equal %w[r-2.0], names
1285
-
1286
- assert_match "Using q (1.0)", @ui.output
1287
- assert_match "Installing r (2.0)", @ui.output
1288
- end
1289
-
1290
- def test_execute_installs_deps_a_gemdeps_into_a_path
1291
- spec_fetcher do |fetcher|
1292
- fetcher.download 'q', '1.0'
1293
- fetcher.download 'r', '2.0', 'q' => nil
1294
- end
1295
-
1296
- File.open @gemdeps, "w" do |f|
1297
- f << "gem 'r'"
1298
- end
1299
-
1300
- @cmd.options[:install_dir] = "gf-path"
1301
- @cmd.options[:gemdeps] = @gemdeps
1302
-
1303
- use_ui @ui do
1304
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1305
- @cmd.execute
1306
- end
1307
- end
1308
-
1309
- names = @cmd.installed_specs.map {|spec| spec.full_name }
1310
-
1311
- assert_equal %w[q-1.0 r-2.0], names
1312
-
1313
- assert_match "Installing q (1.0)", @ui.output
1314
- assert_match "Installing r (2.0)", @ui.output
1315
-
1316
- assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
1317
- assert File.file?("gf-path/specifications/r-2.0.gemspec"), "not installed"
1318
- end
1319
-
1320
- def test_execute_with_gemdeps_path_ignores_system
1321
- specs = spec_fetcher do |fetcher|
1322
- fetcher.download 'q', '1.0'
1323
- fetcher.download 'r', '2.0', 'q' => nil
1324
- end
1325
-
1326
- install_specs specs['q-1.0']
1327
-
1328
- File.open @gemdeps, "w" do |f|
1329
- f << "gem 'r'"
1330
- end
1331
-
1332
- @cmd.options[:install_dir] = "gf-path"
1333
- @cmd.options[:gemdeps] = @gemdeps
1334
-
1335
- use_ui @ui do
1336
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1337
- @cmd.execute
1338
- end
1339
- end
1340
-
1341
- names = @cmd.installed_specs.map {|spec| spec.full_name }
1342
-
1343
- assert_equal %w[q-1.0 r-2.0], names
1344
-
1345
- assert_match "Installing q (1.0)", @ui.output
1346
- assert_match "Installing r (2.0)", @ui.output
1347
-
1348
- assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
1349
- assert File.file?("gf-path/specifications/r-2.0.gemspec"), "not installed"
1350
- end
1351
-
1352
- def test_execute_uses_deps_a_gemdeps_with_a_path
1353
- specs = spec_fetcher do |fetcher|
1354
- fetcher.gem 'q', '1.0'
1355
- fetcher.gem 'r', '2.0', 'q' => nil
1356
- end
1357
-
1358
- i = Gem::Installer.at specs['q-1.0'].cache_file, :install_dir => "gf-path"
1359
- i.install
1360
-
1361
- assert File.file?("gf-path/specifications/q-1.0.gemspec"), "not installed"
1362
-
1363
- File.open @gemdeps, "w" do |f|
1364
- f << "gem 'r'"
1365
- end
1366
-
1367
- @cmd.options[:install_dir] = "gf-path"
1368
- @cmd.options[:gemdeps] = @gemdeps
1369
-
1370
- use_ui @ui do
1371
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1372
- @cmd.execute
1373
- end
1374
- end
1375
-
1376
- names = @cmd.installed_specs.map {|spec| spec.full_name }
1377
-
1378
- assert_equal %w[r-2.0], names
1379
-
1380
- assert_match "Using q (1.0)", @ui.output
1381
- assert_match "Installing r (2.0)", @ui.output
1382
- end
1383
-
1384
- def test_handle_options_file
1385
- FileUtils.touch 'Gemfile'
1386
-
1387
- @cmd.handle_options %w[-g Gemfile]
1388
-
1389
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1390
-
1391
- FileUtils.rm 'Gemfile'
1392
-
1393
- FileUtils.touch 'gem.deps.rb'
1394
-
1395
- @cmd.handle_options %w[--file gem.deps.rb]
1396
-
1397
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1398
-
1399
- FileUtils.rm 'gem.deps.rb'
1400
-
1401
- FileUtils.touch 'Isolate'
1402
-
1403
- @cmd.handle_options %w[-g]
1404
-
1405
- assert_equal 'Isolate', @cmd.options[:gemdeps]
1406
-
1407
- FileUtils.touch 'Gemfile'
1408
-
1409
- @cmd.handle_options %w[-g]
1410
-
1411
- assert_equal 'Gemfile', @cmd.options[:gemdeps]
1412
-
1413
- FileUtils.touch 'gem.deps.rb'
1414
-
1415
- @cmd.handle_options %w[-g]
1416
-
1417
- assert_equal 'gem.deps.rb', @cmd.options[:gemdeps]
1418
- end
1419
-
1420
- def test_handle_options_suggest
1421
- assert @cmd.options[:suggest_alternate]
1422
-
1423
- @cmd.handle_options %w[--no-suggestions]
1424
-
1425
- refute @cmd.options[:suggest_alternate]
1426
-
1427
- @cmd.handle_options %w[--suggestions]
1428
-
1429
- assert @cmd.options[:suggest_alternate]
1430
- end
1431
-
1432
- def test_handle_options_without
1433
- @cmd.handle_options %w[--without test]
1434
-
1435
- assert_equal [:test], @cmd.options[:without_groups]
1436
-
1437
- @cmd.handle_options %w[--without test,development]
1438
-
1439
- assert_equal [:test, :development], @cmd.options[:without_groups]
1440
- end
1441
-
1442
- def test_explain_platform_local
1443
- local = Gem::Platform.local
1444
- spec_fetcher do |fetcher|
1445
- fetcher.spec 'a', 2
1446
-
1447
- fetcher.spec 'a', 2 do |s|
1448
- s.platform = local
1449
- end
1450
- end
1451
-
1452
- @cmd.options[:explain] = true
1453
- @cmd.options[:args] = %w[a]
1454
-
1455
- use_ui @ui do
1456
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1457
- @cmd.execute
1458
- end
1459
- end
1460
-
1461
- out = @ui.output.split "\n"
1462
-
1463
- assert_equal "Gems to install:", out.shift
1464
- assert_equal " a-2-#{local}", out.shift
1465
- assert_empty out
1466
- end
1467
-
1468
- def test_explain_platform_local_ignore_dependencies
1469
- local = Gem::Platform.local
1470
- spec_fetcher do |fetcher|
1471
- fetcher.spec 'a', 3
1472
-
1473
- fetcher.spec 'a', 3 do |s|
1474
- s.platform = local
1475
- end
1476
- end
1477
-
1478
- @cmd.options[:ignore_dependencies] = true
1479
- @cmd.options[:explain] = true
1480
- @cmd.options[:args] = %w[a]
1481
-
1482
- use_ui @ui do
1483
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1484
- @cmd.execute
1485
- end
1486
- end
1487
-
1488
- out = @ui.output.split "\n"
1489
-
1490
- assert_equal "Gems to install:", out.shift
1491
- assert_equal " a-3-#{local}", out.shift
1492
- assert_empty out
1493
- end
1494
-
1495
- def test_explain_platform_ruby
1496
- local = Gem::Platform.local
1497
- spec_fetcher do |fetcher|
1498
- fetcher.spec 'a', 2
1499
-
1500
- fetcher.spec 'a', 2 do |s|
1501
- s.platform = local
1502
- end
1503
- end
1504
-
1505
- # equivalent to --platform=ruby
1506
- Gem.platforms = [Gem::Platform::RUBY]
1507
-
1508
- @cmd.options[:explain] = true
1509
- @cmd.options[:args] = %w[a]
1510
-
1511
- use_ui @ui do
1512
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1513
- @cmd.execute
1514
- end
1515
- end
1516
-
1517
- out = @ui.output.split "\n"
1518
-
1519
- assert_equal "Gems to install:", out.shift
1520
- assert_equal " a-2", out.shift
1521
- assert_empty out
1522
- end
1523
-
1524
- def test_explain_platform_ruby_ignore_dependencies
1525
- local = Gem::Platform.local
1526
- spec_fetcher do |fetcher|
1527
- fetcher.spec 'a', 3
1528
-
1529
- fetcher.spec 'a', 3 do |s|
1530
- s.platform = local
1531
- end
1532
- end
1533
-
1534
- # equivalent to --platform=ruby
1535
- Gem.platforms = [Gem::Platform::RUBY]
1536
-
1537
- @cmd.options[:ignore_dependencies] = true
1538
- @cmd.options[:explain] = true
1539
- @cmd.options[:args] = %w[a]
1540
-
1541
- use_ui @ui do
1542
- assert_raise Gem::MockGemUi::SystemExitException, @ui.error do
1543
- @cmd.execute
1544
- end
1545
- end
1546
-
1547
- out = @ui.output.split "\n"
1548
-
1549
- assert_equal "Gems to install:", out.shift
1550
- assert_equal " a-3", out.shift
1551
- assert_empty out
1552
- end
1553
- end