rubygems-update 3.4.22 → 3.5.0

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 (528) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -2
  3. data/Manifest.txt +34 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +53 -0
  6. data/bundler/bundler.gemspec +4 -2
  7. data/bundler/exe/bundle +1 -10
  8. data/bundler/lib/bundler/build_metadata.rb +3 -3
  9. data/bundler/lib/bundler/capistrano.rb +1 -1
  10. data/bundler/lib/bundler/checksum.rb +245 -0
  11. data/bundler/lib/bundler/ci_detector.rb +75 -0
  12. data/bundler/lib/bundler/cli/add.rb +3 -3
  13. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  14. data/bundler/lib/bundler/cli/cache.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +9 -1
  17. data/bundler/lib/bundler/cli/config.rb +8 -7
  18. data/bundler/lib/bundler/cli/console.rb +3 -2
  19. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  20. data/bundler/lib/bundler/cli/exec.rb +1 -1
  21. data/bundler/lib/bundler/cli/gem.rb +28 -23
  22. data/bundler/lib/bundler/cli/info.rb +2 -13
  23. data/bundler/lib/bundler/cli/install.rb +5 -4
  24. data/bundler/lib/bundler/cli/issue.rb +1 -1
  25. data/bundler/lib/bundler/cli/lock.rb +4 -4
  26. data/bundler/lib/bundler/cli/open.rb +1 -1
  27. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  28. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  29. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  30. data/bundler/lib/bundler/cli/show.rb +2 -2
  31. data/bundler/lib/bundler/cli/update.rb +5 -5
  32. data/bundler/lib/bundler/cli.rb +215 -263
  33. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  34. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  35. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  36. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  37. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  38. data/bundler/lib/bundler/constants.rb +1 -1
  39. data/bundler/lib/bundler/current_ruby.rb +5 -21
  40. data/bundler/lib/bundler/definition.rb +42 -15
  41. data/bundler/lib/bundler/dependency.rb +16 -12
  42. data/bundler/lib/bundler/digest.rb +2 -2
  43. data/bundler/lib/bundler/dsl.rb +43 -25
  44. data/bundler/lib/bundler/endpoint_specification.rb +5 -1
  45. data/bundler/lib/bundler/env.rb +1 -3
  46. data/bundler/lib/bundler/errors.rb +43 -0
  47. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  48. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  49. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  50. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  51. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  52. data/bundler/lib/bundler/fetcher.rb +28 -25
  53. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  54. data/bundler/lib/bundler/gem_helper.rb +1 -1
  55. data/bundler/lib/bundler/gem_helpers.rb +5 -2
  56. data/bundler/lib/bundler/graph.rb +9 -9
  57. data/bundler/lib/bundler/index.rb +1 -2
  58. data/bundler/lib/bundler/injector.rb +1 -1
  59. data/bundler/lib/bundler/inline.rb +3 -3
  60. data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
  61. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  62. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  63. data/bundler/lib/bundler/installer.rb +9 -9
  64. data/bundler/lib/bundler/lazy_specification.rb +24 -17
  65. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  66. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  67. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  68. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  69. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  70. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  72. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  75. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  76. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  77. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  78. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  79. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  80. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  81. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  82. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  83. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  84. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  85. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  86. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  87. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  88. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  89. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  90. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  91. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  92. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  93. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  94. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  95. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  96. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  97. data/bundler/lib/bundler/man/bundle.1 +5 -44
  98. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  99. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  100. data/bundler/lib/bundler/match_metadata.rb +4 -0
  101. data/bundler/lib/bundler/match_platform.rb +1 -1
  102. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin.rb +3 -3
  105. data/bundler/lib/bundler/resolver/base.rb +1 -1
  106. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  107. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  108. data/bundler/lib/bundler/resolver.rb +16 -16
  109. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +24 -50
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
  113. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  114. data/bundler/lib/bundler/runtime.rb +2 -2
  115. data/bundler/lib/bundler/self_manager.rb +23 -7
  116. data/bundler/lib/bundler/settings.rb +27 -7
  117. data/bundler/lib/bundler/setup.rb +4 -1
  118. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  119. data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
  120. data/bundler/lib/bundler/source/git.rb +4 -3
  121. data/bundler/lib/bundler/source/metadata.rb +15 -15
  122. data/bundler/lib/bundler/source/path.rb +7 -6
  123. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  124. data/bundler/lib/bundler/source.rb +2 -0
  125. data/bundler/lib/bundler/spec_set.rb +38 -10
  126. data/bundler/lib/bundler/stub_specification.rb +1 -0
  127. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  128. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  129. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  130. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  131. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  132. data/bundler/lib/bundler/ui/shell.rb +1 -1
  133. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  135. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  136. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  137. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  138. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
  140. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  141. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  142. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  143. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  144. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  145. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  146. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  147. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  148. data/bundler/lib/bundler/version.rb +1 -1
  149. data/bundler/lib/bundler/vlad.rb +1 -1
  150. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  151. data/bundler/lib/bundler.rb +38 -27
  152. data/lib/rubygems/available_set.rb +4 -4
  153. data/lib/rubygems/basic_specification.rb +35 -37
  154. data/lib/rubygems/bundler_version_finder.rb +4 -4
  155. data/lib/rubygems/ci_detector.rb +75 -0
  156. data/lib/rubygems/command.rb +13 -15
  157. data/lib/rubygems/command_manager.rb +5 -4
  158. data/lib/rubygems/commands/build_command.rb +2 -2
  159. data/lib/rubygems/commands/cert_command.rb +1 -2
  160. data/lib/rubygems/commands/check_command.rb +4 -4
  161. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  162. data/lib/rubygems/commands/contents_command.rb +4 -4
  163. data/lib/rubygems/commands/dependency_command.rb +4 -5
  164. data/lib/rubygems/commands/environment_command.rb +1 -3
  165. data/lib/rubygems/commands/exec_command.rb +1 -1
  166. data/lib/rubygems/commands/fetch_command.rb +2 -2
  167. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  168. data/lib/rubygems/commands/help_command.rb +3 -3
  169. data/lib/rubygems/commands/info_command.rb +2 -2
  170. data/lib/rubygems/commands/install_command.rb +8 -16
  171. data/lib/rubygems/commands/list_command.rb +2 -2
  172. data/lib/rubygems/commands/lock_command.rb +1 -1
  173. data/lib/rubygems/commands/open_command.rb +1 -1
  174. data/lib/rubygems/commands/owner_command.rb +1 -1
  175. data/lib/rubygems/commands/pristine_command.rb +13 -15
  176. data/lib/rubygems/commands/push_command.rb +2 -2
  177. data/lib/rubygems/commands/query_command.rb +4 -5
  178. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  179. data/lib/rubygems/commands/search_command.rb +2 -2
  180. data/lib/rubygems/commands/setup_command.rb +31 -34
  181. data/lib/rubygems/commands/sources_command.rb +12 -12
  182. data/lib/rubygems/commands/specification_command.rb +10 -10
  183. data/lib/rubygems/commands/stale_command.rb +1 -1
  184. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  185. data/lib/rubygems/commands/unpack_command.rb +4 -4
  186. data/lib/rubygems/commands/update_command.rb +10 -12
  187. data/lib/rubygems/commands/which_command.rb +1 -1
  188. data/lib/rubygems/commands/yank_command.rb +1 -1
  189. data/lib/rubygems/compatibility.rb +5 -6
  190. data/lib/rubygems/config_file.rb +4 -4
  191. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  192. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  193. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  194. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  195. data/lib/rubygems/defaults.rb +15 -3
  196. data/lib/rubygems/dependency.rb +12 -14
  197. data/lib/rubygems/dependency_installer.rb +29 -30
  198. data/lib/rubygems/dependency_list.rb +1 -1
  199. data/lib/rubygems/deprecate.rb +16 -15
  200. data/lib/rubygems/doctor.rb +5 -5
  201. data/lib/rubygems/errors.rb +2 -6
  202. data/lib/rubygems/exceptions.rb +2 -1
  203. data/lib/rubygems/ext/builder.rb +15 -10
  204. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  205. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  206. data/lib/rubygems/gem_runner.rb +4 -4
  207. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  208. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  209. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  210. data/lib/rubygems/install_update_options.rb +18 -19
  211. data/lib/rubygems/installer.rb +59 -33
  212. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  213. data/lib/rubygems/local_remote_options.rb +7 -10
  214. data/lib/rubygems/name_tuple.rb +7 -9
  215. data/lib/rubygems/net/http.rb +3 -0
  216. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  217. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  218. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  219. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  220. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  221. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  222. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  223. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  224. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  225. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  226. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  227. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  228. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  229. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  230. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  231. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  232. data/lib/rubygems/package/old.rb +2 -2
  233. data/lib/rubygems/package/tar_header.rb +45 -39
  234. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  235. data/lib/rubygems/package/tar_reader.rb +5 -3
  236. data/lib/rubygems/package/tar_writer.rb +19 -17
  237. data/lib/rubygems/package.rb +27 -26
  238. data/lib/rubygems/package_task.rb +2 -2
  239. data/lib/rubygems/path_support.rb +9 -10
  240. data/lib/rubygems/platform.rb +60 -45
  241. data/lib/rubygems/query_utils.rb +7 -9
  242. data/lib/rubygems/remote_fetcher.rb +15 -15
  243. data/lib/rubygems/request/connection_pools.rb +3 -3
  244. data/lib/rubygems/request.rb +20 -17
  245. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  246. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  247. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  248. data/lib/rubygems/request_set/lockfile.rb +6 -11
  249. data/lib/rubygems/request_set.rb +5 -5
  250. data/lib/rubygems/requirement.rb +7 -7
  251. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  252. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  253. data/lib/rubygems/resolver/activation_request.rb +1 -3
  254. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  255. data/lib/rubygems/resolver/best_set.rb +1 -1
  256. data/lib/rubygems/resolver/composed_set.rb +1 -1
  257. data/lib/rubygems/resolver/conflict.rb +4 -12
  258. data/lib/rubygems/resolver/index_set.rb +4 -4
  259. data/lib/rubygems/resolver/index_specification.rb +2 -2
  260. data/lib/rubygems/resolver/installer_set.rb +5 -6
  261. data/lib/rubygems/resolver/lock_set.rb +1 -1
  262. data/lib/rubygems/resolver.rb +3 -10
  263. data/lib/rubygems/s3_uri_signer.rb +6 -6
  264. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  265. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  266. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  267. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  268. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  269. data/lib/rubygems/safe_marshal.rb +74 -0
  270. data/lib/rubygems/safe_yaml.rb +5 -28
  271. data/lib/rubygems/security/policies.rb +36 -38
  272. data/lib/rubygems/security/policy.rb +7 -11
  273. data/lib/rubygems/security/signer.rb +1 -1
  274. data/lib/rubygems/security/trust_dir.rb +3 -3
  275. data/lib/rubygems/security.rb +8 -22
  276. data/lib/rubygems/source/git.rb +1 -3
  277. data/lib/rubygems/source/installed.rb +0 -2
  278. data/lib/rubygems/source/local.rb +5 -8
  279. data/lib/rubygems/source/lock.rb +1 -3
  280. data/lib/rubygems/source/specific_file.rb +0 -1
  281. data/lib/rubygems/source/vendor.rb +0 -2
  282. data/lib/rubygems/source.rb +12 -12
  283. data/lib/rubygems/source_list.rb +4 -4
  284. data/lib/rubygems/spec_fetcher.rb +29 -29
  285. data/lib/rubygems/specification.rb +125 -138
  286. data/lib/rubygems/specification_policy.rb +55 -25
  287. data/lib/rubygems/stub_specification.rb +4 -5
  288. data/lib/rubygems/text.rb +1 -2
  289. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  290. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  291. data/lib/rubygems/timeout.rb +3 -0
  292. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  293. data/lib/rubygems/uninstaller.rb +7 -9
  294. data/lib/rubygems/update_suggestion.rb +5 -18
  295. data/lib/rubygems/uri_formatter.rb +1 -1
  296. data/lib/rubygems/user_interaction.rb +15 -21
  297. data/lib/rubygems/util/licenses.rb +65 -35
  298. data/lib/rubygems/util/list.rb +3 -1
  299. data/lib/rubygems/util.rb +2 -4
  300. data/lib/rubygems/validator.rb +5 -3
  301. data/lib/rubygems/version.rb +34 -28
  302. data/lib/rubygems/version_option.rb +2 -5
  303. data/lib/rubygems/yaml_serializer.rb +3 -3
  304. data/lib/rubygems.rb +37 -37
  305. data/rubygems-update.gemspec +4 -4
  306. data/setup.rb +2 -2
  307. metadata +38 -225
  308. data/lib/rubygems/indexer.rb +0 -428
  309. data/lib/rubygems/mock_gem_ui.rb +0 -86
  310. data/test/rubygems/alternate_cert.pem +0 -19
  311. data/test/rubygems/alternate_cert_32.pem +0 -19
  312. data/test/rubygems/alternate_key.pem +0 -27
  313. data/test/rubygems/bad_rake.rb +0 -3
  314. data/test/rubygems/bundler_test_gem.rb +0 -424
  315. data/test/rubygems/ca_cert.pem +0 -77
  316. data/test/rubygems/child_cert.pem +0 -19
  317. data/test/rubygems/child_cert_32.pem +0 -19
  318. data/test/rubygems/child_key.pem +0 -27
  319. data/test/rubygems/client.pem +0 -107
  320. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  321. data/test/rubygems/data/gem-private_key.pem +0 -27
  322. data/test/rubygems/data/gem-public_cert.pem +0 -20
  323. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  324. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  325. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  326. data/test/rubygems/encrypted_private_key.pem +0 -30
  327. data/test/rubygems/expired_cert.pem +0 -19
  328. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  329. data/test/rubygems/foo/discover.rb +0 -1
  330. data/test/rubygems/future_cert.pem +0 -19
  331. data/test/rubygems/future_cert_32.pem +0 -19
  332. data/test/rubygems/good_rake.rb +0 -3
  333. data/test/rubygems/grandchild_cert.pem +0 -19
  334. data/test/rubygems/grandchild_cert_32.pem +0 -19
  335. data/test/rubygems/grandchild_key.pem +0 -27
  336. data/test/rubygems/helper.rb +0 -1649
  337. data/test/rubygems/installer_test_case.rb +0 -248
  338. data/test/rubygems/invalid_client.pem +0 -49
  339. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  340. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  341. data/test/rubygems/invalid_key.pem +0 -27
  342. data/test/rubygems/invalid_signer_cert.pem +0 -19
  343. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  344. data/test/rubygems/invalidchild_cert.pem +0 -19
  345. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  346. data/test/rubygems/invalidchild_key.pem +0 -27
  347. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  348. data/test/rubygems/package/tar_test_case.rb +0 -175
  349. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  350. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  351. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  352. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  353. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  354. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  355. data/test/rubygems/private3072_key.pem +0 -40
  356. data/test/rubygems/private_ec_key.pem +0 -9
  357. data/test/rubygems/private_key.pem +0 -27
  358. data/test/rubygems/public3072_cert.pem +0 -25
  359. data/test/rubygems/public_cert.pem +0 -20
  360. data/test/rubygems/public_cert_32.pem +0 -19
  361. data/test/rubygems/public_key.pem +0 -9
  362. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  363. data/test/rubygems/rubygems_plugin.rb +0 -24
  364. data/test/rubygems/sff/discover.rb +0 -1
  365. data/test/rubygems/simple_gem.rb +0 -68
  366. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  367. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  368. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  369. data/test/rubygems/ssl_cert.pem +0 -80
  370. data/test/rubygems/ssl_key.pem +0 -27
  371. data/test/rubygems/test_bundled_ca.rb +0 -61
  372. data/test/rubygems/test_config.rb +0 -28
  373. data/test/rubygems/test_deprecate.rb +0 -158
  374. data/test/rubygems/test_exit.rb +0 -17
  375. data/test/rubygems/test_gem.rb +0 -1799
  376. data/test/rubygems/test_gem_available_set.rb +0 -130
  377. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  378. data/test/rubygems/test_gem_command.rb +0 -403
  379. data/test/rubygems/test_gem_command_manager.rb +0 -400
  380. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  381. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  382. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  383. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  384. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  385. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  386. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  387. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  388. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  389. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  390. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  391. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  392. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  393. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  394. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  395. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  396. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  397. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  398. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  399. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  400. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  401. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  402. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  403. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  404. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  405. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  406. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  407. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  408. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  409. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  410. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  411. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  412. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  413. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  414. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  415. data/test/rubygems/test_gem_config_file.rb +0 -551
  416. data/test/rubygems/test_gem_dependency.rb +0 -398
  417. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  418. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  419. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  420. data/test/rubygems/test_gem_doctor.rb +0 -195
  421. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  422. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  423. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  424. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  425. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  426. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  427. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  428. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  429. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  430. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  431. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  432. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  433. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  434. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  435. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  436. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  437. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  438. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  439. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  440. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  441. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  442. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  443. data/test/rubygems/test_gem_indexer.rb +0 -381
  444. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  445. data/test/rubygems/test_gem_installer.rb +0 -2512
  446. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  447. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  448. data/test/rubygems/test_gem_package.rb +0 -1306
  449. data/test/rubygems/test_gem_package_old.rb +0 -91
  450. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  451. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  452. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  453. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  454. data/test/rubygems/test_gem_package_task.rb +0 -118
  455. data/test/rubygems/test_gem_path_support.rb +0 -139
  456. data/test/rubygems/test_gem_platform.rb +0 -497
  457. data/test/rubygems/test_gem_rdoc.rb +0 -137
  458. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  459. data/test/rubygems/test_gem_request.rb +0 -547
  460. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  461. data/test/rubygems/test_gem_request_set.rb +0 -672
  462. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  463. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  464. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  465. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  466. data/test/rubygems/test_gem_requirement.rb +0 -505
  467. data/test/rubygems/test_gem_resolver.rb +0 -859
  468. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  469. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  470. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  471. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  472. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  473. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  474. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  475. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  476. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  477. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  478. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  479. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  480. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  481. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  482. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  483. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  484. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  485. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  486. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  487. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  488. data/test/rubygems/test_gem_security.rb +0 -341
  489. data/test/rubygems/test_gem_security_policy.rb +0 -535
  490. data/test/rubygems/test_gem_security_signer.rb +0 -218
  491. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  492. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  493. data/test/rubygems/test_gem_source.rb +0 -254
  494. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  495. data/test/rubygems/test_gem_source_git.rb +0 -310
  496. data/test/rubygems/test_gem_source_installed.rb +0 -35
  497. data/test/rubygems/test_gem_source_list.rb +0 -119
  498. data/test/rubygems/test_gem_source_local.rb +0 -107
  499. data/test/rubygems/test_gem_source_lock.rb +0 -113
  500. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  501. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  502. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  503. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  504. data/test/rubygems/test_gem_specification.rb +0 -3856
  505. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  506. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  507. data/test/rubygems/test_gem_text.rb +0 -103
  508. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  509. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  510. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  511. data/test/rubygems/test_gem_uri.rb +0 -41
  512. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  513. data/test/rubygems/test_gem_util.rb +0 -91
  514. data/test/rubygems/test_gem_validator.rb +0 -42
  515. data/test/rubygems/test_gem_version.rb +0 -305
  516. data/test/rubygems/test_gem_version_option.rb +0 -165
  517. data/test/rubygems/test_kernel.rb +0 -124
  518. data/test/rubygems/test_project_sanity.rb +0 -49
  519. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  520. data/test/rubygems/test_require.rb +0 -732
  521. data/test/rubygems/test_rubygems.rb +0 -76
  522. data/test/rubygems/test_webauthn_listener.rb +0 -143
  523. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  524. data/test/rubygems/test_webauthn_poller.rb +0 -124
  525. data/test/rubygems/utilities.rb +0 -436
  526. data/test/rubygems/wrong_key_cert.pem +0 -19
  527. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  528. data/test/test_changelog_generator.rb +0 -17
