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,867 +0,0 @@
1
- # frozen_string_literal: true
2
- require_relative 'helper'
3
- require 'rubygems/commands/cert_command'
4
-
5
- unless Gem::HAVE_OPENSSL
6
- warn 'Skipping `gem cert` tests. openssl not found.'
7
- end
8
-
9
- if Gem.java_platform?
10
- warn 'Skipping `gem cert` tests on jruby.'
11
- end
12
-
13
- class TestGemCommandsCertCommand < Gem::TestCase
14
- ALTERNATE_CERT = load_cert 'alternate'
15
- EXPIRED_PUBLIC_CERT = load_cert 'expired'
16
-
17
- ALTERNATE_KEY_FILE = key_path 'alternate'
18
- PRIVATE_KEY_FILE = key_path 'private'
19
- PRIVATE_EC_KEY_FILE = key_path 'private_ec'
20
- PUBLIC_KEY_FILE = key_path 'public'
21
-
22
- ALTERNATE_CERT_FILE = cert_path 'alternate'
23
- CHILD_CERT_FILE = cert_path 'child'
24
- PUBLIC_CERT_FILE = cert_path 'public'
25
- EXPIRED_PUBLIC_CERT_FILE = cert_path 'expired'
26
-
27
- def setup
28
- super
29
-
30
- @cmd = Gem::Commands::CertCommand.new
31
-
32
- @trust_dir = Gem::Security.trust_dir
33
-
34
- @cleanup = []
35
- end
36
-
37
- def teardown
38
- FileUtils.rm_f(@cleanup)
39
-
40
- super
41
- end
42
-
43
- def test_certificates_matching
44
- @trust_dir.trust_cert PUBLIC_CERT
45
- @trust_dir.trust_cert ALTERNATE_CERT
46
-
47
- matches = @cmd.certificates_matching ''
48
-
49
- # HACK OpenSSL::X509::Certificate#== is Object#==, so do this the hard way
50
- match = matches.next
51
- assert_equal ALTERNATE_CERT.to_pem, match.first.to_pem
52
- assert_equal @trust_dir.cert_path(ALTERNATE_CERT), match.last
53
-
54
- match = matches.next
55
- assert_equal PUBLIC_CERT.to_pem, match.first.to_pem
56
- assert_equal @trust_dir.cert_path(PUBLIC_CERT), match.last
57
-
58
- assert_raise StopIteration do
59
- matches.next
60
- end
61
- end
62
-
63
- def test_certificates_matching_filter
64
- @trust_dir.trust_cert PUBLIC_CERT
65
- @trust_dir.trust_cert ALTERNATE_CERT
66
-
67
- matches = @cmd.certificates_matching 'alternate'
68
-
69
- match = matches.next
70
- assert_equal ALTERNATE_CERT.to_pem, match.first.to_pem
71
- assert_equal @trust_dir.cert_path(ALTERNATE_CERT), match.last
72
-
73
- assert_raise StopIteration do
74
- matches.next
75
- end
76
- end
77
-
78
- def test_execute_add
79
- @cmd.handle_options %W[--add #{PUBLIC_CERT_FILE}]
80
-
81
- use_ui @ui do
82
- @cmd.execute
83
- end
84
-
85
- cert_path = @trust_dir.cert_path PUBLIC_CERT
86
-
87
- assert_path_exist cert_path
88
-
89
- assert_equal "Added '/CN=nobody/DC=example'\n", @ui.output
90
- assert_empty @ui.error
91
- end
92
-
93
- def test_execute_add_twice
94
- self.class.cert_path 'alternate'
95
-
96
- @cmd.handle_options %W[
97
- --add #{PUBLIC_CERT_FILE}
98
- --add #{ALTERNATE_CERT_FILE}
99
- ]
100
-
101
- use_ui @ui do
102
- @cmd.execute
103
- end
104
-
105
- expected = <<-EXPECTED
106
- Added '/CN=nobody/DC=example'
107
- Added '/CN=alternate/DC=example'
108
- EXPECTED
109
-
110
- assert_equal expected, @ui.output
111
- assert_empty @ui.error
112
- end
113
-
114
- def test_execute_build
115
- passphrase = 'Foo bar'
116
-
117
- @cmd.handle_options %W[--build nobody@example.com]
118
-
119
- @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
120
-
121
- use_ui @build_ui do
122
- @cmd.execute
123
- end
124
-
125
- output = @build_ui.output.squeeze("\n").split "\n"
126
-
127
- assert_equal "Passphrase for your Private Key: ",
128
- output.shift
129
- assert_equal "Please repeat the passphrase for your Private Key: ",
130
- output.shift
131
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
132
- output.shift
133
- assert_equal "Private Key: #{File.join @tempdir, 'gem-private_key.pem'}",
134
- output.shift
135
-
136
- assert_equal "Don't forget to move the key file to somewhere private!",
137
- output.shift
138
-
139
- assert_empty output
140
- assert_empty @build_ui.error
141
-
142
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
143
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
144
- end
145
-
146
- def test_execute_build_key_algorithm_ec_key
147
- passphrase = 'Foo bar'
148
-
149
- @cmd.handle_options %W[--build nobody@example.com --key-algorithm ec]
150
-
151
- @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
152
-
153
- use_ui @build_ui do
154
- @cmd.execute
155
- end
156
-
157
- output = @build_ui.output.squeeze("\n").split "\n"
158
-
159
- assert_equal "Passphrase for your Private Key: ",
160
- output.shift
161
- assert_equal "Please repeat the passphrase for your Private Key: ",
162
- output.shift
163
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
164
- output.shift
165
- assert_equal "Private Key: #{File.join @tempdir, 'gem-private_key.pem'}",
166
- output.shift
167
-
168
- assert_equal "Don't forget to move the key file to somewhere private!",
169
- output.shift
170
-
171
- assert_empty output
172
- assert_empty @build_ui.error
173
-
174
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
175
-
176
- cert_path = File.join(@tempdir, 'gem-public_cert.pem')
177
- assert_path_exist cert_path
178
- cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
179
- assert cert.public_key.is_a? OpenSSL::PKey::EC
180
- end
181
-
182
- def test_execute_build_bad_email_address
183
- passphrase = 'Foo bar'
184
- email = "nobody@"
185
-
186
- @cmd.handle_options %W[--build #{email}]
187
-
188
- @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
189
-
190
- use_ui @build_ui do
191
-
192
- e = assert_raise Gem::CommandLineError do
193
- @cmd.execute
194
- end
195
-
196
- assert_equal "Invalid email address #{email}",
197
- e.message
198
-
199
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
200
- assert_path_not_exist File.join(@tempdir, 'gem-public_cert.pem')
201
- end
202
- end
203
-
204
- def test_execute_build_expiration_days
205
- passphrase = 'Foo bar'
206
-
207
- @cmd.handle_options %W[
208
- --build nobody@example.com
209
- --days 26
210
- ]
211
-
212
- @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
213
-
214
- use_ui @build_ui do
215
- @cmd.execute
216
- end
217
-
218
- output = @build_ui.output.squeeze("\n").split "\n"
219
-
220
- assert_equal "Passphrase for your Private Key: ",
221
- output.shift
222
- assert_equal "Please repeat the passphrase for your Private Key: ",
223
- output.shift
224
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
225
- output.shift
226
- assert_equal "Private Key: #{File.join @tempdir, 'gem-private_key.pem'}",
227
- output.shift
228
-
229
- assert_equal "Don't forget to move the key file to somewhere private!",
230
- output.shift
231
-
232
- assert_empty output
233
- assert_empty @build_ui.error
234
-
235
- assert_path_exist File.join(@tempdir, 'gem-private_key.pem')
236
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
237
-
238
- pem = File.read("#{@tempdir}/gem-public_cert.pem")
239
- cert = OpenSSL::X509::Certificate.new(pem)
240
-
241
- test = (cert.not_after - cert.not_before).to_i / (24 * 60 * 60)
242
- assert_equal(test, 26)
243
- end
244
-
245
- def test_execute_build_bad_passphrase_confirmation
246
- passphrase = 'Foo bar'
247
- passphrase_confirmation = 'Fu bar'
248
-
249
- @cmd.handle_options %W[--build nobody@example.com]
250
-
251
- @build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase_confirmation}"
252
-
253
- use_ui @build_ui do
254
- e = assert_raise Gem::CommandLineError do
255
- @cmd.execute
256
- end
257
-
258
- output = @build_ui.output.squeeze("\n").split "\n"
259
-
260
- assert_equal "Passphrase for your Private Key: ",
261
- output.shift
262
- assert_equal "Please repeat the passphrase for your Private Key: ",
263
- output.shift
264
-
265
- assert_empty output
266
-
267
- assert_equal "Passphrase and passphrase confirmation don't match",
268
- e.message
269
-
270
- end
271
-
272
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
273
- assert_path_not_exist File.join(@tempdir, 'gem-public_cert.pem')
274
- end
275
-
276
- def test_execute_build_key
277
- @cmd.handle_options %W[
278
- --build nobody@example.com
279
- --private-key #{PRIVATE_KEY_FILE}
280
- ]
281
-
282
- use_ui @ui do
283
- @cmd.execute
284
- end
285
-
286
- output = @ui.output.split "\n"
287
-
288
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
289
- output.shift
290
-
291
- assert_empty output
292
- assert_empty @ui.error
293
-
294
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
295
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
296
- end
297
-
298
- def test_execute_build_encrypted_key
299
- @cmd.handle_options %W[
300
- --build nobody@example.com
301
- --private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
302
- ]
303
-
304
- use_ui @ui do
305
- @cmd.execute
306
- end
307
-
308
- output = @ui.output.split "\n"
309
-
310
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
311
- output.shift
312
-
313
- assert_empty output
314
- assert_empty @ui.error
315
-
316
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
317
- end
318
-
319
- def test_execute_build_ec_key
320
- @cmd.handle_options %W[
321
- --build nobody@example.com
322
- --private-key #{PRIVATE_EC_KEY_FILE}
323
- ]
324
-
325
- use_ui @ui do
326
- @cmd.execute
327
- end
328
-
329
- output = @ui.output.split "\n"
330
-
331
- assert_equal "Certificate: #{File.join @tempdir, 'gem-public_cert.pem'}",
332
- output.shift
333
-
334
- assert_empty output
335
- assert_empty @ui.error
336
-
337
- assert_path_exist File.join(@tempdir, 'gem-public_cert.pem')
338
- assert_path_not_exist File.join(@tempdir, 'gem-private_key.pem')
339
- end
340
-
341
- def test_execute_certificate
342
- use_ui @ui do
343
- @cmd.handle_options %W[--certificate #{PUBLIC_CERT_FILE}]
344
- end
345
-
346
- assert_equal '', @ui.output
347
- assert_equal '', @ui.error
348
-
349
- assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
350
- end
351
-
352
- def test_execute_list
353
- @trust_dir.trust_cert PUBLIC_CERT
354
- @trust_dir.trust_cert ALTERNATE_CERT
355
-
356
- @cmd.handle_options %W[--list]
357
-
358
- use_ui @ui do
359
- @cmd.execute
360
- end
361
-
362
- assert_equal "/CN=alternate/DC=example\n/CN=nobody/DC=example\n",
363
- @ui.output
364
- assert_empty @ui.error
365
- end
366
-
367
- def test_execute_list_filter
368
- @trust_dir.trust_cert PUBLIC_CERT
369
- @trust_dir.trust_cert ALTERNATE_CERT
370
-
371
- @cmd.handle_options %W[--list nobody]
372
-
373
- use_ui @ui do
374
- @cmd.execute
375
- end
376
-
377
- assert_equal "/CN=nobody/DC=example\n", @ui.output
378
- assert_empty @ui.error
379
- end
380
-
381
- def test_execute_private_key
382
- use_ui @ui do
383
- @cmd.send :handle_options, %W[--private-key #{PRIVATE_KEY_FILE}]
384
- end
385
-
386
- assert_equal '', @ui.output
387
- assert_equal '', @ui.error
388
-
389
- assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
390
- end
391
-
392
- def test_execute_encrypted_private_key
393
- use_ui @ui do
394
- @cmd.send :handle_options, %W[--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}]
395
- end
396
-
397
- assert_equal '', @ui.output
398
- assert_equal '', @ui.error
399
-
400
- assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
401
- end
402
-
403
- def test_execute_remove
404
- @trust_dir.trust_cert PUBLIC_CERT
405
-
406
- cert_path = @trust_dir.cert_path PUBLIC_CERT
407
-
408
- assert_path_exist cert_path
409
-
410
- @cmd.handle_options %W[--remove nobody]
411
-
412
- use_ui @ui do
413
- @cmd.execute
414
- end
415
-
416
- assert_equal "Removed '/CN=nobody/DC=example'\n", @ui.output
417
- assert_equal '', @ui.error
418
-
419
- assert_path_not_exist cert_path
420
- end
421
-
422
- def test_execute_remove_multiple
423
- @trust_dir.trust_cert PUBLIC_CERT
424
- @trust_dir.trust_cert ALTERNATE_CERT
425
-
426
- public_path = @trust_dir.cert_path PUBLIC_CERT
427
- alternate_path = @trust_dir.cert_path ALTERNATE_CERT
428
-
429
- assert_path_exist public_path
430
- assert_path_exist alternate_path
431
-
432
- @cmd.handle_options %W[--remove example]
433
-
434
- use_ui @ui do
435
- @cmd.execute
436
- end
437
-
438
- expected = <<-EXPECTED
439
- Removed '/CN=alternate/DC=example'
440
- Removed '/CN=nobody/DC=example'
441
- EXPECTED
442
-
443
- assert_equal expected, @ui.output
444
- assert_equal '', @ui.error
445
-
446
- assert_path_not_exist public_path
447
- assert_path_not_exist alternate_path
448
- end
449
-
450
- def test_execute_remove_twice
451
- @trust_dir.trust_cert PUBLIC_CERT
452
- @trust_dir.trust_cert ALTERNATE_CERT
453
-
454
- public_path = @trust_dir.cert_path PUBLIC_CERT
455
- alternate_path = @trust_dir.cert_path ALTERNATE_CERT
456
-
457
- assert_path_exist public_path
458
- assert_path_exist alternate_path
459
-
460
- @cmd.handle_options %W[--remove nobody --remove alternate]
461
-
462
- use_ui @ui do
463
- @cmd.execute
464
- end
465
-
466
- expected = <<-EXPECTED
467
- Removed '/CN=nobody/DC=example'
468
- Removed '/CN=alternate/DC=example'
469
- EXPECTED
470
-
471
- assert_equal expected, @ui.output
472
- assert_equal '', @ui.error
473
-
474
- assert_path_not_exist public_path
475
- assert_path_not_exist alternate_path
476
- end
477
-
478
- def test_execute_sign
479
- path = File.join @tempdir, 'cert.pem'
480
- Gem::Security.write ALTERNATE_CERT, path, 0600
481
-
482
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
483
-
484
- @cmd.handle_options %W[
485
- --private-key #{PRIVATE_KEY_FILE}
486
- --certificate #{PUBLIC_CERT_FILE}
487
-
488
- --sign #{path}
489
- ]
490
-
491
- use_ui @ui do
492
- @cmd.execute
493
- end
494
-
495
- assert_equal '', @ui.output
496
- assert_equal '', @ui.error
497
-
498
- cert = OpenSSL::X509::Certificate.new File.read path
499
-
500
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
501
-
502
- mask = 0100600 & (~File.umask)
503
-
504
- assert_equal mask, File.stat(path).mode unless win_platform?
505
- end
506
-
507
- def test_execute_sign_encrypted_key
508
- path = File.join @tempdir, 'cert.pem'
509
- Gem::Security.write ALTERNATE_CERT, path, 0600
510
-
511
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
512
-
513
- @cmd.handle_options %W[
514
- --private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
515
- --certificate #{PUBLIC_CERT_FILE}
516
-
517
- --sign #{path}
518
- ]
519
-
520
- use_ui @ui do
521
- @cmd.execute
522
- end
523
-
524
- assert_equal '', @ui.output
525
- assert_equal '', @ui.error
526
-
527
- cert = OpenSSL::X509::Certificate.new File.read path
528
-
529
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
530
-
531
- mask = 0100600 & (~File.umask)
532
-
533
- assert_equal mask, File.stat(path).mode unless win_platform?
534
- end
535
-
536
- def test_execute_sign_default
537
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
538
-
539
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
540
- Gem::Security.write PRIVATE_KEY, private_key_path
541
-
542
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
543
- Gem::Security.write PUBLIC_CERT, public_cert_path
544
-
545
- path = File.join @tempdir, 'cert.pem'
546
- Gem::Security.write ALTERNATE_CERT, path, 0600
547
-
548
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
549
-
550
- @cmd.handle_options %W[--sign #{path}]
551
-
552
- use_ui @ui do
553
- @cmd.execute
554
- end
555
-
556
- assert_equal '', @ui.output
557
- assert_equal '', @ui.error
558
-
559
- cert = OpenSSL::X509::Certificate.new File.read path
560
-
561
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
562
-
563
- mask = 0100600 & (~File.umask)
564
-
565
- assert_equal mask, File.stat(path).mode unless win_platform?
566
- end
567
-
568
- def test_execute_sign_default_encrypted_key
569
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
570
-
571
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
572
- Gem::Security.write ENCRYPTED_PRIVATE_KEY, private_key_path, 0600, PRIVATE_KEY_PASSPHRASE
573
-
574
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
575
- Gem::Security.write PUBLIC_CERT, public_cert_path
576
-
577
- path = File.join @tempdir, 'cert.pem'
578
- Gem::Security.write ALTERNATE_CERT, path, 0600
579
-
580
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
581
-
582
- @cmd.handle_options %W[--sign #{path}]
583
-
584
- use_ui @ui do
585
- @cmd.execute
586
- end
587
-
588
- assert_equal '', @ui.output
589
- assert_equal '', @ui.error
590
-
591
- cert = OpenSSL::X509::Certificate.new File.read path
592
-
593
- assert_equal '/CN=nobody/DC=example', cert.issuer.to_s
594
-
595
- mask = 0100600 & (~File.umask)
596
-
597
- assert_equal mask, File.stat(path).mode unless win_platform?
598
- end
599
-
600
- def test_execute_sign_no_cert
601
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
602
-
603
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
604
- Gem::Security.write PRIVATE_KEY, private_key_path
605
-
606
- path = File.join @tempdir, 'cert.pem'
607
- Gem::Security.write ALTERNATE_CERT, path, 0600
608
-
609
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
610
-
611
- @cmd.handle_options %W[--sign #{path}]
612
-
613
- use_ui @ui do
614
- assert_raise Gem::MockGemUi::TermError do
615
- @cmd.execute
616
- end
617
- end
618
-
619
- assert_equal '', @ui.output
620
-
621
- expected = <<-EXPECTED
622
- ERROR: --certificate not specified and ~/.gem/gem-public_cert.pem does not exist
623
- EXPECTED
624
-
625
- assert_equal expected, @ui.error
626
- end
627
-
628
- def test_execute_sign_no_key
629
- FileUtils.mkdir_p File.join Gem.user_home, '.gem'
630
-
631
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
632
- Gem::Security.write PUBLIC_CERT, public_cert_path
633
-
634
- path = File.join @tempdir, 'cert.pem'
635
- Gem::Security.write ALTERNATE_CERT, path, 0600
636
-
637
- assert_equal '/CN=alternate/DC=example', ALTERNATE_CERT.issuer.to_s
638
-
639
- @cmd.handle_options %W[--sign #{path}]
640
-
641
- use_ui @ui do
642
- assert_raise Gem::MockGemUi::TermError do
643
- @cmd.execute
644
- end
645
- end
646
-
647
- assert_equal '', @ui.output
648
-
649
- expected = <<-EXPECTED
650
- ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exist
651
- EXPECTED
652
-
653
- assert_equal expected, @ui.error
654
- end
655
-
656
- def test_execute_re_sign
657
- gem_path = File.join Gem.user_home, ".gem"
658
- Dir.mkdir gem_path
659
-
660
- path = File.join @tempdir, 'cert.pem'
661
- Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0600
662
-
663
- assert_equal '/CN=nobody/DC=example', EXPIRED_PUBLIC_CERT.issuer.to_s
664
-
665
- tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
666
- @cleanup << tmp_expired_cert_file
667
- File.write(tmp_expired_cert_file, File.read(EXPIRED_PUBLIC_CERT_FILE))
668
-
669
- @cmd.handle_options %W[
670
- --private-key #{PRIVATE_KEY_FILE}
671
- --certificate #{tmp_expired_cert_file}
672
- --re-sign
673
- ]
674
-
675
- use_ui @ui do
676
- @cmd.execute
677
- end
678
-
679
- expected_path = File.join(gem_path, "#{File.basename(tmp_expired_cert_file)}.expired")
680
-
681
- assert_match(
682
- /INFO: Your certificate #{tmp_expired_cert_file} has been re-signed\nINFO: Your expired certificate will be located at: #{expected_path}\.[0-9]+/,
683
- @ui.output
684
- )
685
- assert_equal '', @ui.error
686
- end
687
-
688
- def test_execute_re_sign_with_cert_expiration_length_days
689
- gem_path = File.join Gem.user_home, ".gem"
690
- Dir.mkdir gem_path
691
-
692
- path = File.join @tempdir, 'cert.pem'
693
- Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0600
694
-
695
- assert_equal '/CN=nobody/DC=example', EXPIRED_PUBLIC_CERT.issuer.to_s
696
-
697
- tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
698
- @cleanup << tmp_expired_cert_file
699
- File.write(tmp_expired_cert_file, File.read(EXPIRED_PUBLIC_CERT_FILE))
700
-
701
- @cmd.handle_options %W[
702
- --private-key #{PRIVATE_KEY_FILE}
703
- --certificate #{tmp_expired_cert_file}
704
- --re-sign
705
- ]
706
-
707
- Gem.configuration.cert_expiration_length_days = 28
708
-
709
- use_ui @ui do
710
- @cmd.execute
711
- end
712
-
713
- re_signed_cert = OpenSSL::X509::Certificate.new(File.read(tmp_expired_cert_file))
714
- cert_days_to_expire = (re_signed_cert.not_after - re_signed_cert.not_before).to_i / (24 * 60 * 60)
715
-
716
- assert_equal(28, cert_days_to_expire)
717
- assert_equal '', @ui.error
718
- end
719
-
720
- def test_handle_options
721
- @cmd.handle_options %W[
722
- --add #{PUBLIC_CERT_FILE}
723
- --add #{ALTERNATE_CERT_FILE}
724
-
725
- --remove nobody
726
- --remove example
727
-
728
- --list
729
- --list example
730
-
731
- --build nobody@example
732
- --build other@example
733
- ]
734
-
735
- assert_equal [PUBLIC_CERT.to_pem, ALTERNATE_CERT.to_pem],
736
- @cmd.options[:add].map {|cert| cert.to_pem }
737
-
738
- assert_equal %w[nobody example], @cmd.options[:remove]
739
-
740
- assert_equal %w[nobody@example other@example],
741
- @cmd.options[:build].map {|name| name.to_s }
742
-
743
- assert_equal ['', 'example'], @cmd.options[:list]
744
- end
745
-
746
- def test_handle_options_add_bad
747
- nonexistent = File.join @tempdir, 'nonexistent'
748
- e = assert_raise Gem::OptionParser::InvalidArgument do
749
- @cmd.handle_options %W[--add #{nonexistent}]
750
- end
751
-
752
- assert_equal "invalid argument: --add #{nonexistent}: does not exist",
753
- e.message
754
-
755
- bad = File.join @tempdir, 'bad'
756
- FileUtils.touch bad
757
-
758
- e = assert_raise Gem::OptionParser::InvalidArgument do
759
- @cmd.handle_options %W[--add #{bad}]
760
- end
761
-
762
- assert_equal "invalid argument: --add #{bad}: invalid X509 certificate",
763
- e.message
764
- end
765
-
766
- def test_handle_options_certificate
767
- nonexistent = File.join @tempdir, 'nonexistent'
768
- e = assert_raise Gem::OptionParser::InvalidArgument do
769
- @cmd.handle_options %W[--certificate #{nonexistent}]
770
- end
771
-
772
- assert_equal "invalid argument: --certificate #{nonexistent}: does not exist",
773
- e.message
774
-
775
- bad = File.join @tempdir, 'bad'
776
- FileUtils.touch bad
777
-
778
- e = assert_raise Gem::OptionParser::InvalidArgument do
779
- @cmd.handle_options %W[--certificate #{bad}]
780
- end
781
-
782
- assert_equal "invalid argument: " +
783
- "--certificate #{bad}: invalid X509 certificate",
784
- e.message
785
- end
786
-
787
- def test_handle_options_key_bad
788
- nonexistent = File.join @tempdir, 'nonexistent'
789
- e = assert_raise Gem::OptionParser::InvalidArgument do
790
- @cmd.handle_options %W[--private-key #{nonexistent}]
791
- end
792
-
793
- assert_equal "invalid argument: " +
794
- "--private-key #{nonexistent}: does not exist",
795
- e.message
796
-
797
- bad = File.join @tempdir, 'bad'
798
- FileUtils.touch bad
799
-
800
- e = assert_raise Gem::OptionParser::InvalidArgument do
801
- @cmd.handle_options %W[--private-key #{bad}]
802
- end
803
-
804
- assert_equal "invalid argument: --private-key #{bad}: invalid RSA, DSA, or EC key",
805
- e.message
806
-
807
- e = assert_raise Gem::OptionParser::InvalidArgument do
808
- @cmd.handle_options %W[--private-key #{PUBLIC_KEY_FILE}]
809
- end
810
-
811
- assert_equal "invalid argument: " +
812
- "--private-key #{PUBLIC_KEY_FILE}: private key not found",
813
- e.message
814
- end
815
-
816
- def test_handle_options_sign
817
- @cmd.handle_options %W[
818
- --private-key #{ALTERNATE_KEY_FILE}
819
- --private-key #{PRIVATE_KEY_FILE}
820
-
821
- --certificate #{ALTERNATE_CERT_FILE}
822
- --certificate #{PUBLIC_CERT_FILE}
823
-
824
- --sign #{ALTERNATE_CERT_FILE}
825
- --sign #{CHILD_CERT_FILE}
826
- ]
827
-
828
- assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
829
- assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
830
-
831
- assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
832
- end
833
-
834
- def test_handle_options_sign_encrypted_key
835
- @cmd.handle_options %W[
836
- --private-key #{ALTERNATE_KEY_FILE}
837
- --private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
838
-
839
- --certificate #{ALTERNATE_CERT_FILE}
840
- --certificate #{PUBLIC_CERT_FILE}
841
-
842
- --sign #{ALTERNATE_CERT_FILE}
843
- --sign #{CHILD_CERT_FILE}
844
- ]
845
-
846
- assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
847
- assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
848
-
849
- assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
850
- end
851
-
852
- def test_handle_options_sign_nonexistent
853
- nonexistent = File.join @tempdir, 'nonexistent'
854
- e = assert_raise Gem::OptionParser::InvalidArgument do
855
- @cmd.handle_options %W[
856
- --private-key #{ALTERNATE_KEY_FILE}
857
-
858
- --certificate #{ALTERNATE_CERT_FILE}
859
-
860
- --sign #{nonexistent}
861
- ]
862
- end
863
-
864
- assert_equal "invalid argument: --sign #{nonexistent}: does not exist",
865
- e.message
866
- end
867
- end if Gem::HAVE_OPENSSL && !Gem.java_platform?