@@ -1,739 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "helper"
4
- require "rubygems/commands/build_command"
5
- require "rubygems/package"
6
-
7
- class TestGemCommandsBuildCommand < Gem::TestCase
8
- CERT_FILE = cert_path "public3072"
9
- SIGNING_KEY = key_path "private3072"
10
-
11
- EXPIRED_CERT_FILE = cert_path "expired"
12
- PRIVATE_KEY_FILE = key_path "private"
13
-
14
- def setup
15
- super
16
-
17
- readme_file = File.join(@tempdir, "README.md")
18
-
19
- begin
20
- umask_orig = File.umask(2)
21
- File.open readme_file, "w" do |f|
22
- f.write "My awesome gem"
23
- end
24
- ensure
25
- File.umask(umask_orig)
26
- end
27
-
28
- @gem = util_spec "some_gem" do |s|
29
- s.license = "AGPL-3.0"
30
- s.files = ["README.md"]
31
- end
32
-
33
- @cmd = Gem::Commands::BuildCommand.new
34
- end
35
-
36
- def test_handle_options
37
- @cmd.handle_options %w[--force --strict]
38
-
39
- assert @cmd.options[:force]
40
- assert @cmd.options[:strict]
41
- assert @cmd.handles?(%W[--platform #{Gem::Platform.local}])
42
- assert_includes Gem.platforms, Gem::Platform.local
43
- end
44
-
45
- def test_handle_deprecated_options
46
- use_ui @ui do
47
- @cmd.handle_options %w[-C ./test/dir]
48
- end
49
-
50
- assert_equal "WARNING: The \"-C\" option has been deprecated and will be removed in Rubygems 4.0. " \
51
- "-C is a global flag now. Use `gem -C PATH build GEMSPEC_FILE [options]` instead\n",
52
- @ui.error
53
- end
54
-
55
- def test_options_filename
56
- gemspec_file = File.join(@tempdir, @gem.spec_name)
57
-
58
- File.open gemspec_file, "w" do |gs|
59
- gs.write @gem.to_ruby
60
- end
61
-
62
- @cmd.options[:args] = [gemspec_file]
63
- @cmd.options[:output] = "test.gem"
64
-
65
- use_ui @ui do
66
- Dir.chdir @tempdir do
67
- @cmd.execute
68
- end
69
- end
70
-
71
- file = File.join(@tempdir, File::SEPARATOR, "test.gem")
72
- assert File.exist?(file)
73
-
74
- output = @ui.output.split "\n"
75
- assert_equal " Successfully built RubyGem", output.shift
76
- assert_equal " Name: some_gem", output.shift
77
- assert_equal " Version: 2", output.shift
78
- assert_equal " File: test.gem", output.shift
79
- assert_equal [], output
80
- end
81
-
82
- def test_handle_options_defaults
83
- @cmd.handle_options []
84
-
85
- refute @cmd.options[:force]
86
- refute @cmd.options[:strict]
87
- assert_nil @cmd.options[:output]
88
- end
89
-
90
- def test_execute
91
- gemspec_file = File.join(@tempdir, @gem.spec_name)
92
-
93
- File.open gemspec_file, "w" do |gs|
94
- gs.write @gem.to_ruby
95
- end
96
-
97
- @cmd.options[:args] = [gemspec_file]
98
-
99
- util_test_build_gem @gem
100
- end
101
-
102
- def test_execute_platform
103
- gemspec_file = File.join(@tempdir, @gem.spec_name)
104
-
105
- File.open gemspec_file, "w" do |gs|
106
- gs.write @gem.to_ruby
107
- end
108
-
109
- @cmd.options[:args] = [gemspec_file]
110
-
111
- platforms = Gem.platforms.dup
112
- begin
113
- Gem.platforms << Gem::Platform.new("java")
114
-
115
- spec = util_test_build_gem @gem, suffix: "java"
116
- ensure
117
- Gem.platforms.replace(platforms)
118
- end
119
- assert_match spec.platform, "java"
120
- end
121
-
122
- def test_execute_bad_name
123
- [".", "-", "_"].each do |special_char|
124
- gem = util_spec "some_gem_with_bad_name" do |s|
125
- s.name = "#{special_char}bad_gem_name"
126
- s.license = "AGPL-3.0"
127
- s.files = ["README.md"]
128
- end
129
-
130
- gemspec_file = File.join(@tempdir, gem.spec_name)
131
-
132
- File.open gemspec_file, "w" do |gs|
133
- gs.write gem.to_ruby
134
- end
135
-
136
- @cmd.options[:args] = [gemspec_file]
137
-
138
- use_ui @ui do
139
- Dir.chdir @tempdir do
140
- assert_raise Gem::InvalidSpecificationException do
141
- @cmd.execute
142
- end
143
- end
144
- end
145
- end
146
- end
147
-
148
- def test_execute_strict_without_warnings
149
- gemspec_file = File.join(@tempdir, @gem.spec_name)
150
-
151
- File.open gemspec_file, "w" do |gs|
152
- gs.write @gem.to_ruby
153
- end
154
-
155
- @cmd.options[:strict] = true
156
- @cmd.options[:args] = [gemspec_file]
157
-
158
- util_test_build_gem @gem
159
- end
160
-
161
- def test_execute_rubyforge_project_warning
162
- rubyforge_gemspec = File.expand_path File.join("specifications", "rubyforge-0.0.1.gemspec"), __dir__
163
-
164
- @cmd.options[:args] = [rubyforge_gemspec]
165
-
166
- use_ui @ui do
167
- Dir.chdir @tempdir do
168
- @cmd.execute
169
- end
170
- end
171
-
172
- error = @ui.error.split("\n")
173
- assert_equal "WARNING: rubyforge_project= is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.", error.shift
174
- assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
175
- assert_equal [], error
176
- end
177
-
178
- def test_execute_strict_with_warnings
179
- bad_gem = util_spec "some_bad_gem" do |s|
180
- s.files = ["README.md"]
181
- end
182
-
183
- gemspec_file = File.join(@tempdir, bad_gem.spec_name)
184
-
185
- File.open gemspec_file, "w" do |gs|
186
- gs.write bad_gem.to_ruby
187
- end
188
-
189
- @cmd.options[:args] = [gemspec_file]
190
- @cmd.options[:strict] = true
191
-
192
- use_ui @ui do
193
- Dir.chdir @tempdir do
194
- assert_raise Gem::InvalidSpecificationException do
195
- @cmd.execute
196
- end
197
- end
198
- end
199
-
200
- error = @ui.error.split "\n"
201
- assert_equal "WARNING: licenses is empty, but is recommended. Use a license identifier from", error.shift
202
- assert_equal "http://spdx.org/licenses or 'Nonstandard' for a nonstandard license,", error.shift
203
- assert_equal "or set it to nil if you don't want to specify a license.", error.shift
204
- assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
205
- assert_equal [], error
206
-
207
- gem_file = File.join @tempdir, File.basename(@gem.cache_file)
208
- refute File.exist?(gem_file)
209
- end
210
-
211
- def test_execute_bad_spec
212
- @gem.date = "2010-11-08"
213
-
214
- gemspec_file = File.join(@tempdir, @gem.spec_name)
215
-
216
- File.open gemspec_file, "w" do |gs|
217
- gs.write @gem.to_ruby.sub(/11-08/, "11-8")
218
- end
219
-
220
- @cmd.options[:args] = [gemspec_file]
221
-
222
- out, err = use_ui @ui do
223
- capture_output do
224
- assert_raise Gem::MockGemUi::TermError do
225
- @cmd.execute
226
- end
227
- end
228
- end
229
-
230
- assert_equal "", out
231
- assert_match(/invalid date format in specification/, err)
232
-
233
- assert_equal "", @ui.output
234
- assert_equal "ERROR: Error loading gemspec. Aborting.\n", @ui.error
235
- end
236
-
237
- def test_execute_missing_file
238
- @cmd.options[:args] = %w[some_gem]
239
- use_ui @ui do
240
- assert_raise Gem::MockGemUi::TermError do
241
- @cmd.execute
242
- end
243
- end
244
-
245
- assert_equal "", @ui.output
246
- assert_equal "ERROR: Couldn't find a gemspec file matching 'some_gem' in #{@tempdir}\n", @ui.error
247
- end
248
-
249
- def test_execute_outside_dir
250
- gemspec_dir = File.join @tempdir, "build_command_gem"
251
- gemspec_file = File.join gemspec_dir, @gem.spec_name
252
- readme_file = File.join gemspec_dir, "README.md"
253
-
254
- FileUtils.mkdir_p gemspec_dir
255
-
256
- File.open readme_file, "w" do |f|
257
- f.write "My awesome gem"
258
- end
259
-
260
- File.open gemspec_file, "w" do |gs|
261
- gs.write @gem.to_ruby
262
- end
263
-
264
- @cmd.options[:build_path] = gemspec_dir
265
- @cmd.options[:args] = [gemspec_file]
266
-
267
- use_ui @ui do
268
- @cmd.execute
269
- end
270
-
271
- output = @ui.output.split "\n"
272
- assert_equal " Successfully built RubyGem", output.shift
273
- assert_equal " Name: some_gem", output.shift
274
- assert_equal " Version: 2", output.shift
275
- assert_equal " File: some_gem-2.gem", output.shift
276
- assert_equal [], output
277
-
278
- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
279
- assert File.exist?(gem_file)
280
-
281
- spec = Gem::Package.new(gem_file).spec
282
-
283
- assert_equal "some_gem", spec.name
284
- assert_equal "this is a summary", spec.summary
285
- end
286
-
287
- def test_execute_outside_dir_with_glob_argument
288
- gemspec_dir = File.join @tempdir, "build_command_gem"
289
- gemspec_file = File.join gemspec_dir, @gem.spec_name
290
- readme_file = File.join gemspec_dir, "README.md"
291
-
292
- FileUtils.mkdir_p gemspec_dir
293
-
294
- File.open readme_file, "w" do |f|
295
- f.write "My awesome gem"
296
- end
297
-
298
- File.open gemspec_file, "w" do |gs|
299
- gs.write @gem.to_ruby
300
- end
301
-
302
- @cmd.options[:build_path] = gemspec_dir
303
- @cmd.options[:args] = ["*.gemspec"]
304
-
305
- use_ui @ui do
306
- @cmd.execute
307
- end
308
-
309
- output = @ui.output.split "\n"
310
- assert_equal " Successfully built RubyGem", output.shift
311
- assert_equal " Name: some_gem", output.shift
312
- assert_equal " Version: 2", output.shift
313
- assert_equal " File: some_gem-2.gem", output.shift
314
- assert_equal [], output
315
-
316
- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
317
- assert File.exist?(gem_file)
318
-
319
- spec = Gem::Package.new(gem_file).spec
320
-
321
- assert_equal "some_gem", spec.name
322
- assert_equal "this is a summary", spec.summary
323
- end
324
-
325
- def test_execute_outside_dir_no_gemspec_present
326
- gemspec_dir = File.join @tempdir, "build_command_gem"
327
- gemspec_file = File.join @tempdir, @gem.spec_name
328
- readme_file = File.join gemspec_dir, "README.md"
329
-
330
- FileUtils.mkdir_p gemspec_dir
331
-
332
- File.open readme_file, "w" do |f|
333
- f.write "My awesome gem"
334
- end
335
-
336
- File.open gemspec_file, "w" do |gs|
337
- gs.write @gem.to_ruby
338
- end
339
-
340
- @cmd.options[:build_path] = gemspec_dir
341
- @cmd.options[:args] = ["*.gemspec"]
342
-
343
- use_ui @ui do
344
- assert_raise Gem::MockGemUi::TermError do
345
- @cmd.execute
346
- end
347
- end
348
-
349
- assert_equal "", @ui.output
350
- assert_equal "ERROR: Couldn't find a gemspec file matching '*.gemspec' in #{gemspec_dir}\n", @ui.error
351
-
352
- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
353
- refute File.exist?(gem_file)
354
- end
355
-
356
- def test_execute_outside_dir_without_gem_name
357
- gemspec_dir = File.join(@tempdir, "build_command_gem")
358
- gemspec_file = File.join(gemspec_dir, @gem.spec_name)
359
-
360
- readme_file = File.join gemspec_dir, "README.md"
361
-
362
- FileUtils.mkdir_p(gemspec_dir)
363
-
364
- File.open readme_file, "w" do |f|
365
- f.write "My awesome gem"
366
- end
367
-
368
- File.open(gemspec_file, "w") do |gs|
369
- gs.write(@gem.to_ruby)
370
- end
371
-
372
- @cmd.options[:build_path] = gemspec_dir
373
- @cmd.options[:args] = []
374
-
375
- use_ui @ui do
376
- Dir.chdir(gemspec_dir) do
377
- @cmd.execute
378
- end
379
- end
380
-
381
- output = @ui.output.split("\n")
382
- assert_equal " Successfully built RubyGem", output.shift
383
- assert_equal " Name: some_gem", output.shift
384
- assert_equal " Version: 2", output.shift
385
- assert_equal " File: some_gem-2.gem", output.shift
386
- assert_equal [], output
387
-
388
- gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
389
- assert File.exist?(gem_file)
390
-
391
- spec = Gem::Package.new(gem_file).spec
392
-
393
- assert_equal "some_gem", spec.name
394
- assert_equal "this is a summary", spec.summary
395
- end
396
-
397
- def test_execute_outside_dir_with_external_gemspec
398
- gemspec_dir = File.join @tempdir, "gemspec_dir"
399
- gemspec_file = File.join gemspec_dir, @gem.spec_name
400
-
401
- gemcode_dir = File.join @tempdir, "build_command_gem"
402
- readme_file = File.join gemcode_dir, "README.md"
403
-
404
- FileUtils.mkdir_p gemspec_dir
405
- FileUtils.mkdir_p gemcode_dir
406
-
407
- File.open readme_file, "w" do |f|
408
- f.write "My awesome gem in nested directory"
409
- end
410
-
411
- File.open gemspec_file, "w" do |gs|
412
- gs.write @gem.to_ruby
413
- end
414
-
415
- @cmd.options[:build_path] = gemcode_dir
416
- @cmd.options[:args] = [gemspec_file]
417
-
418
- use_ui @ui do
419
- @cmd.execute
420
- end
421
-
422
- output = @ui.output.split "\n"
423
- assert_equal " Successfully built RubyGem", output.shift
424
- assert_equal " Name: some_gem", output.shift
425
- assert_equal " Version: 2", output.shift
426
- assert_equal " File: some_gem-2.gem", output.shift
427
- assert_equal [], output
428
-
429
- gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
430
- assert File.exist?(gem_file)
431
-
432
- spec = Gem::Package.new(gem_file).spec
433
-
434
- assert_equal "some_gem", spec.name
435
- assert_equal "this is a summary", spec.summary
436
- end
437
-
438
- def test_execute_outside_dir_with_external_relative_gemspec
439
- gemspec_dir = File.join @tempdir, "gemspec_dir"
440
- gemspec_file = File.join gemspec_dir, @gem.spec_name
441
-
442
- gemcode_dir = File.join @tempdir, "build_command_gem"
443
- readme_file = File.join gemcode_dir, "README.md"
444
-
445
- FileUtils.mkdir_p gemspec_dir
446
- FileUtils.mkdir_p gemcode_dir
447
-
448
- File.open readme_file, "w" do |f|
449
- f.write "My awesome gem in nested directory"
450
- end
451
-
452
- File.open gemspec_file, "w" do |gs|
453
- gs.write @gem.to_ruby
454
- end
455
-
456
- @cmd.options[:build_path] = gemcode_dir
457
- @cmd.options[:args] = [File.join("..", "gemspec_dir", @gem.spec_name)]
458
-
459
- use_ui @ui do
460
- @cmd.execute
461
- end
462
-
463
- output = @ui.output.split "\n"
464
- assert_equal " Successfully built RubyGem", output.shift
465
- assert_equal " Name: some_gem", output.shift
466
- assert_equal " Version: 2", output.shift
467
- assert_equal " File: some_gem-2.gem", output.shift
468
- assert_equal [], output
469
-
470
- gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
471
- assert File.exist?(gem_file)
472
-
473
- spec = Gem::Package.new(gem_file).spec
474
-
475
- assert_equal "some_gem", spec.name
476
- assert_equal "this is a summary", spec.summary
477
- end
478
-
479
- def test_can_find_gemspecs_without_dot_gemspec
480
- gemspec_file = File.join(@tempdir, @gem.name)
481
-
482
- File.open gemspec_file + ".gemspec", "w" do |gs|
483
- gs.write @gem.to_ruby
484
- end
485
-
486
- @cmd.options[:args] = [gemspec_file]
487
-
488
- util_test_build_gem @gem
489
- end
490
-
491
- def test_execute_without_gem_name
492
- some_gem = util_spec "some_gem"
493
- gemspec_dir = File.join(@tempdir, "build_command_gem")
494
- gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
495
-
496
- FileUtils.mkdir_p(gemspec_dir)
497
-
498
- File.open(gemspec_file, "w") do |gs|
499
- gs.write(some_gem.to_ruby)
500
- end
501
-
502
- @cmd.options[:args] = []
503
-
504
- use_ui @ui do
505
- Dir.chdir(gemspec_dir) do
506
- @cmd.execute
507
- end
508
- end
509
-
510
- output = @ui.output.split("\n")
511
- assert_equal " Successfully built RubyGem", output.shift
512
- assert_equal " Name: some_gem", output.shift
513
- assert_equal " Version: 2", output.shift
514
- assert_equal " File: some_gem-2.gem", output.shift
515
- assert_equal [], output
516
-
517
- some_gem = File.join(gemspec_dir, File.basename(some_gem.cache_file))
518
- assert File.exist?(some_gem)
519
- end
520
-
521
- def test_execute_multiple_gemspec_without_gem_name
522
- some_gem = util_spec "some_gem"
523
- another_gem = util_spec "another_gem"
524
- gemspec_dir = File.join(@tempdir, "build_command_gem")
525
- gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
526
- another_gemspec_file = File.join(gemspec_dir, another_gem.spec_name)
527
-
528
- FileUtils.mkdir_p(gemspec_dir)
529
-
530
- File.open(gemspec_file, "w") do |gs|
531
- gs.write(some_gem.to_ruby)
532
- end
533
-
534
- File.open(another_gemspec_file, "w") do |gs|
535
- gs.write(another_gem.to_ruby)
536
- end
537
-
538
- @cmd.options[:args] = []
539
-
540
- use_ui @ui do
541
- Dir.chdir(gemspec_dir) do
542
- assert_raise Gem::MockGemUi::TermError do
543
- @cmd.execute
544
- end
545
- end
546
- end
547
-
548
- gemspecs = ["another_gem-2.gemspec", "some_gem-2.gemspec"]
549
- assert_equal "", @ui.output
550
- assert_equal @ui.error, "ERROR: Multiple gemspecs found: #{gemspecs}, please specify one\n"
551
-
552
- expected_gem = File.join(gemspec_dir, File.basename(another_gem.cache_file))
553
- refute File.exist?(expected_gem)
554
- end
555
-
556
- def util_test_build_gem(gem, suffix: nil)
557
- use_ui @ui do
558
- Dir.chdir @tempdir do
559
- @cmd.execute
560
- end
561
- end
562
- suffix &&= "-#{suffix}"
563
- gem_file = "some_gem-2#{suffix}.gem"
564
- output = @ui.output.split "\n"
565
- assert_equal " Successfully built RubyGem", output.shift
566
- assert_equal " Name: some_gem", output.shift
567
- assert_equal " Version: 2", output.shift
568
- assert_equal " File: #{gem_file}", output.shift
569
- assert_equal [], output
570
-
571
- gem_file = File.join(@tempdir, gem_file)
572
- assert File.exist?(gem_file)
573
-
574
- spec = Gem::Package.new(gem_file).spec
575
-
576
- assert_equal "some_gem", spec.name
577
- assert_equal "this is a summary", spec.summary
578
- spec
579
- end
580
-
581
- def test_execute_force
582
- gemspec_file = File.join(@tempdir, @gem.spec_name)
583
-
584
- @gem.send :remove_instance_variable, :@rubygems_version
585
-
586
- File.open gemspec_file, "w" do |gs|
587
- gs.write @gem.to_ruby
588
- end
589
-
590
- @cmd.options[:args] = [gemspec_file]
591
- @cmd.options[:force] = true
592
-
593
- util_test_build_gem @gem
594
- end
595
-
596
- def test_build_signed_gem
597
- pend "openssl is missing" unless Gem::HAVE_OPENSSL && !java_platform?
598
-
599
- trust_dir = Gem::Security.trust_dir
600
-
601
- spec = util_spec "some_gem" do |s|
602
- s.signing_key = SIGNING_KEY
603
- s.cert_chain = [CERT_FILE]
604
- end
605
-
606
- gemspec_file = File.join(@tempdir, spec.spec_name)
607
-
608
- File.open gemspec_file, "w" do |gs|
609
- gs.write spec.to_ruby
610
- end
611
-
612
- @cmd.options[:args] = [gemspec_file]
613
-
614
- util_test_build_gem spec
615
-
616
- trust_dir.trust_cert OpenSSL::X509::Certificate.new(File.read(CERT_FILE))
617
-
618
- gem = Gem::Package.new(File.join(@tempdir, spec.file_name),
619
- Gem::Security::HighSecurity)
620
- assert gem.verify
621
- end
622
-
623
- def test_build_signed_gem_with_cert_expiration_length_days
624
- pend "openssl is missing" unless Gem::HAVE_OPENSSL && !java_platform?
625
-
626
- gem_path = File.join Gem.user_home, ".gem"
627
- Dir.mkdir gem_path
628
-
629
- Gem::Security.trust_dir
630
-
631
- tmp_expired_cert_file = File.join gem_path, "gem-public_cert.pem"
632
- File.write(tmp_expired_cert_file, File.read(EXPIRED_CERT_FILE))
633
-
634
- tmp_private_key_file = File.join gem_path, "gem-private_key.pem"
635
- File.write(tmp_private_key_file, File.read(PRIVATE_KEY_FILE))
636
-
637
- spec = util_spec "some_gem" do |s|
638
- s.signing_key = tmp_private_key_file
639
- s.cert_chain = [tmp_expired_cert_file]
640
- end
641
-
642
- gemspec_file = File.join(@tempdir, spec.spec_name)
643
-
644
- File.open gemspec_file, "w" do |gs|
645
- gs.write spec.to_ruby
646
- end
647
-
648
- @cmd.options[:args] = [gemspec_file]
649
-
650
- Gem.configuration.cert_expiration_length_days = 28
651
-
652
- use_ui @ui do
653
- Dir.chdir @tempdir do
654
- @cmd.execute
655
- end
656
- end
657
-
658
- re_signed_cert = OpenSSL::X509::Certificate.new(File.read(tmp_expired_cert_file))
659
- cert_days_to_expire = (re_signed_cert.not_after - re_signed_cert.not_before).to_i / (24 * 60 * 60)
660
-
661
- gem_file = File.join @tempdir, File.basename(spec.cache_file)
662
-
663
- assert File.exist?(gem_file)
664
- assert_equal(28, cert_days_to_expire)
665
- end
666
-
667
- def test_build_auto_resign_cert
668
- pend "openssl is missing" unless Gem::HAVE_OPENSSL && !java_platform?
669
-
670
- gem_path = File.join Gem.user_home, ".gem"
671
- Dir.mkdir gem_path
672
-
673
- Gem::Security.trust_dir
674
-
675
- tmp_expired_cert_file = File.join gem_path, "gem-public_cert.pem"
676
- File.write(tmp_expired_cert_file, File.read(EXPIRED_CERT_FILE))
677
-
678
- tmp_private_key_file = File.join gem_path, "gem-private_key.pem"
679
- File.write(tmp_private_key_file, File.read(PRIVATE_KEY_FILE))
680
-
681
- spec = util_spec "some_gem" do |s|
682
- s.signing_key = tmp_private_key_file
683
- s.cert_chain = [tmp_expired_cert_file]
684
- end
685
-
686
- gemspec_file = File.join(@tempdir, spec.spec_name)
687
-
688
- File.open gemspec_file, "w" do |gs|
689
- gs.write spec.to_ruby
690
- end
691
-
692
- @cmd.options[:args] = [gemspec_file]
693
-
694
- Gem.configuration.cert_expiration_length_days = 28
695
-
696
- use_ui @ui do
697
- Dir.chdir @tempdir do
698
- @cmd.execute
699
- end
700
- end
701
-
702
- output = @ui.output.split "\n"
703
- assert_equal "INFO: Your certificate has expired, trying to re-sign it...", output.shift
704
- assert_equal "INFO: Your cert: #{tmp_expired_cert_file } has been auto re-signed with the key: #{tmp_private_key_file}", output.shift
705
- assert_match(/INFO: Your expired cert will be located at: .+\Wgem-public_cert\.pem\.expired\.[0-9]+/, output.shift)
706
- end
707
-
708
- def test_build_is_reproducible
709
- epoch = ENV["SOURCE_DATE_EPOCH"]
710
- new_epoch = Time.now.to_i.to_s
711
- ENV["SOURCE_DATE_EPOCH"] = new_epoch
712
-
713
- gem_file = File.basename(@gem.cache_file)
714
-
715
- gemspec_file = File.join(@tempdir, @gem.spec_name)
716
- File.write(gemspec_file, @gem.to_ruby)
717
- @cmd.options[:args] = [gemspec_file]
718
-
719
- util_test_build_gem @gem
720
-
721
- build1_contents = File.read(gem_file)
722
-
723
- # Guarantee the time has changed.
724
- sleep 1 if Time.now.to_i == new_epoch
725
-
726
- ENV["SOURCE_DATE_EPOCH"] = new_epoch
727
-
728
- @ui = Gem::MockGemUi.new
729
- @cmd.options[:args] = [gemspec_file]
730
-
731
- util_test_build_gem @gem
732
-
733
- build2_contents = File.read(gem_file)
734
-
735
- assert_equal build1_contents, build2_contents
736
- ensure
737
- ENV["SOURCE_DATE_EPOCH"] = epoch
738
- end
739
- end