rubygems-update 3.0.3 → 3.4.7

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 (795) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5556 -0
  3. data/CODE_OF_CONDUCT.md +62 -24
  4. data/CONTRIBUTING.md +111 -21
  5. data/MAINTAINERS.txt +1 -6
  6. data/Manifest.txt +209 -101
  7. data/POLICIES.md +65 -22
  8. data/README.md +23 -15
  9. data/UPGRADING.md +5 -81
  10. data/bin/gem +2 -16
  11. data/bin/update_rubygems +5 -5
  12. data/bundler/CHANGELOG.md +2619 -1256
  13. data/bundler/LICENSE.md +18 -19
  14. data/bundler/README.md +11 -12
  15. data/bundler/UPGRADING.md +222 -0
  16. data/bundler/bundler.gemspec +13 -33
  17. data/bundler/exe/bundle +26 -11
  18. data/bundler/exe/bundler +1 -1
  19. data/bundler/lib/bundler/.document +1 -0
  20. data/bundler/lib/bundler/build_metadata.rb +5 -13
  21. data/bundler/lib/bundler/capistrano.rb +4 -4
  22. data/bundler/lib/bundler/cli/add.rb +28 -16
  23. data/bundler/lib/bundler/cli/binstubs.rb +11 -3
  24. data/bundler/lib/bundler/cli/cache.rb +24 -17
  25. data/bundler/lib/bundler/cli/check.rb +5 -3
  26. data/bundler/lib/bundler/cli/clean.rb +1 -1
  27. data/bundler/lib/bundler/cli/common.rb +41 -13
  28. data/bundler/lib/bundler/cli/config.rb +170 -86
  29. data/bundler/lib/bundler/cli/console.rb +3 -3
  30. data/bundler/lib/bundler/cli/doctor.rb +27 -10
  31. data/bundler/lib/bundler/cli/exec.rb +8 -25
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +261 -48
  34. data/bundler/lib/bundler/cli/info.rb +52 -8
  35. data/bundler/lib/bundler/cli/init.rb +7 -3
  36. data/bundler/lib/bundler/cli/inject.rb +1 -1
  37. data/bundler/lib/bundler/cli/install.rb +38 -66
  38. data/bundler/lib/bundler/cli/issue.rb +8 -7
  39. data/bundler/lib/bundler/cli/list.rb +19 -11
  40. data/bundler/lib/bundler/cli/lock.rb +11 -4
  41. data/bundler/lib/bundler/cli/open.rb +14 -9
  42. data/bundler/lib/bundler/cli/outdated.rb +152 -121
  43. data/bundler/lib/bundler/cli/platform.rb +2 -2
  44. data/bundler/lib/bundler/cli/plugin.rb +19 -2
  45. data/bundler/lib/bundler/cli/pristine.rb +6 -1
  46. data/bundler/lib/bundler/cli/remove.rb +1 -2
  47. data/bundler/lib/bundler/cli/show.rb +3 -3
  48. data/bundler/lib/bundler/cli/update.rb +49 -18
  49. data/bundler/lib/bundler/cli/viz.rb +1 -1
  50. data/bundler/lib/bundler/cli.rb +269 -165
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +7 -24
  52. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  53. data/bundler/lib/bundler/compact_index_client/updater.rb +58 -57
  54. data/bundler/lib/bundler/compact_index_client.rb +28 -18
  55. data/bundler/lib/bundler/constants.rb +1 -1
  56. data/bundler/lib/bundler/current_ruby.rb +26 -11
  57. data/bundler/lib/bundler/definition.rb +359 -441
  58. data/bundler/lib/bundler/dependency.rb +29 -71
  59. data/bundler/lib/bundler/deployment.rb +1 -1
  60. data/bundler/lib/bundler/digest.rb +71 -0
  61. data/bundler/lib/bundler/dsl.rb +84 -116
  62. data/bundler/lib/bundler/endpoint_specification.rb +20 -14
  63. data/bundler/lib/bundler/env.rb +10 -15
  64. data/bundler/lib/bundler/environment_preserver.rb +30 -3
  65. data/bundler/lib/bundler/errors.rb +31 -14
  66. data/bundler/lib/bundler/feature_flag.rb +13 -33
  67. data/bundler/lib/bundler/fetcher/base.rb +7 -9
  68. data/bundler/lib/bundler/fetcher/compact_index.rb +46 -39
  69. data/bundler/lib/bundler/fetcher/dependency.rb +2 -2
  70. data/bundler/lib/bundler/fetcher/downloader.rb +15 -12
  71. data/bundler/lib/bundler/fetcher/index.rb +4 -30
  72. data/bundler/lib/bundler/fetcher.rb +39 -41
  73. data/bundler/lib/bundler/force_platform.rb +18 -0
  74. data/bundler/lib/bundler/friendly_errors.rb +49 -54
  75. data/bundler/lib/bundler/gem_helper.rb +79 -43
  76. data/bundler/lib/bundler/gem_helpers.rb +44 -28
  77. data/bundler/lib/bundler/gem_tasks.rb +1 -1
  78. data/bundler/lib/bundler/gem_version_promoter.rb +54 -99
  79. data/bundler/lib/bundler/graph.rb +5 -5
  80. data/bundler/lib/bundler/index.rb +14 -52
  81. data/bundler/lib/bundler/injector.rb +50 -16
  82. data/bundler/lib/bundler/inline.rb +28 -29
  83. data/bundler/lib/bundler/installer/gem_installer.rb +22 -23
  84. data/bundler/lib/bundler/installer/parallel_installer.rb +51 -51
  85. data/bundler/lib/bundler/installer/standalone.rb +62 -12
  86. data/bundler/lib/bundler/installer.rb +46 -97
  87. data/bundler/lib/bundler/lazy_specification.rb +88 -48
  88. data/bundler/lib/bundler/lockfile_generator.rb +3 -3
  89. data/bundler/lib/bundler/lockfile_parser.rb +30 -62
  90. data/bundler/{man → lib/bundler/man}/bundle-add.1 +29 -5
  91. data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +22 -4
  92. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +6 -4
  93. data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
  94. data/bundler/lib/bundler/man/bundle-cache.1 +61 -0
  95. data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -15
  96. data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
  97. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +2 -2
  98. data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +1 -1
  99. data/bundler/{man → lib/bundler/man}/bundle-config.1 +78 -60
  100. data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +96 -85
  101. data/bundler/lib/bundler/man/bundle-console.1 +53 -0
  102. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  103. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
  104. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +6 -6
  105. data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +6 -6
  106. data/bundler/lib/bundler/man/bundle-gem.1 +105 -0
  107. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  108. data/bundler/lib/bundler/man/bundle-help.1 +13 -0
  109. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  110. data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
  111. data/bundler/{man → lib/bundler/man}/bundle-init.1 +6 -2
  112. data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +3 -1
  113. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +5 -2
  114. data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +3 -1
  115. data/bundler/{man → lib/bundler/man}/bundle-install.1 +42 -37
  116. data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +42 -38
  117. data/bundler/{man → lib/bundler/man}/bundle-list.1 +7 -7
  118. data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
  119. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
  120. data/bundler/{man → lib/bundler/man}/bundle-open.1 +22 -2
  121. data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +9 -1
  122. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +3 -10
  123. data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +1 -10
  124. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +16 -6
  125. data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +14 -7
  126. data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
  127. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  128. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
  129. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
  130. data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
  131. data/bundler/{man → lib/bundler/man}/bundle-update.1 +8 -8
  132. data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +8 -7
  133. data/bundler/lib/bundler/man/bundle-version.1 +35 -0
  134. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  135. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +4 -1
  136. data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +2 -0
  137. data/bundler/{man → lib/bundler/man}/bundle.1 +17 -12
  138. data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +14 -9
  139. data/bundler/lib/bundler/man/gemfile.5 +723 -0
  140. data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +112 -95
  141. data/bundler/lib/bundler/man/index.txt +29 -0
  142. data/bundler/lib/bundler/match_metadata.rb +13 -0
  143. data/bundler/lib/bundler/match_platform.rb +1 -2
  144. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  145. data/bundler/lib/bundler/mirror.rb +10 -12
  146. data/bundler/lib/bundler/plugin/api/source.rb +29 -15
  147. data/bundler/lib/bundler/plugin/api.rb +1 -1
  148. data/bundler/lib/bundler/plugin/dsl.rb +1 -1
  149. data/bundler/lib/bundler/plugin/index.rb +31 -8
  150. data/bundler/lib/bundler/plugin/installer/git.rb +0 -4
  151. data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -9
  152. data/bundler/lib/bundler/plugin/installer.rb +35 -22
  153. data/bundler/lib/bundler/plugin/source_list.rb +5 -1
  154. data/bundler/lib/bundler/plugin.rb +102 -42
  155. data/bundler/lib/bundler/process_lock.rb +1 -1
  156. data/bundler/lib/bundler/remote_specification.rb +15 -8
  157. data/bundler/lib/bundler/resolver/base.rb +77 -0
  158. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  159. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  160. data/bundler/lib/bundler/resolver/package.rb +72 -0
  161. data/bundler/lib/bundler/resolver/root.rb +25 -0
  162. data/bundler/lib/bundler/resolver/spec_group.rb +49 -73
  163. data/bundler/lib/bundler/resolver.rb +343 -300
  164. data/bundler/lib/bundler/retry.rb +4 -4
  165. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  166. data/bundler/lib/bundler/ruby_version.rb +9 -37
  167. data/bundler/lib/bundler/rubygems_ext.rb +235 -92
  168. data/bundler/lib/bundler/rubygems_gem_installer.rb +87 -21
  169. data/bundler/lib/bundler/rubygems_integration.rb +179 -515
  170. data/bundler/lib/bundler/runtime.rb +25 -40
  171. data/bundler/lib/bundler/self_manager.rb +168 -0
  172. data/bundler/lib/bundler/settings.rb +162 -118
  173. data/bundler/lib/bundler/setup.rb +11 -12
  174. data/bundler/lib/bundler/shared_helpers.rb +61 -102
  175. data/bundler/lib/bundler/similarity_detector.rb +3 -3
  176. data/bundler/lib/bundler/source/git/git_proxy.rb +257 -128
  177. data/bundler/lib/bundler/source/git.rb +84 -61
  178. data/bundler/lib/bundler/source/metadata.rb +9 -9
  179. data/bundler/lib/bundler/source/path/installer.rb +11 -32
  180. data/bundler/lib/bundler/source/path.rb +28 -17
  181. data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
  182. data/bundler/lib/bundler/source/rubygems.rb +171 -197
  183. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  184. data/bundler/lib/bundler/source.rb +30 -10
  185. data/bundler/lib/bundler/source_list.rb +112 -67
  186. data/bundler/lib/bundler/source_map.rb +71 -0
  187. data/bundler/lib/bundler/spec_set.rb +86 -72
  188. data/bundler/lib/bundler/stub_specification.rb +45 -37
  189. data/bundler/lib/bundler/templates/Executable +3 -5
  190. data/bundler/lib/bundler/templates/Executable.bundler +21 -17
  191. data/bundler/lib/bundler/templates/Executable.standalone +4 -4
  192. data/bundler/lib/bundler/templates/Gemfile +0 -2
  193. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  194. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  195. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  196. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +22 -2
  197. data/bundler/lib/bundler/templates/newgem/README.md.tt +13 -15
  198. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +33 -5
  199. data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
  200. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -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.rb.tt → extconf-c.rb.tt} +2 -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/src/lib.rs.tt +12 -0
  205. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  206. data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
  207. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  208. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  209. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
  210. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +36 -41
  211. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  212. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  213. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  214. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  215. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  216. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  217. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/test_newgem.rb.tt} +3 -1
  218. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  219. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  220. data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
  221. data/bundler/lib/bundler/ui/shell.rb +39 -20
  222. data/bundler/lib/bundler/ui/silent.rb +21 -5
  223. data/bundler/lib/bundler/ui.rb +3 -3
  224. data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
  225. data/bundler/lib/bundler/vendor/.document +1 -0
  226. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  227. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  228. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  229. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  230. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +128 -0
  231. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  232. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1493 -425
  233. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  234. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  235. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  236. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  237. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
  238. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  239. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  240. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  241. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  242. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +155 -0
  243. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  244. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  245. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  246. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  247. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  248. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  249. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  250. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  251. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  252. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +243 -0
  253. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  254. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  255. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  256. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  257. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
  258. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  259. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +25 -14
  260. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +20 -10
  261. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +34 -15
  262. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
  263. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  264. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +6 -0
  265. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +83 -0
  266. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  267. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  268. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  269. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  270. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  271. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  272. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
  273. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
  274. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +40 -6
  275. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  276. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  277. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
  278. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +88 -13
  279. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
  280. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
  281. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
  282. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
  283. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  284. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
  285. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  286. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +452 -0
  287. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  288. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +729 -0
  289. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  290. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  291. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1587 -0
  292. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  293. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  294. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  295. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  296. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  297. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  298. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +119 -0
  299. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  300. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  301. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  302. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  303. data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
  304. data/bundler/lib/bundler/vendored_persistent.rb +2 -39
  305. data/bundler/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
  306. data/bundler/lib/bundler/vendored_thor.rb +2 -2
  307. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  308. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  309. data/bundler/lib/bundler/version.rb +5 -20
  310. data/bundler/lib/bundler/vlad.rb +2 -2
  311. data/bundler/lib/bundler/worker.rb +26 -15
  312. data/bundler/lib/bundler/yaml_serializer.rb +3 -4
  313. data/bundler/lib/bundler.rb +285 -183
  314. data/hide_lib_for_update/note.txt +0 -4
  315. data/lib/rubygems/available_set.rb +7 -8
  316. data/lib/rubygems/basic_specification.rb +44 -31
  317. data/lib/rubygems/bundler_version_finder.rb +28 -50
  318. data/lib/rubygems/command.rb +104 -46
  319. data/lib/rubygems/command_manager.rb +35 -16
  320. data/lib/rubygems/commands/build_command.rb +77 -26
  321. data/lib/rubygems/commands/cert_command.rb +78 -76
  322. data/lib/rubygems/commands/check_command.rb +20 -22
  323. data/lib/rubygems/commands/cleanup_command.rb +36 -32
  324. data/lib/rubygems/commands/contents_command.rb +16 -18
  325. data/lib/rubygems/commands/dependency_command.rb +39 -50
  326. data/lib/rubygems/commands/environment_command.rb +11 -13
  327. data/lib/rubygems/commands/fetch_command.rb +33 -16
  328. data/lib/rubygems/commands/generate_index_command.rb +18 -17
  329. data/lib/rubygems/commands/help_command.rb +7 -7
  330. data/lib/rubygems/commands/info_command.rb +11 -6
  331. data/lib/rubygems/commands/install_command.rb +45 -79
  332. data/lib/rubygems/commands/list_command.rb +9 -8
  333. data/lib/rubygems/commands/lock_command.rb +7 -9
  334. data/lib/rubygems/commands/mirror_command.rb +3 -4
  335. data/lib/rubygems/commands/open_command.rb +11 -14
  336. data/lib/rubygems/commands/outdated_command.rb +5 -6
  337. data/lib/rubygems/commands/owner_command.rb +29 -22
  338. data/lib/rubygems/commands/pristine_command.rb +61 -51
  339. data/lib/rubygems/commands/push_command.rb +26 -63
  340. data/lib/rubygems/commands/query_command.rb +21 -337
  341. data/lib/rubygems/commands/rdoc_command.rb +26 -26
  342. data/lib/rubygems/commands/search_command.rb +8 -8
  343. data/lib/rubygems/commands/server_command.rb +16 -77
  344. data/lib/rubygems/commands/setup_command.rb +282 -241
  345. data/lib/rubygems/commands/signin_command.rb +9 -10
  346. data/lib/rubygems/commands/signout_command.rb +7 -9
  347. data/lib/rubygems/commands/sources_command.rb +42 -26
  348. data/lib/rubygems/commands/specification_command.rb +25 -20
  349. data/lib/rubygems/commands/stale_command.rb +3 -3
  350. data/lib/rubygems/commands/uninstall_command.rb +58 -49
  351. data/lib/rubygems/commands/unpack_command.rb +15 -44
  352. data/lib/rubygems/commands/update_command.rb +133 -81
  353. data/lib/rubygems/commands/which_command.rb +8 -11
  354. data/lib/rubygems/commands/yank_command.rb +22 -19
  355. data/lib/rubygems/compatibility.rb +7 -5
  356. data/lib/rubygems/config_file.rb +101 -47
  357. data/lib/rubygems/core_ext/kernel_gem.rb +8 -12
  358. data/lib/rubygems/core_ext/kernel_require.rb +124 -83
  359. data/lib/rubygems/core_ext/kernel_warn.rb +35 -30
  360. data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
  361. data/lib/rubygems/defaults.rb +131 -55
  362. data/lib/rubygems/dependency.rb +44 -27
  363. data/lib/rubygems/dependency_installer.rb +49 -205
  364. data/lib/rubygems/dependency_list.rb +24 -25
  365. data/lib/rubygems/deprecate.rb +106 -12
  366. data/lib/rubygems/doctor.rb +22 -22
  367. data/lib/rubygems/errors.rb +8 -14
  368. data/lib/rubygems/exceptions.rb +35 -33
  369. data/lib/rubygems/ext/build_error.rb +2 -0
  370. data/lib/rubygems/ext/builder.rb +71 -95
  371. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  372. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  373. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  374. data/lib/rubygems/ext/configure_builder.rb +5 -8
  375. data/lib/rubygems/ext/ext_conf_builder.rb +45 -65
  376. data/lib/rubygems/ext/rake_builder.rb +7 -10
  377. data/lib/rubygems/ext.rb +7 -6
  378. data/lib/rubygems/gem_runner.rb +15 -26
  379. data/lib/rubygems/gemcutter_utilities.rb +179 -54
  380. data/lib/rubygems/indexer.rb +38 -53
  381. data/lib/rubygems/install_default_message.rb +2 -2
  382. data/lib/rubygems/install_message.rb +2 -2
  383. data/lib/rubygems/install_update_options.rb +73 -64
  384. data/lib/rubygems/installer.rb +230 -173
  385. data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
  386. data/lib/rubygems/local_remote_options.rb +22 -24
  387. data/lib/rubygems/mock_gem_ui.rb +2 -5
  388. data/lib/rubygems/name_tuple.rb +10 -14
  389. data/lib/rubygems/openssl.rb +7 -0
  390. data/lib/rubygems/optparse/.document +1 -0
  391. data/lib/rubygems/optparse/COPYING +56 -0
  392. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  393. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  394. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  395. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  396. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  397. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  398. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  399. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  400. data/lib/rubygems/optparse/lib/optparse.rb +2308 -0
  401. data/lib/rubygems/optparse.rb +3 -0
  402. data/lib/rubygems/package/digest_io.rb +0 -2
  403. data/lib/rubygems/package/file_source.rb +2 -4
  404. data/lib/rubygems/package/io_source.rb +4 -2
  405. data/lib/rubygems/package/old.rb +9 -11
  406. data/lib/rubygems/package/tar_header.rb +73 -66
  407. data/lib/rubygems/package/tar_reader/entry.rb +8 -9
  408. data/lib/rubygems/package/tar_reader.rb +16 -13
  409. data/lib/rubygems/package/tar_writer.rb +12 -22
  410. data/lib/rubygems/package.rb +142 -125
  411. data/lib/rubygems/package_task.rb +5 -11
  412. data/lib/rubygems/path_support.rb +3 -8
  413. data/lib/rubygems/platform.rb +113 -73
  414. data/lib/rubygems/psych_tree.rb +1 -1
  415. data/lib/rubygems/query_utils.rb +351 -0
  416. data/lib/rubygems/rdoc.rb +4 -16
  417. data/lib/rubygems/remote_fetcher.rb +64 -136
  418. data/lib/rubygems/request/connection_pools.rb +7 -11
  419. data/lib/rubygems/request/http_pool.rb +2 -3
  420. data/lib/rubygems/request.rb +31 -32
  421. data/lib/rubygems/request_set/gem_dependency_api.rb +135 -136
  422. data/lib/rubygems/request_set/lockfile/parser.rb +28 -28
  423. data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -5
  424. data/lib/rubygems/request_set/lockfile.rb +21 -20
  425. data/lib/rubygems/request_set.rb +30 -43
  426. data/lib/rubygems/requirement.rb +42 -64
  427. data/lib/rubygems/resolver/activation_request.rb +29 -53
  428. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  429. data/lib/rubygems/resolver/api_set.rb +33 -26
  430. data/lib/rubygems/resolver/api_specification.rb +30 -16
  431. data/lib/rubygems/resolver/best_set.rb +9 -11
  432. data/lib/rubygems/resolver/composed_set.rb +3 -5
  433. data/lib/rubygems/resolver/conflict.rb +12 -19
  434. data/lib/rubygems/resolver/current_set.rb +0 -2
  435. data/lib/rubygems/resolver/dependency_request.rb +3 -5
  436. data/lib/rubygems/resolver/git_set.rb +2 -4
  437. data/lib/rubygems/resolver/git_specification.rb +6 -8
  438. data/lib/rubygems/resolver/index_set.rb +4 -6
  439. data/lib/rubygems/resolver/index_specification.rb +38 -7
  440. data/lib/rubygems/resolver/installed_specification.rb +4 -6
  441. data/lib/rubygems/resolver/installer_set.rb +69 -27
  442. data/lib/rubygems/resolver/local_specification.rb +2 -4
  443. data/lib/rubygems/resolver/lock_set.rb +7 -9
  444. data/lib/rubygems/resolver/lock_specification.rb +6 -8
  445. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  446. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  447. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
  448. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  449. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
  450. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
  451. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
  452. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
  453. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
  454. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
  455. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
  456. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
  457. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +42 -9
  458. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +82 -8
  459. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  460. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  461. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  462. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
  463. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  464. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
  465. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  466. data/lib/rubygems/resolver/molinillo.rb +1 -1
  467. data/lib/rubygems/resolver/requirement_list.rb +0 -1
  468. data/lib/rubygems/resolver/set.rb +0 -3
  469. data/lib/rubygems/resolver/source_set.rb +0 -2
  470. data/lib/rubygems/resolver/spec_specification.rb +14 -2
  471. data/lib/rubygems/resolver/specification.rb +14 -3
  472. data/lib/rubygems/resolver/vendor_set.rb +1 -3
  473. data/lib/rubygems/resolver/vendor_specification.rb +3 -5
  474. data/lib/rubygems/resolver.rb +58 -54
  475. data/lib/rubygems/s3_uri_signer.rb +175 -0
  476. data/lib/rubygems/safe_yaml.rb +14 -16
  477. data/lib/rubygems/security/policies.rb +47 -47
  478. data/lib/rubygems/security/policy.rb +25 -29
  479. data/lib/rubygems/security/signer.rb +16 -18
  480. data/lib/rubygems/security/trust_dir.rb +5 -6
  481. data/lib/rubygems/security.rb +90 -69
  482. data/lib/rubygems/security_option.rb +7 -8
  483. data/lib/rubygems/source/git.rb +30 -30
  484. data/lib/rubygems/source/installed.rb +1 -3
  485. data/lib/rubygems/source/local.rb +4 -6
  486. data/lib/rubygems/source/lock.rb +0 -2
  487. data/lib/rubygems/source/specific_file.rb +1 -3
  488. data/lib/rubygems/source/vendor.rb +0 -2
  489. data/lib/rubygems/source.rb +50 -38
  490. data/lib/rubygems/source_list.rb +9 -13
  491. data/lib/rubygems/spec_fetcher.rb +52 -64
  492. data/lib/rubygems/specification.rb +432 -463
  493. data/lib/rubygems/specification_policy.rb +185 -87
  494. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  495. data/lib/rubygems/stub_specification.rb +24 -29
  496. data/lib/rubygems/text.rb +21 -21
  497. data/lib/rubygems/tsort/.document +1 -0
  498. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  499. data/lib/rubygems/tsort/lib/tsort.rb +452 -0
  500. data/lib/rubygems/tsort.rb +3 -0
  501. data/lib/rubygems/uninstaller.rb +110 -57
  502. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  503. data/lib/rubygems/update_suggestion.rb +69 -0
  504. data/lib/rubygems/uri.rb +126 -0
  505. data/lib/rubygems/uri_formatter.rb +2 -4
  506. data/lib/rubygems/user_interaction.rb +46 -49
  507. data/lib/rubygems/util/licenses.rb +511 -404
  508. data/lib/rubygems/util.rb +40 -56
  509. data/lib/rubygems/validator.rb +15 -37
  510. data/lib/rubygems/version.rb +48 -29
  511. data/lib/rubygems/version_option.rb +11 -5
  512. data/lib/rubygems.rb +305 -332
  513. data/rubygems-update.gemspec +6 -13
  514. data/setup.rb +11 -22
  515. data/test/rubygems/alternate_cert.pem +14 -14
  516. data/test/rubygems/alternate_cert_32.pem +15 -15
  517. data/test/rubygems/alternate_key.pem +25 -25
  518. data/test/rubygems/bundler_test_gem.rb +419 -0
  519. data/test/rubygems/ca_cert.pem +74 -65
  520. data/test/rubygems/child_cert.pem +15 -16
  521. data/test/rubygems/child_cert_32.pem +15 -16
  522. data/test/rubygems/child_key.pem +25 -25
  523. data/test/rubygems/client.pem +103 -45
  524. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  525. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  526. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  527. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  528. data/test/rubygems/encrypted_private_key.pem +26 -26
  529. data/test/rubygems/expired_cert.pem +15 -15
  530. data/test/rubygems/future_cert.pem +15 -15
  531. data/test/rubygems/future_cert_32.pem +15 -15
  532. data/test/rubygems/grandchild_cert.pem +15 -16
  533. data/test/rubygems/grandchild_cert_32.pem +15 -16
  534. data/test/rubygems/grandchild_key.pem +25 -25
  535. data/{lib/rubygems/test_case.rb → test/rubygems/helper.rb} +505 -507
  536. data/{lib → test}/rubygems/installer_test_case.rb +115 -53
  537. data/test/rubygems/invalid_issuer_cert.pem +16 -16
  538. data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
  539. data/test/rubygems/invalid_key.pem +25 -25
  540. data/test/rubygems/invalid_signer_cert.pem +15 -15
  541. data/test/rubygems/invalid_signer_cert_32.pem +15 -15
  542. data/test/rubygems/invalidchild_cert.pem +15 -16
  543. data/test/rubygems/invalidchild_cert_32.pem +15 -16
  544. data/test/rubygems/invalidchild_key.pem +25 -25
  545. data/{lib → test}/rubygems/package/tar_test_case.rb +4 -6
  546. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  547. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  548. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  549. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  550. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  551. data/test/rubygems/private_ec_key.pem +9 -0
  552. data/test/rubygems/private_key.pem +25 -25
  553. data/test/rubygems/public_cert.pem +16 -16
  554. data/test/rubygems/public_cert_32.pem +15 -15
  555. data/test/rubygems/public_key.pem +7 -7
  556. data/test/rubygems/rubygems/commands/crash_command.rb +0 -2
  557. data/test/rubygems/rubygems_plugin.rb +2 -4
  558. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  559. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
  560. data/test/rubygems/ssl_cert.pem +78 -17
  561. data/test/rubygems/ssl_key.pem +25 -13
  562. data/test/rubygems/test_bundled_ca.rb +44 -47
  563. data/test/rubygems/test_config.rb +5 -7
  564. data/test/rubygems/test_deprecate.rb +90 -10
  565. data/test/rubygems/test_exit.rb +17 -0
  566. data/test/rubygems/test_gem.rb +679 -885
  567. data/test/rubygems/test_gem_available_set.rb +24 -25
  568. data/test/rubygems/test_gem_bundler_version_finder.rb +42 -42
  569. data/test/rubygems/test_gem_command.rb +186 -39
  570. data/test/rubygems/test_gem_command_manager.rb +166 -36
  571. data/test/rubygems/test_gem_commands_build_command.rb +436 -52
  572. data/test/rubygems/test_gem_commands_cert_command.rb +193 -124
  573. data/test/rubygems/test_gem_commands_check_command.rb +9 -11
  574. data/test/rubygems/test_gem_commands_cleanup_command.rb +87 -62
  575. data/test/rubygems/test_gem_commands_contents_command.rb +73 -42
  576. data/test/rubygems/test_gem_commands_dependency_command.rb +39 -41
  577. data/test/rubygems/test_gem_commands_environment_command.rb +60 -48
  578. data/test/rubygems/test_gem_commands_fetch_command.rb +163 -32
  579. data/test/rubygems/test_gem_commands_generate_index_command.rb +39 -9
  580. data/test/rubygems/test_gem_commands_help_command.rb +34 -19
  581. data/test/rubygems/test_gem_commands_info_command.rb +34 -9
  582. data/test/rubygems/test_gem_commands_install_command.rb +600 -173
  583. data/test/rubygems/test_gem_commands_list_command.rb +5 -7
  584. data/test/rubygems/test_gem_commands_lock_command.rb +11 -13
  585. data/test/rubygems/test_gem_commands_mirror.rb +3 -4
  586. data/test/rubygems/test_gem_commands_open_command.rb +16 -19
  587. data/test/rubygems/test_gem_commands_outdated_command.rb +24 -7
  588. data/test/rubygems/test_gem_commands_owner_command.rb +183 -49
  589. data/test/rubygems/test_gem_commands_pristine_command.rb +222 -89
  590. data/test/rubygems/test_gem_commands_push_command.rb +178 -69
  591. data/test/rubygems/test_gem_commands_query_command.rb +114 -89
  592. data/test/rubygems/test_gem_commands_search_command.rb +2 -4
  593. data/test/rubygems/test_gem_commands_server_command.rb +6 -46
  594. data/test/rubygems/test_gem_commands_setup_command.rb +334 -157
  595. data/test/rubygems/test_gem_commands_signin_command.rb +187 -27
  596. data/test/rubygems/test_gem_commands_signout_command.rb +3 -10
  597. data/test/rubygems/test_gem_commands_sources_command.rb +266 -33
  598. data/test/rubygems/test_gem_commands_specification_command.rb +81 -55
  599. data/test/rubygems/test_gem_commands_stale_command.rb +4 -6
  600. data/test/rubygems/test_gem_commands_uninstall_command.rb +230 -95
  601. data/test/rubygems/test_gem_commands_unpack_command.rb +32 -34
  602. data/test/rubygems/test_gem_commands_update_command.rb +412 -102
  603. data/test/rubygems/test_gem_commands_which_command.rb +12 -14
  604. data/test/rubygems/test_gem_commands_yank_command.rb +107 -26
  605. data/test/rubygems/test_gem_config_file.rb +120 -96
  606. data/test/rubygems/test_gem_dependency.rb +94 -86
  607. data/test/rubygems/test_gem_dependency_installer.rb +305 -388
  608. data/test/rubygems/test_gem_dependency_list.rb +66 -61
  609. data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -7
  610. data/test/rubygems/test_gem_doctor.rb +73 -47
  611. data/test/rubygems/test_gem_ext_builder.rb +116 -106
  612. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +1 -0
  613. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +8 -0
  614. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +233 -0
  615. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +10 -0
  616. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +27 -0
  617. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +1 -0
  618. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +1 -0
  619. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +233 -0
  620. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +10 -0
  621. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +8 -0
  622. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +51 -0
  623. data/test/rubygems/test_gem_ext_cargo_builder.rb +166 -0
  624. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +33 -0
  625. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +60 -0
  626. data/test/rubygems/test_gem_ext_cmake_builder.rb +32 -37
  627. data/test/rubygems/test_gem_ext_configure_builder.rb +23 -31
  628. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +75 -79
  629. data/test/rubygems/test_gem_ext_rake_builder.rb +49 -30
  630. data/test/rubygems/test_gem_gem_runner.rb +52 -7
  631. data/test/rubygems/test_gem_gemcutter_utilities.rb +91 -76
  632. data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -6
  633. data/test/rubygems/test_gem_indexer.rb +120 -105
  634. data/test/rubygems/test_gem_install_update_options.rb +57 -33
  635. data/test/rubygems/test_gem_installer.rb +1230 -644
  636. data/test/rubygems/test_gem_local_remote_options.rb +11 -13
  637. data/test/rubygems/test_gem_name_tuple.rb +4 -6
  638. data/test/rubygems/test_gem_package.rb +396 -266
  639. data/test/rubygems/test_gem_package_old.rb +57 -56
  640. data/test/rubygems/test_gem_package_tar_header.rb +108 -50
  641. data/test/rubygems/test_gem_package_tar_reader.rb +8 -10
  642. data/test/rubygems/test_gem_package_tar_reader_entry.rb +77 -20
  643. data/test/rubygems/test_gem_package_tar_writer.rb +107 -101
  644. data/test/rubygems/test_gem_package_task.rb +58 -25
  645. data/test/rubygems/test_gem_path_support.rb +29 -29
  646. data/test/rubygems/test_gem_platform.rb +388 -199
  647. data/test/rubygems/test_gem_rdoc.rb +20 -155
  648. data/test/rubygems/test_gem_remote_fetcher.rb +474 -303
  649. data/test/rubygems/test_gem_request.rb +128 -85
  650. data/test/rubygems/test_gem_request_connection_pools.rb +32 -32
  651. data/test/rubygems/test_gem_request_set.rb +186 -110
  652. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +280 -261
  653. data/test/rubygems/test_gem_request_set_lockfile.rb +93 -94
  654. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +68 -69
  655. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +136 -136
  656. data/test/rubygems/test_gem_requirement.rb +140 -55
  657. data/test/rubygems/test_gem_resolver.rb +224 -115
  658. data/test/rubygems/test_gem_resolver_activation_request.rb +9 -40
  659. data/test/rubygems/test_gem_resolver_api_set.rb +79 -78
  660. data/test/rubygems/test_gem_resolver_api_specification.rb +47 -49
  661. data/test/rubygems/test_gem_resolver_best_set.rb +43 -22
  662. data/test/rubygems/test_gem_resolver_composed_set.rb +1 -3
  663. data/test/rubygems/test_gem_resolver_conflict.rb +12 -18
  664. data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -17
  665. data/test/rubygems/test_gem_resolver_git_set.rb +22 -24
  666. data/test/rubygems/test_gem_resolver_git_specification.rb +22 -22
  667. data/test/rubygems/test_gem_resolver_index_set.rb +14 -16
  668. data/test/rubygems/test_gem_resolver_index_specification.rb +21 -18
  669. data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -8
  670. data/test/rubygems/test_gem_resolver_installer_set.rb +106 -44
  671. data/test/rubygems/test_gem_resolver_local_specification.rb +7 -9
  672. data/test/rubygems/test_gem_resolver_lock_set.rb +15 -17
  673. data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -19
  674. data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -3
  675. data/test/rubygems/test_gem_resolver_specification.rb +8 -10
  676. data/test/rubygems/test_gem_resolver_vendor_set.rb +9 -11
  677. data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -12
  678. data/test/rubygems/test_gem_security.rb +109 -79
  679. data/test/rubygems/test_gem_security_policy.rb +102 -107
  680. data/test/rubygems/test_gem_security_signer.rb +51 -52
  681. data/test/rubygems/test_gem_security_trust_dir.rb +14 -16
  682. data/test/rubygems/test_gem_silent_ui.rb +47 -42
  683. data/test/rubygems/test_gem_source.rb +66 -51
  684. data/test/rubygems/test_gem_source_fetch_problem.rb +17 -8
  685. data/test/rubygems/test_gem_source_git.rb +74 -74
  686. data/test/rubygems/test_gem_source_installed.rb +16 -18
  687. data/test/rubygems/test_gem_source_list.rb +5 -5
  688. data/test/rubygems/test_gem_source_local.rb +15 -16
  689. data/test/rubygems/test_gem_source_lock.rb +31 -33
  690. data/test/rubygems/test_gem_source_specific_file.rb +18 -19
  691. data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
  692. data/test/rubygems/test_gem_source_vendor.rb +13 -15
  693. data/test/rubygems/test_gem_spec_fetcher.rb +74 -67
  694. data/test/rubygems/test_gem_specification.rb +1051 -1071
  695. data/test/rubygems/test_gem_stream_ui.rb +25 -23
  696. data/test/rubygems/test_gem_stub_specification.rb +39 -56
  697. data/test/rubygems/test_gem_text.rb +8 -3
  698. data/test/rubygems/test_gem_uninstaller.rb +269 -100
  699. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -5
  700. data/test/rubygems/test_gem_update_suggestion.rb +208 -0
  701. data/test/rubygems/test_gem_uri.rb +39 -0
  702. data/test/rubygems/test_gem_uri_formatter.rb +14 -16
  703. data/test/rubygems/test_gem_util.rb +46 -34
  704. data/test/rubygems/test_gem_validator.rb +12 -15
  705. data/test/rubygems/test_gem_version.rb +49 -34
  706. data/test/rubygems/test_gem_version_option.rb +16 -18
  707. data/test/rubygems/test_kernel.rb +61 -53
  708. data/test/rubygems/test_project_sanity.rb +20 -0
  709. data/test/rubygems/test_remote_fetch_error.rb +7 -8
  710. data/test/rubygems/test_require.rb +415 -121
  711. data/test/rubygems/test_rubygems.rb +74 -0
  712. data/{lib/rubygems/test_utilities.rb → test/rubygems/utilities.rb} +74 -50
  713. data/test/rubygems/wrong_key_cert.pem +15 -15
  714. data/test/rubygems/wrong_key_cert_32.pem +15 -15
  715. data/test/test_changelog_generator.rb +17 -0
  716. metadata +218 -244
  717. data/.rubocop.yml +0 -66
  718. data/.travis.yml +0 -38
  719. data/History.txt +0 -3965
  720. data/Rakefile +0 -372
  721. data/appveyor.yml +0 -43
  722. data/bundler/CODE_OF_CONDUCT.md +0 -42
  723. data/bundler/CONTRIBUTING.md +0 -17
  724. data/bundler/exe/bundle_ruby +0 -60
  725. data/bundler/lib/bundler/cli/package.rb +0 -49
  726. data/bundler/lib/bundler/compatibility_guard.rb +0 -14
  727. data/bundler/lib/bundler/dep_proxy.rb +0 -48
  728. data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
  729. data/bundler/lib/bundler/gemdeps.rb +0 -29
  730. data/bundler/lib/bundler/psyched_yaml.rb +0 -37
  731. data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  732. data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  733. data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  734. data/bundler/lib/bundler/templates/gems.rb +0 -8
  735. data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  736. data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -7
  737. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
  738. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  739. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -81
  740. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  741. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  742. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  743. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  744. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  745. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  746. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  747. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  748. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -136
  749. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -223
  750. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
  751. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  752. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -101
  753. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  754. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -837
  755. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  756. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  757. data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -12
  758. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  759. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  760. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
  761. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  762. data/bundler/lib/bundler/version_ranges.rb +0 -76
  763. data/bundler/man/bundle-gem.1 +0 -80
  764. data/bundler/man/bundle-gem.ronn +0 -78
  765. data/bundler/man/bundle-package.1 +0 -55
  766. data/lib/rubygems/psych_additions.rb +0 -10
  767. data/lib/rubygems/server.rb +0 -878
  768. data/lib/rubygems/source_local.rb +0 -7
  769. data/lib/rubygems/source_specific_file.rb +0 -6
  770. data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  771. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  772. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  773. data/lib/rubygems/syck_hack.rb +0 -77
  774. data/lib/ubygems.rb +0 -14
  775. data/test/rubygems/bogussources.rb +0 -9
  776. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  777. data/test/rubygems/test_gem_server.rb +0 -607
  778. data/util/CL2notes +0 -55
  779. data/util/ci +0 -77
  780. data/util/create_certs.rb +0 -171
  781. data/util/create_encrypted_key.rb +0 -16
  782. data/util/generate_spdx_license_list.rb +0 -61
  783. data/util/patch_with_prs.rb +0 -77
  784. data/util/rubocop +0 -8
  785. data/util/update_bundled_ca_certificates.rb +0 -139
  786. data/util/update_changelog.rb +0 -67
  787. /data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
  788. /data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
  789. /data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
  790. /data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
  791. /data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
  792. /data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
  793. /data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
  794. /data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
  795. /data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
@@ -1,16 +1,14 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require 'rubygems/package/tar_test_case'
5
- require 'rubygems/simple_gem'
3
+ require_relative "package/tar_test_case"
4
+ require "rubygems/openssl"
6
5
 
7
6
  class TestGemPackage < Gem::Package::TarTestCase
8
-
9
7
  def setup
10
8
  super
11
9
 
12
- @spec = quick_gem 'a' do |s|
13
- s.description = 'π'
10
+ @spec = quick_gem "a" do |s|
11
+ s.description = "π"
14
12
  s.files = %w[lib/code.rb]
15
13
  end
16
14
 
@@ -18,17 +16,19 @@ class TestGemPackage < Gem::Package::TarTestCase
18
16
 
19
17
  @gem = @spec.cache_file
20
18
 
21
- @destination = File.join @tempdir, 'extract'
19
+ @destination = File.join @tempdir, "extract"
22
20
 
23
21
  FileUtils.mkdir_p @destination
24
22
  end
25
23
 
26
24
  def test_class_new_old_format
27
- File.open 'old_format.gem', 'wb' do |io|
25
+ pend "jruby can't require the simple_gem file" if Gem.java_platform?
26
+ require_relative "simple_gem"
27
+ File.open "old_format.gem", "wb" do |io|
28
28
  io.write SIMPLE_GEM
29
29
  end
30
30
 
31
- package = Gem::Package.new 'old_format.gem'
31
+ package = Gem::Package.new "old_format.gem"
32
32
 
33
33
  assert package.spec
34
34
  end
@@ -36,17 +36,17 @@ class TestGemPackage < Gem::Package::TarTestCase
36
36
  def test_add_checksums
37
37
  gem_io = StringIO.new
38
38
 
39
- spec = Gem::Specification.new 'build', '1'
40
- spec.summary = 'build'
41
- spec.authors = 'build'
42
- spec.files = ['lib/code.rb']
39
+ spec = Gem::Specification.new "build", "1"
40
+ spec.summary = "build"
41
+ spec.authors = "build"
42
+ spec.files = ["lib/code.rb"]
43
43
  spec.date = Time.at 0
44
- spec.rubygems_version = Gem::Version.new '0'
44
+ spec.rubygems_version = Gem::Version.new "0"
45
45
 
46
- FileUtils.mkdir 'lib'
46
+ FileUtils.mkdir "lib"
47
47
 
48
- File.open 'lib/code.rb', 'w' do |io|
49
- io.write '# lib/code.rb'
48
+ File.open "lib/code.rb", "w" do |io|
49
+ io.write "# lib/code.rb"
50
50
  end
51
51
 
52
52
  package = Gem::Package.new spec.file_name
@@ -69,11 +69,11 @@ class TestGemPackage < Gem::Package::TarTestCase
69
69
 
70
70
  reader.each_entry do |entry|
71
71
  case entry.full_name
72
- when 'checksums.yaml.gz' then
72
+ when "checksums.yaml.gz" then
73
73
  Zlib::GzipReader.wrap entry do |io|
74
74
  checksums = io.read
75
75
  end
76
- when 'data.tar.gz' then
76
+ when "data.tar.gz" then
77
77
  tar = entry.read
78
78
  end
79
79
  end
@@ -84,37 +84,33 @@ class TestGemPackage < Gem::Package::TarTestCase
84
84
  io.write spec.to_yaml
85
85
  end
86
86
 
87
- metadata_sha256 = Digest::SHA256.hexdigest s.string
88
- metadata_sha512 = Digest::SHA512.hexdigest s.string
87
+ metadata_sha256 = OpenSSL::Digest::SHA256.hexdigest s.string
88
+ metadata_sha512 = OpenSSL::Digest::SHA512.hexdigest s.string
89
89
 
90
90
  expected = {
91
- 'SHA512' => {
92
- 'metadata.gz' => metadata_sha512,
93
- 'data.tar.gz' => Digest::SHA512.hexdigest(tar),
94
- }
91
+ "SHA512" => {
92
+ "metadata.gz" => metadata_sha512,
93
+ "data.tar.gz" => OpenSSL::Digest::SHA512.hexdigest(tar),
94
+ },
95
+ "SHA256" => {
96
+ "metadata.gz" => metadata_sha256,
97
+ "data.tar.gz" => OpenSSL::Digest::SHA256.hexdigest(tar),
98
+ },
95
99
  }
96
100
 
97
- if defined?(OpenSSL::Digest)
98
- expected['SHA256'] = {
99
- 'metadata.gz' => metadata_sha256,
100
- 'data.tar.gz' => Digest::SHA256.hexdigest(tar),
101
- }
102
- end
103
-
104
- assert_equal expected, YAML.load(checksums)
101
+ assert_equal expected, load_yaml(checksums)
105
102
  end
106
103
 
107
- def test_build_time_source_date_epoch
104
+ def test_build_time_uses_source_date_epoch
108
105
  epoch = ENV["SOURCE_DATE_EPOCH"]
109
106
  ENV["SOURCE_DATE_EPOCH"] = "123456789"
110
107
 
111
- spec = Gem::Specification.new 'build', '1'
112
- spec.summary = 'build'
113
- spec.authors = 'build'
114
- spec.files = ['lib/code.rb']
108
+ spec = Gem::Specification.new "build", "1"
109
+ spec.summary = "build"
110
+ spec.authors = "build"
111
+ spec.files = ["lib/code.rb"]
115
112
  spec.date = Time.at 0
116
- spec.rubygems_version = Gem::Version.new '0'
117
-
113
+ spec.rubygems_version = Gem::Version.new "0"
118
114
 
119
115
  package = Gem::Package.new spec.file_name
120
116
 
@@ -123,16 +119,42 @@ class TestGemPackage < Gem::Package::TarTestCase
123
119
  ENV["SOURCE_DATE_EPOCH"] = epoch
124
120
  end
125
121
 
122
+ def test_build_time_without_source_date_epoch
123
+ epoch = ENV["SOURCE_DATE_EPOCH"]
124
+ ENV["SOURCE_DATE_EPOCH"] = nil
125
+
126
+ spec = Gem::Specification.new "build", "1"
127
+ spec.summary = "build"
128
+ spec.authors = "build"
129
+ spec.files = ["lib/code.rb"]
130
+ spec.rubygems_version = Gem::Version.new "0"
131
+
132
+ package = Gem::Package.new spec.file_name
133
+
134
+ assert_kind_of Time, package.build_time
135
+
136
+ build_time = package.build_time.to_i
137
+
138
+ assert_equal Gem.source_date_epoch.to_i, build_time
139
+ ensure
140
+ ENV["SOURCE_DATE_EPOCH"] = epoch
141
+ end
142
+
126
143
  def test_add_files
127
144
  spec = Gem::Specification.new
128
145
  spec.files = %w[lib/code.rb lib/empty]
129
146
 
130
- FileUtils.mkdir_p 'lib/empty'
147
+ FileUtils.mkdir_p "lib/empty"
148
+
149
+ File.open "lib/code.rb", "w" do |io|
150
+ io.write "# lib/code.rb"
151
+ end
131
152
 
132
- File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end
133
- File.open 'lib/extra.rb', 'w' do |io| io.write '# lib/extra.rb' end
153
+ File.open "lib/extra.rb", "w" do |io|
154
+ io.write "# lib/extra.rb"
155
+ end
134
156
 
135
- package = Gem::Package.new 'bogus.gem'
157
+ package = Gem::Package.new "bogus.gem"
136
158
  package.spec = spec
137
159
 
138
160
  tar = util_tar do |tar_io|
@@ -156,22 +178,25 @@ class TestGemPackage < Gem::Package::TarTestCase
156
178
  spec = Gem::Specification.new
157
179
  spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
158
180
 
159
- FileUtils.mkdir_p 'lib'
160
- File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end
181
+ FileUtils.mkdir_p "lib"
182
+
183
+ File.open "lib/code.rb", "w" do |io|
184
+ io.write "# lib/code.rb"
185
+ end
161
186
 
162
187
  # NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
163
188
  begin
164
- File.symlink('code.rb', 'lib/code_sym.rb')
165
- File.symlink('../lib/code.rb', 'lib/code_sym2.rb')
189
+ File.symlink("code.rb", "lib/code_sym.rb")
190
+ File.symlink("../lib/code.rb", "lib/code_sym2.rb")
166
191
  rescue Errno::EACCES => e
167
192
  if win_platform?
168
- skip "symlink - must be admin with no UAC on Windows"
193
+ pend "symlink - must be admin with no UAC on Windows"
169
194
  else
170
195
  raise e
171
196
  end
172
197
  end
173
198
 
174
- package = Gem::Package.new 'bogus.gem'
199
+ package = Gem::Package.new "bogus.gem"
175
200
  package.spec = spec
176
201
 
177
202
  tar = util_tar do |tar_io|
@@ -193,20 +218,20 @@ class TestGemPackage < Gem::Package::TarTestCase
193
218
  end
194
219
 
195
220
  assert_equal %w[lib/code.rb], files
196
- assert_equal [{'lib/code_sym.rb' => 'lib/code.rb'}, {'lib/code_sym2.rb' => '../lib/code.rb'}], symlinks
221
+ assert_equal [{ "lib/code_sym.rb" => "code.rb" }, { "lib/code_sym2.rb" => "../lib/code.rb" }], symlinks
197
222
  end
198
223
 
199
224
  def test_build
200
- spec = Gem::Specification.new 'build', '1'
201
- spec.summary = 'build'
202
- spec.authors = 'build'
203
- spec.files = ['lib/code.rb']
225
+ spec = Gem::Specification.new "build", "1"
226
+ spec.summary = "build"
227
+ spec.authors = "build"
228
+ spec.files = ["lib/code.rb"]
204
229
  spec.rubygems_version = :junk
205
230
 
206
- FileUtils.mkdir 'lib'
231
+ FileUtils.mkdir "lib"
207
232
 
208
- File.open 'lib/code.rb', 'w' do |io|
209
- io.write '# lib/code.rb'
233
+ File.open "lib/code.rb", "w" do |io|
234
+ io.write "# lib/code.rb"
210
235
  end
211
236
 
212
237
  package = Gem::Package.new spec.file_name
@@ -215,7 +240,7 @@ class TestGemPackage < Gem::Package::TarTestCase
215
240
  package.build
216
241
 
217
242
  assert_equal Gem::VERSION, spec.rubygems_version
218
- assert_path_exists spec.file_name
243
+ assert_path_exist spec.file_name
219
244
 
220
245
  reader = Gem::Package.new spec.file_name
221
246
  assert_equal spec, reader.spec
@@ -227,25 +252,25 @@ class TestGemPackage < Gem::Package::TarTestCase
227
252
  end
228
253
 
229
254
  def test_build_auto_signed
230
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
255
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
231
256
 
232
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
257
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
233
258
 
234
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
259
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
235
260
  Gem::Security.write PRIVATE_KEY, private_key_path
236
261
 
237
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
262
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
238
263
  FileUtils.cp PUBLIC_CERT_PATH, public_cert_path
239
264
 
240
- spec = Gem::Specification.new 'build', '1'
241
- spec.summary = 'build'
242
- spec.authors = 'build'
243
- spec.files = ['lib/code.rb']
265
+ spec = Gem::Specification.new "build", "1"
266
+ spec.summary = "build"
267
+ spec.authors = "build"
268
+ spec.files = ["lib/code.rb"]
244
269
 
245
- FileUtils.mkdir 'lib'
270
+ FileUtils.mkdir "lib"
246
271
 
247
- File.open 'lib/code.rb', 'w' do |io|
248
- io.write '# lib/code.rb'
272
+ File.open "lib/code.rb", "w" do |io|
273
+ io.write "# lib/code.rb"
249
274
  end
250
275
 
251
276
  package = Gem::Package.new spec.file_name
@@ -254,7 +279,7 @@ class TestGemPackage < Gem::Package::TarTestCase
254
279
  package.build
255
280
 
256
281
  assert_equal Gem::VERSION, spec.rubygems_version
257
- assert_path_exists spec.file_name
282
+ assert_path_exist spec.file_name
258
283
 
259
284
  reader = Gem::Package.new spec.file_name
260
285
  assert reader.verify
@@ -270,25 +295,25 @@ class TestGemPackage < Gem::Package::TarTestCase
270
295
  end
271
296
 
272
297
  def test_build_auto_signed_encrypted_key
273
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
298
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
274
299
 
275
- FileUtils.mkdir_p File.join(Gem.user_home, '.gem')
300
+ FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
276
301
 
277
- private_key_path = File.join Gem.user_home, '.gem', 'gem-private_key.pem'
302
+ private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
278
303
  FileUtils.cp ENCRYPTED_PRIVATE_KEY_PATH, private_key_path
279
304
 
280
- public_cert_path = File.join Gem.user_home, '.gem', 'gem-public_cert.pem'
305
+ public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
281
306
  Gem::Security.write PUBLIC_CERT, public_cert_path
282
307
 
283
- spec = Gem::Specification.new 'build', '1'
284
- spec.summary = 'build'
285
- spec.authors = 'build'
286
- spec.files = ['lib/code.rb']
308
+ spec = Gem::Specification.new "build", "1"
309
+ spec.summary = "build"
310
+ spec.authors = "build"
311
+ spec.files = ["lib/code.rb"]
287
312
 
288
- FileUtils.mkdir 'lib'
313
+ FileUtils.mkdir "lib"
289
314
 
290
- File.open 'lib/code.rb', 'w' do |io|
291
- io.write '# lib/code.rb'
315
+ File.open "lib/code.rb", "w" do |io|
316
+ io.write "# lib/code.rb"
292
317
  end
293
318
 
294
319
  package = Gem::Package.new spec.file_name
@@ -297,7 +322,7 @@ class TestGemPackage < Gem::Package::TarTestCase
297
322
  package.build
298
323
 
299
324
  assert_equal Gem::VERSION, spec.rubygems_version
300
- assert_path_exists spec.file_name
325
+ assert_path_exist spec.file_name
301
326
 
302
327
  reader = Gem::Package.new spec.file_name
303
328
  assert reader.verify
@@ -313,25 +338,25 @@ class TestGemPackage < Gem::Package::TarTestCase
313
338
  end
314
339
 
315
340
  def test_build_invalid
316
- spec = Gem::Specification.new 'build', '1'
341
+ spec = Gem::Specification.new "build", "1"
317
342
 
318
343
  package = Gem::Package.new spec.file_name
319
344
  package.spec = spec
320
345
 
321
- e = assert_raises Gem::InvalidSpecificationException do
346
+ e = assert_raise Gem::InvalidSpecificationException do
322
347
  package.build
323
348
  end
324
349
 
325
- assert_equal 'missing value for attribute summary', e.message
350
+ assert_equal "missing value for attribute summary", e.message
326
351
  end
327
352
 
328
353
  def test_build_invalid_arguments
329
- spec = Gem::Specification.new 'build', '1'
354
+ spec = Gem::Specification.new "build", "1"
330
355
 
331
356
  package = Gem::Package.new spec.file_name
332
357
  package.spec = spec
333
358
 
334
- e = assert_raises ArgumentError do
359
+ e = assert_raise ArgumentError do
335
360
  package.build true, true
336
361
  end
337
362
 
@@ -339,19 +364,19 @@ class TestGemPackage < Gem::Package::TarTestCase
339
364
  end
340
365
 
341
366
  def test_build_signed
342
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
367
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
343
368
 
344
- spec = Gem::Specification.new 'build', '1'
345
- spec.summary = 'build'
346
- spec.authors = 'build'
347
- spec.files = ['lib/code.rb']
369
+ spec = Gem::Specification.new "build", "1"
370
+ spec.summary = "build"
371
+ spec.authors = "build"
372
+ spec.files = ["lib/code.rb"]
348
373
  spec.cert_chain = [PUBLIC_CERT.to_pem]
349
374
  spec.signing_key = PRIVATE_KEY
350
375
 
351
- FileUtils.mkdir 'lib'
376
+ FileUtils.mkdir "lib"
352
377
 
353
- File.open 'lib/code.rb', 'w' do |io|
354
- io.write '# lib/code.rb'
378
+ File.open "lib/code.rb", "w" do |io|
379
+ io.write "# lib/code.rb"
355
380
  end
356
381
 
357
382
  package = Gem::Package.new spec.file_name
@@ -360,7 +385,7 @@ class TestGemPackage < Gem::Package::TarTestCase
360
385
  package.build
361
386
 
362
387
  assert_equal Gem::VERSION, spec.rubygems_version
363
- assert_path_exists spec.file_name
388
+ assert_path_exist spec.file_name
364
389
 
365
390
  reader = Gem::Package.new spec.file_name
366
391
  assert reader.verify
@@ -376,19 +401,19 @@ class TestGemPackage < Gem::Package::TarTestCase
376
401
  end
377
402
 
378
403
  def test_build_signed_encrypted_key
379
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
404
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
380
405
 
381
- spec = Gem::Specification.new 'build', '1'
382
- spec.summary = 'build'
383
- spec.authors = 'build'
384
- spec.files = ['lib/code.rb']
406
+ spec = Gem::Specification.new "build", "1"
407
+ spec.summary = "build"
408
+ spec.authors = "build"
409
+ spec.files = ["lib/code.rb"]
385
410
  spec.cert_chain = [PUBLIC_CERT.to_pem]
386
411
  spec.signing_key = ENCRYPTED_PRIVATE_KEY
387
412
 
388
- FileUtils.mkdir 'lib'
413
+ FileUtils.mkdir "lib"
389
414
 
390
- File.open 'lib/code.rb', 'w' do |io|
391
- io.write '# lib/code.rb'
415
+ File.open "lib/code.rb", "w" do |io|
416
+ io.write "# lib/code.rb"
392
417
  end
393
418
 
394
419
  package = Gem::Package.new spec.file_name
@@ -397,7 +422,7 @@ class TestGemPackage < Gem::Package::TarTestCase
397
422
  package.build
398
423
 
399
424
  assert_equal Gem::VERSION, spec.rubygems_version
400
- assert_path_exists spec.file_name
425
+ assert_path_exist spec.file_name
401
426
 
402
427
  reader = Gem::Package.new spec.file_name
403
428
  assert reader.verify
@@ -412,6 +437,33 @@ class TestGemPackage < Gem::Package::TarTestCase
412
437
  assert_equal %w[lib/code.rb], reader.contents
413
438
  end
414
439
 
440
+ def test_raw_spec
441
+ data_tgz = util_tar_gz {}
442
+
443
+ gem = util_tar do |tar|
444
+ tar.add_file "data.tar.gz", 0644 do |io|
445
+ io.write data_tgz.string
446
+ end
447
+
448
+ tar.add_file "metadata.gz", 0644 do |io|
449
+ Zlib::GzipWriter.wrap io do |gzio|
450
+ gzio.write @spec.to_yaml
451
+ end
452
+ end
453
+ end
454
+
455
+ gem_path = "#{@destination}/test.gem"
456
+
457
+ File.open gem_path, "wb" do |io|
458
+ io.write gem.string
459
+ end
460
+
461
+ spec, metadata = Gem::Package.raw_spec(gem_path)
462
+
463
+ assert_equal @spec, spec
464
+ assert_match @spec.to_yaml, metadata.force_encoding("UTF-8")
465
+ end
466
+
415
467
  def test_contents
416
468
  package = Gem::Package.new @gem
417
469
 
@@ -423,8 +475,8 @@ class TestGemPackage < Gem::Package::TarTestCase
423
475
 
424
476
  package.extract_files @destination
425
477
 
426
- extracted = File.join @destination, 'lib/code.rb'
427
- assert_path_exists extracted
478
+ extracted = File.join @destination, "lib/code.rb"
479
+ assert_path_exist extracted
428
480
 
429
481
  mask = 0100666 & (~File.umask)
430
482
 
@@ -433,39 +485,56 @@ class TestGemPackage < Gem::Package::TarTestCase
433
485
  end
434
486
 
435
487
  def test_extract_files_empty
436
- data_tgz = util_tar_gz do end
488
+ data_tgz = util_tar_gz {}
437
489
 
438
490
  gem = util_tar do |tar|
439
- tar.add_file 'data.tar.gz', 0644 do |io|
491
+ tar.add_file "data.tar.gz", 0644 do |io|
440
492
  io.write data_tgz.string
441
493
  end
442
494
 
443
- tar.add_file 'metadata.gz', 0644 do |io|
495
+ tar.add_file "metadata.gz", 0644 do |io|
444
496
  Zlib::GzipWriter.wrap io do |gzio|
445
497
  gzio.write @spec.to_yaml
446
498
  end
447
499
  end
448
500
  end
449
501
 
450
- File.open 'empty.gem', 'wb' do |io|
502
+ File.open "empty.gem", "wb" do |io|
451
503
  io.write gem.string
452
504
  end
453
505
 
454
- package = Gem::Package.new 'empty.gem'
506
+ package = Gem::Package.new "empty.gem"
507
+
508
+ package.extract_files @destination
509
+
510
+ assert_path_exist @destination
511
+ end
512
+
513
+ def test_extract_file_permissions
514
+ pend "chmod not supported" if win_platform?
515
+
516
+ gem_with_long_permissions = File.expand_path("packages/Bluebie-legs-0.6.2.gem", __dir__)
517
+
518
+ package = Gem::Package.new gem_with_long_permissions
455
519
 
456
520
  package.extract_files @destination
457
521
 
458
- assert_path_exists @destination
522
+ filepath = File.join @destination, "README.rdoc"
523
+ assert_path_exist filepath
524
+
525
+ assert_equal 0104444, File.stat(filepath).mode
459
526
  end
460
527
 
461
528
  def test_extract_tar_gz_absolute
462
529
  package = Gem::Package.new @gem
463
530
 
464
531
  tgz_io = util_tar_gz do |tar|
465
- tar.add_file '/absolute.rb', 0644 do |io| io.write 'hi' end
532
+ tar.add_file "/absolute.rb", 0644 do |io|
533
+ io.write "hi"
534
+ end
466
535
  end
467
536
 
468
- e = assert_raises Gem::Package::PathError do
537
+ e = assert_raise Gem::Package::PathError do
469
538
  package.extract_tar_gz tgz_io, @destination
470
539
  end
471
540
 
@@ -475,58 +544,86 @@ class TestGemPackage < Gem::Package::TarTestCase
475
544
 
476
545
  def test_extract_tar_gz_symlink_relative_path
477
546
  package = Gem::Package.new @gem
547
+ package.verify
478
548
 
479
549
  tgz_io = util_tar_gz do |tar|
480
- tar.add_file 'relative.rb', 0644 do |io| io.write 'hi' end
481
- tar.mkdir 'lib', 0755
482
- tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
550
+ tar.add_file "relative.rb", 0644 do |io|
551
+ io.write "hi"
552
+ end
553
+
554
+ tar.mkdir "lib", 0755
555
+ tar.add_symlink "lib/foo.rb", "../relative.rb", 0644
483
556
  end
484
557
 
485
558
  begin
486
559
  package.extract_tar_gz tgz_io, @destination
487
560
  rescue Errno::EACCES => e
488
561
  if win_platform?
489
- skip "symlink - must be admin with no UAC on Windows"
562
+ pend "symlink - must be admin with no UAC on Windows"
490
563
  else
491
564
  raise e
492
565
  end
493
566
  end
494
567
 
495
- extracted = File.join @destination, 'lib/foo.rb'
496
- assert_path_exists extracted
497
- assert_equal '../relative.rb',
568
+ extracted = File.join @destination, "lib/foo.rb"
569
+ assert_path_exist extracted
570
+ assert_equal "../relative.rb",
498
571
  File.readlink(extracted)
499
- assert_equal 'hi',
572
+ assert_equal "hi",
500
573
  File.read(extracted)
501
574
  end
502
575
 
576
+ def test_extract_tar_gz_symlink_broken_relative_path
577
+ package = Gem::Package.new @gem
578
+ package.verify
579
+
580
+ tgz_io = util_tar_gz do |tar|
581
+ tar.mkdir "lib", 0755
582
+ tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
583
+ end
584
+
585
+ ui = Gem::MockGemUi.new
586
+
587
+ use_ui ui do
588
+ package.extract_tar_gz tgz_io, @destination
589
+ end
590
+
591
+ assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
592
+
593
+ extracted = File.join @destination, "lib/foo.rb"
594
+ assert_path_not_exist extracted
595
+ end
596
+
503
597
  def test_extract_symlink_parent
504
598
  package = Gem::Package.new @gem
505
599
 
506
600
  tgz_io = util_tar_gz do |tar|
507
- tar.mkdir 'lib', 0755
508
- tar.add_symlink 'lib/link', '../..', 0644
509
- tar.add_file 'lib/link/outside.txt', 0644 do |io| io.write 'hi' end
601
+ tar.mkdir "lib", 0755
602
+ tar.add_symlink "lib/link", "../..", 0644
603
+ tar.add_file "lib/link/outside.txt", 0644 do |io|
604
+ io.write "hi"
605
+ end
510
606
  end
511
607
 
512
608
  # Extract into a subdirectory of @destination; if this test fails it writes
513
609
  # a file outside destination_subdir, but we want the file to remain inside
514
610
  # @destination so it will be cleaned up.
515
- destination_subdir = File.join @destination, 'subdir'
611
+ destination_subdir = File.join @destination, "subdir"
516
612
  FileUtils.mkdir_p destination_subdir
517
613
 
518
- e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
614
+ expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
615
+
616
+ e = assert_raise(*expected_exceptions) do
519
617
  package.extract_tar_gz tgz_io, destination_subdir
520
618
  end
521
619
 
522
- if Gem::Package::PathError === e
523
- assert_equal("installing into parent path lib/link/outside.txt of " +
524
- "#{destination_subdir} is not allowed", e.message)
525
- elsif win_platform?
526
- skip "symlink - must be admin with no UAC on Windows"
527
- else
528
- raise e
529
- end
620
+ pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
621
+
622
+ assert_equal("installing symlink 'lib/link' pointing to parent path #{@destination} of " +
623
+ "#{destination_subdir} is not allowed", e.message)
624
+
625
+ assert_path_not_exist File.join(@destination, "outside.txt")
626
+ assert_path_not_exist File.join(destination_subdir, "lib/link")
530
627
  end
531
628
 
532
629
  def test_extract_symlink_parent_doesnt_delete_user_dir
@@ -535,76 +632,84 @@ class TestGemPackage < Gem::Package::TarTestCase
535
632
  # Extract into a subdirectory of @destination; if this test fails it writes
536
633
  # a file outside destination_subdir, but we want the file to remain inside
537
634
  # @destination so it will be cleaned up.
538
- destination_subdir = File.join @destination, 'subdir'
635
+ destination_subdir = File.join @destination, "subdir"
539
636
  FileUtils.mkdir_p destination_subdir
540
637
 
541
- destination_user_dir = File.join @destination, 'user'
542
- destination_user_subdir = File.join destination_user_dir, 'dir'
638
+ destination_user_dir = File.join @destination, "user"
639
+ destination_user_subdir = File.join destination_user_dir, "dir"
543
640
  FileUtils.mkdir_p destination_user_subdir
544
641
 
642
+ pend "TMPDIR seems too long to add it as symlink into tar" if destination_user_dir.size > 90
643
+
545
644
  tgz_io = util_tar_gz do |tar|
546
- tar.add_symlink 'link', destination_user_dir, 16877
547
- tar.add_symlink 'link/dir', '.', 16877
645
+ tar.add_symlink "link", destination_user_dir, 16877
646
+ tar.add_symlink "link/dir", ".", 16877
548
647
  end
549
648
 
550
- e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
649
+ expected_exceptions = win_platform? ? [Gem::Package::SymlinkError, Errno::EACCES] : [Gem::Package::SymlinkError]
650
+
651
+ e = assert_raise(*expected_exceptions) do
551
652
  package.extract_tar_gz tgz_io, destination_subdir
552
653
  end
553
654
 
554
- assert_path_exists destination_user_subdir
655
+ pend "symlink - must be admin with no UAC on Windows" if Errno::EACCES === e
555
656
 
556
- if Gem::Package::PathError === e
557
- assert_equal("installing into parent path #{destination_user_subdir} of " +
558
- "#{destination_subdir} is not allowed", e.message)
559
- elsif win_platform?
560
- skip "symlink - must be admin with no UAC on Windows"
561
- else
562
- raise e
563
- end
657
+ assert_equal("installing symlink 'link' pointing to parent path #{destination_user_dir} of " +
658
+ "#{destination_subdir} is not allowed", e.message)
659
+
660
+ assert_path_exist destination_user_subdir
661
+ assert_path_not_exist File.join(destination_subdir, "link/dir")
662
+ assert_path_not_exist File.join(destination_subdir, "link")
564
663
  end
565
664
 
566
665
  def test_extract_tar_gz_directory
567
666
  package = Gem::Package.new @gem
568
667
 
569
668
  tgz_io = util_tar_gz do |tar|
570
- tar.mkdir 'lib', 0755
571
- tar.add_file 'lib/foo.rb', 0644 do |io| io.write 'hi' end
572
- tar.mkdir 'lib/foo', 0755
669
+ tar.mkdir "lib", 0755
670
+ tar.add_file "lib/foo.rb", 0644 do |io|
671
+ io.write "hi"
672
+ end
673
+ tar.mkdir "lib/foo", 0755
573
674
  end
574
675
 
575
676
  package.extract_tar_gz tgz_io, @destination
576
677
 
577
- extracted = File.join @destination, 'lib/foo.rb'
578
- assert_path_exists extracted
678
+ extracted = File.join @destination, "lib/foo.rb"
679
+ assert_path_exist extracted
579
680
 
580
- extracted = File.join @destination, 'lib/foo'
581
- assert_path_exists extracted
681
+ extracted = File.join @destination, "lib/foo"
682
+ assert_path_exist extracted
582
683
  end
583
684
 
584
685
  def test_extract_tar_gz_dot_slash
585
686
  package = Gem::Package.new @gem
586
687
 
587
688
  tgz_io = util_tar_gz do |tar|
588
- tar.add_file './dot_slash.rb', 0644 do |io| io.write 'hi' end
689
+ tar.add_file "./dot_slash.rb", 0644 do |io|
690
+ io.write "hi"
691
+ end
589
692
  end
590
693
 
591
694
  package.extract_tar_gz tgz_io, @destination
592
695
 
593
- extracted = File.join @destination, 'dot_slash.rb'
594
- assert_path_exists extracted
696
+ extracted = File.join @destination, "dot_slash.rb"
697
+ assert_path_exist extracted
595
698
  end
596
699
 
597
700
  def test_extract_tar_gz_dot_file
598
701
  package = Gem::Package.new @gem
599
702
 
600
703
  tgz_io = util_tar_gz do |tar|
601
- tar.add_file '.dot_file.rb', 0644 do |io| io.write 'hi' end
704
+ tar.add_file ".dot_file.rb", 0644 do |io|
705
+ io.write "hi"
706
+ end
602
707
  end
603
708
 
604
709
  package.extract_tar_gz tgz_io, @destination
605
710
 
606
- extracted = File.join @destination, '.dot_file.rb'
607
- assert_path_exists extracted
711
+ extracted = File.join @destination, ".dot_file.rb"
712
+ assert_path_exist extracted
608
713
  end
609
714
 
610
715
  if Gem.win_platform?
@@ -612,33 +717,35 @@ class TestGemPackage < Gem::Package::TarTestCase
612
717
  package = Gem::Package.new @gem
613
718
 
614
719
  tgz_io = util_tar_gz do |tar|
615
- tar.add_file 'foo/file.rb', 0644 do |io| io.write 'hi' end
720
+ tar.add_file "foo/file.rb", 0644 do |io|
721
+ io.write "hi"
722
+ end
616
723
  end
617
724
 
618
725
  package.extract_tar_gz tgz_io, @destination.upcase
619
726
 
620
- extracted = File.join @destination, 'foo/file.rb'
621
- assert_path_exists extracted
727
+ extracted = File.join @destination, "foo/file.rb"
728
+ assert_path_exist extracted
622
729
  end
623
730
  end
624
731
 
625
732
  def test_install_location
626
733
  package = Gem::Package.new @gem
627
734
 
628
- file = 'file.rb'.dup
629
- file.taint
735
+ file = "file.rb".dup
736
+ file.taint if RUBY_VERSION < "2.7"
630
737
 
631
738
  destination = package.install_location file, @destination
632
739
 
633
- assert_equal File.join(@destination, 'file.rb'), destination
634
- refute destination.tainted?
740
+ assert_equal File.join(@destination, "file.rb"), destination
741
+ refute destination.tainted? if RUBY_VERSION < "2.7"
635
742
  end
636
743
 
637
744
  def test_install_location_absolute
638
745
  package = Gem::Package.new @gem
639
746
 
640
- e = assert_raises Gem::Package::PathError do
641
- package.install_location '/absolute.rb', @destination
747
+ e = assert_raise Gem::Package::PathError do
748
+ package.install_location "/absolute.rb", @destination
642
749
  end
643
750
 
644
751
  assert_equal("installing into parent path /absolute.rb of " +
@@ -648,38 +755,36 @@ class TestGemPackage < Gem::Package::TarTestCase
648
755
  def test_install_location_dots
649
756
  package = Gem::Package.new @gem
650
757
 
651
- file = 'file.rb'
758
+ file = "file.rb"
652
759
 
653
- destination = File.join @destination, 'foo', '..', 'bar'
760
+ destination = File.join @destination, "foo", "..", "bar"
654
761
 
655
- FileUtils.mkdir_p File.join @destination, 'foo'
762
+ FileUtils.mkdir_p File.join @destination, "foo"
656
763
  FileUtils.mkdir_p File.expand_path destination
657
764
 
658
765
  destination = package.install_location file, destination
659
766
 
660
767
  # this test only fails on ruby missing File.realpath
661
- assert_equal File.join(@destination, 'bar', 'file.rb'), destination
768
+ assert_equal File.join(@destination, "bar", "file.rb"), destination
662
769
  end
663
770
 
664
771
  def test_install_location_extra_slash
665
772
  package = Gem::Package.new @gem
666
773
 
667
- file = 'foo//file.rb'.dup
668
- file.taint
774
+ file = "foo//file.rb".dup
775
+ file.taint if RUBY_VERSION < "2.7"
669
776
 
670
- destination = @destination.sub '/', '//'
671
-
672
- destination = package.install_location file, destination
777
+ destination = package.install_location file, @destination
673
778
 
674
- assert_equal File.join(@destination, 'foo', 'file.rb'), destination
675
- refute destination.tainted?
779
+ assert_equal File.join(@destination, "foo", "file.rb"), destination
780
+ refute destination.tainted? if RUBY_VERSION < "2.7"
676
781
  end
677
782
 
678
783
  def test_install_location_relative
679
784
  package = Gem::Package.new @gem
680
785
 
681
- e = assert_raises Gem::Package::PathError do
682
- package.install_location '../relative.rb', @destination
786
+ e = assert_raise Gem::Package::PathError do
787
+ package.install_location "../relative.rb", @destination
683
788
  end
684
789
 
685
790
  parent = File.expand_path File.join @destination, "../relative.rb"
@@ -693,7 +798,7 @@ class TestGemPackage < Gem::Package::TarTestCase
693
798
 
694
799
  filename = "../#{File.basename(@destination)}suffix.rb"
695
800
 
696
- e = assert_raises Gem::Package::PathError do
801
+ e = assert_raise Gem::Package::PathError do
697
802
  package.install_location filename, @destination
698
803
  end
699
804
 
@@ -705,9 +810,9 @@ class TestGemPackage < Gem::Package::TarTestCase
705
810
 
706
811
  def test_load_spec
707
812
  entry = StringIO.new Gem::Util.gzip @spec.to_yaml
708
- def entry.full_name() 'metadata.gz' end
813
+ def entry.full_name() "metadata.gz" end
709
814
 
710
- package = Gem::Package.new 'nonexistent.gem'
815
+ package = Gem::Package.new "nonexistent.gem"
711
816
 
712
817
  spec = package.load_spec entry
713
818
 
@@ -726,8 +831,8 @@ class TestGemPackage < Gem::Package::TarTestCase
726
831
 
727
832
  def test_verify_checksum_bad
728
833
  data_tgz = util_tar_gz do |tar|
729
- tar.add_file 'lib/code.rb', 0444 do |io|
730
- io.write '# lib/code.rb'
834
+ tar.add_file "lib/code.rb", 0444 do |io|
835
+ io.write "# lib/code.rb"
731
836
  end
732
837
  end
733
838
 
@@ -736,45 +841,45 @@ class TestGemPackage < Gem::Package::TarTestCase
736
841
  gem = util_tar do |tar|
737
842
  metadata_gz = Gem::Util.gzip @spec.to_yaml
738
843
 
739
- tar.add_file 'metadata.gz', 0444 do |io|
844
+ tar.add_file "metadata.gz", 0444 do |io|
740
845
  io.write metadata_gz
741
846
  end
742
847
 
743
- tar.add_file 'data.tar.gz', 0444 do |io|
848
+ tar.add_file "data.tar.gz", 0444 do |io|
744
849
  io.write data_tgz
745
850
  end
746
851
 
747
852
  bogus_checksums = {
748
- 'SHA1' => {
749
- 'data.tar.gz' => 'bogus',
750
- 'metadata.gz' => 'bogus',
853
+ "SHA1" => {
854
+ "data.tar.gz" => "bogus",
855
+ "metadata.gz" => "bogus",
751
856
  },
752
857
  }
753
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
858
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
754
859
  Zlib::GzipWriter.wrap io do |gz_io|
755
- gz_io.write YAML.dump bogus_checksums
860
+ gz_io.write Psych.dump bogus_checksums
756
861
  end
757
862
  end
758
863
  end
759
864
 
760
- File.open 'mismatch.gem', 'wb' do |io|
865
+ File.open "mismatch.gem", "wb" do |io|
761
866
  io.write gem.string
762
867
  end
763
868
 
764
- package = Gem::Package.new 'mismatch.gem'
869
+ package = Gem::Package.new "mismatch.gem"
765
870
 
766
- e = assert_raises Gem::Package::FormatError do
871
+ e = assert_raise Gem::Package::FormatError do
767
872
  package.verify
768
873
  end
769
874
 
770
- assert_equal 'SHA1 checksum mismatch for data.tar.gz in mismatch.gem',
875
+ assert_equal "SHA1 checksum mismatch for data.tar.gz in mismatch.gem",
771
876
  e.message
772
877
  end
773
878
 
774
879
  def test_verify_checksum_missing
775
880
  data_tgz = util_tar_gz do |tar|
776
- tar.add_file 'lib/code.rb', 0444 do |io|
777
- io.write '# lib/code.rb'
881
+ tar.add_file "lib/code.rb", 0444 do |io|
882
+ io.write "# lib/code.rb"
778
883
  end
779
884
  end
780
885
 
@@ -783,50 +888,51 @@ class TestGemPackage < Gem::Package::TarTestCase
783
888
  gem = util_tar do |tar|
784
889
  metadata_gz = Gem::Util.gzip @spec.to_yaml
785
890
 
786
- tar.add_file 'metadata.gz', 0444 do |io|
891
+ tar.add_file "metadata.gz", 0444 do |io|
787
892
  io.write metadata_gz
788
893
  end
789
894
 
790
- digest = Digest::SHA1.new
895
+ digest = OpenSSL::Digest::SHA1.new
791
896
  digest << metadata_gz
792
897
 
793
898
  checksums = {
794
- 'SHA1' => {
795
- 'metadata.gz' => digest.hexdigest,
899
+ "SHA1" => {
900
+ "metadata.gz" => digest.hexdigest,
796
901
  },
797
902
  }
798
903
 
799
- tar.add_file 'checksums.yaml.gz', 0444 do |io|
904
+ tar.add_file "checksums.yaml.gz", 0444 do |io|
800
905
  Zlib::GzipWriter.wrap io do |gz_io|
801
- gz_io.write YAML.dump checksums
906
+ gz_io.write Psych.dump checksums
802
907
  end
803
908
  end
804
909
 
805
- tar.add_file 'data.tar.gz', 0444 do |io|
910
+ tar.add_file "data.tar.gz", 0444 do |io|
806
911
  io.write data_tgz
807
912
  end
808
913
  end
809
914
 
810
- File.open 'data_checksum_missing.gem', 'wb' do |io|
915
+ File.open "data_checksum_missing.gem", "wb" do |io|
811
916
  io.write gem.string
812
917
  end
813
918
 
814
- package = Gem::Package.new 'data_checksum_missing.gem'
919
+ package = Gem::Package.new "data_checksum_missing.gem"
815
920
 
816
921
  assert package.verify
817
922
  end
818
923
 
819
924
  def test_verify_corrupt
820
- tf = Tempfile.open 'corrupt' do |io|
821
- data = Gem::Util.gzip 'a' * 10
925
+ pend "jruby strips the null byte and does not think it's corrupt" if Gem.java_platform?
926
+ tf = Tempfile.open "corrupt" do |io|
927
+ data = Gem::Util.gzip "a" * 10
822
928
  io.write \
823
- tar_file_header('metadata.gz', "\000x", 0644, data.length, Time.now)
929
+ tar_file_header("metadata.gz", "\000x", 0644, data.length, Time.now)
824
930
  io.write data
825
931
  io.rewind
826
932
 
827
933
  package = Gem::Package.new io.path
828
934
 
829
- e = assert_raises Gem::Package::FormatError do
935
+ e = assert_raise Gem::Package::FormatError do
830
936
  package.verify
831
937
  end
832
938
 
@@ -838,48 +944,48 @@ class TestGemPackage < Gem::Package::TarTestCase
838
944
  end
839
945
 
840
946
  def test_verify_empty
841
- FileUtils.touch 'empty.gem'
947
+ FileUtils.touch "empty.gem"
842
948
 
843
- package = Gem::Package.new 'empty.gem'
949
+ package = Gem::Package.new "empty.gem"
844
950
 
845
- e = assert_raises Gem::Package::FormatError do
951
+ e = assert_raise Gem::Package::FormatError do
846
952
  package.verify
847
953
  end
848
954
 
849
- assert_equal 'package metadata is missing in empty.gem', e.message
955
+ assert_equal "package metadata is missing in empty.gem", e.message
850
956
  end
851
957
 
852
958
  def test_verify_nonexistent
853
- package = Gem::Package.new 'nonexistent.gem'
959
+ package = Gem::Package.new "nonexistent.gem"
854
960
 
855
- e = assert_raises Gem::Package::FormatError do
961
+ e = assert_raise Gem::Package::FormatError do
856
962
  package.verify
857
963
  end
858
964
 
859
- assert_match %r%^No such file or directory%, e.message
860
- assert_match %r%nonexistent.gem$%, e.message
965
+ assert_match %r{^No such file or directory}, e.message
966
+ assert_match %r{nonexistent.gem$}, e.message
861
967
  end
862
968
 
863
969
  def test_verify_duplicate_file
864
- FileUtils.mkdir_p 'lib'
865
- FileUtils.touch 'lib/code.rb'
970
+ FileUtils.mkdir_p "lib"
971
+ FileUtils.touch "lib/code.rb"
866
972
 
867
973
  build = Gem::Package.new @gem
868
974
  build.spec = @spec
869
975
  build.setup_signer
870
- open @gem, 'wb' do |gem_io|
976
+ File.open @gem, "wb" do |gem_io|
871
977
  Gem::Package::TarWriter.new gem_io do |gem|
872
978
  build.add_metadata gem
873
979
  build.add_contents gem
874
980
 
875
- gem.add_file_simple 'a.sig', 0444, 0
876
- gem.add_file_simple 'a.sig', 0444, 0
981
+ gem.add_file_simple "a.sig", 0444, 0
982
+ gem.add_file_simple "a.sig", 0444, 0
877
983
  end
878
984
  end
879
985
 
880
986
  package = Gem::Package.new @gem
881
987
 
882
- e = assert_raises Gem::Security::Exception do
988
+ e = assert_raise Gem::Security::Exception do
883
989
  package.verify
884
990
  end
885
991
 
@@ -887,30 +993,30 @@ class TestGemPackage < Gem::Package::TarTestCase
887
993
  end
888
994
 
889
995
  def test_verify_security_policy
890
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
996
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
891
997
 
892
998
  package = Gem::Package.new @gem
893
999
  package.security_policy = Gem::Security::HighSecurity
894
1000
 
895
- e = assert_raises Gem::Security::Exception do
1001
+ e = assert_raise Gem::Security::Exception do
896
1002
  package.verify
897
1003
  end
898
1004
 
899
- assert_equal 'unsigned gems are not allowed by the High Security policy',
1005
+ assert_equal "unsigned gems are not allowed by the High Security policy",
900
1006
  e.message
901
1007
 
902
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
903
- assert_empty package.instance_variable_get(:@files), '@files must empty'
1008
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
1009
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
904
1010
  end
905
1011
 
906
1012
  def test_verify_security_policy_low_security
907
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
1013
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
908
1014
 
909
1015
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
910
1016
  @spec.signing_key = PRIVATE_KEY
911
1017
 
912
- FileUtils.mkdir_p 'lib'
913
- FileUtils.touch 'lib/code.rb'
1018
+ FileUtils.mkdir_p "lib"
1019
+ FileUtils.touch "lib/code.rb"
914
1020
 
915
1021
  build = Gem::Package.new @gem
916
1022
  build.spec = @spec
@@ -924,7 +1030,7 @@ class TestGemPackage < Gem::Package::TarTestCase
924
1030
  end
925
1031
 
926
1032
  def test_verify_security_policy_checksum_missing
927
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
1033
+ pend "openssl is missing" unless Gem::HAVE_OPENSSL
928
1034
 
929
1035
  @spec.cert_chain = [PUBLIC_CERT.to_pem]
930
1036
  @spec.signing_key = PRIVATE_KEY
@@ -933,23 +1039,23 @@ class TestGemPackage < Gem::Package::TarTestCase
933
1039
  build.spec = @spec
934
1040
  build.setup_signer
935
1041
 
936
- FileUtils.mkdir 'lib'
937
- FileUtils.touch 'lib/code.rb'
1042
+ FileUtils.mkdir "lib"
1043
+ FileUtils.touch "lib/code.rb"
938
1044
 
939
- File.open @gem, 'wb' do |gem_io|
1045
+ File.open @gem, "wb" do |gem_io|
940
1046
  Gem::Package::TarWriter.new gem_io do |gem|
941
1047
  build.add_metadata gem
942
1048
  build.add_contents gem
943
1049
 
944
1050
  # write bogus data.tar.gz to foil signature
945
- bogus_data = Gem::Util.gzip 'hello'
1051
+ bogus_data = Gem::Util.gzip "hello"
946
1052
  fake_signer = Class.new do
947
- def digest_name; 'SHA512'; end
948
- def digest_algorithm; Digest(:SHA512); end
949
- def key; 'key'; end
950
- def sign(*); 'fake_sig'; end
1053
+ def digest_name; "SHA512"; end
1054
+ def digest_algorithm; OpenSSL::Digest(:SHA512).new; end
1055
+ def key; "key"; end
1056
+ def sign(*); "fake_sig"; end
951
1057
  end
952
- gem.add_file_signed 'data2.tar.gz', 0444, fake_signer.new do |io|
1058
+ gem.add_file_signed "data2.tar.gz", 0444, fake_signer.new do |io|
953
1059
  io.write bogus_data
954
1060
  end
955
1061
 
@@ -962,28 +1068,28 @@ class TestGemPackage < Gem::Package::TarTestCase
962
1068
  package = Gem::Package.new @gem
963
1069
  package.security_policy = Gem::Security::HighSecurity
964
1070
 
965
- e = assert_raises Gem::Security::Exception do
1071
+ e = assert_raise Gem::Security::Exception do
966
1072
  package.verify
967
1073
  end
968
1074
 
969
- assert_equal 'invalid signature', e.message
1075
+ assert_equal "invalid signature", e.message
970
1076
 
971
- refute package.instance_variable_get(:@spec), '@spec must not be loaded'
972
- assert_empty package.instance_variable_get(:@files), '@files must empty'
1077
+ refute package.instance_variable_get(:@spec), "@spec must not be loaded"
1078
+ assert_empty package.instance_variable_get(:@files), "@files must empty"
973
1079
  end
974
1080
 
975
1081
  def test_verify_truncate
976
- File.open 'bad.gem', 'wb' do |io|
1082
+ File.open "bad.gem", "wb" do |io|
977
1083
  io.write File.read(@gem, 1024) # don't care about newlines
978
1084
  end
979
1085
 
980
- package = Gem::Package.new 'bad.gem'
1086
+ package = Gem::Package.new "bad.gem"
981
1087
 
982
- e = assert_raises Gem::Package::FormatError do
1088
+ e = assert_raise Gem::Package::FormatError do
983
1089
  package.verify
984
1090
  end
985
1091
 
986
- assert_equal 'package content (data.tar.gz) is missing in bad.gem',
1092
+ assert_equal "package content (data.tar.gz) is missing in bad.gem",
987
1093
  e.message
988
1094
  end
989
1095
 
@@ -991,15 +1097,26 @@ class TestGemPackage < Gem::Package::TarTestCase
991
1097
 
992
1098
  def test_verify_entry
993
1099
  entry = Object.new
994
- def entry.full_name() raise ArgumentError, 'whatever' end
1100
+ def entry.full_name() raise ArgumentError, "whatever" end
995
1101
 
996
1102
  package = Gem::Package.new @gem
997
1103
 
998
- e = assert_raises Gem::Package::FormatError do
999
- package.verify_entry entry
1104
+ _, err = use_ui @ui do
1105
+ e = nil
1106
+
1107
+ out_err = capture_output do
1108
+ e = assert_raise ArgumentError do
1109
+ package.verify_entry entry
1110
+ end
1111
+ end
1112
+
1113
+ assert_equal "whatever", e.message
1114
+ assert_equal "full_name", e.backtrace_locations.first.label
1115
+
1116
+ out_err
1000
1117
  end
1001
1118
 
1002
- assert_equal "package is corrupt, exception while verifying: whatever (ArgumentError) in #{@gem}", e.message
1119
+ assert_equal "Exception while verifying #{@gem}\n", err
1003
1120
 
1004
1121
  valid_metadata = ["metadata", "metadata.gz"]
1005
1122
  valid_metadata.each do |vm|
@@ -1024,7 +1141,7 @@ class TestGemPackage < Gem::Package::TarTestCase
1024
1141
  $bad_name = vm
1025
1142
 
1026
1143
  entry = Object.new
1027
- def entry.full_name() $bad_name end
1144
+ def entry.full_name() $bad_name end
1028
1145
 
1029
1146
  package = Gem::Package.new(@gem)
1030
1147
  package.instance_variable_set(:@files, [])
@@ -1042,6 +1159,11 @@ class TestGemPackage < Gem::Package::TarTestCase
1042
1159
  assert_equal @spec, package.spec
1043
1160
  end
1044
1161
 
1162
+ def test_gem_attr
1163
+ package = Gem::Package.new(@gem)
1164
+ assert_equal(@gem, package.gem.path)
1165
+ end
1166
+
1045
1167
  def test_spec_from_io
1046
1168
  # This functionality is used by rubygems.org to extract spec data from an
1047
1169
  # uploaded gem before it is written to storage.
@@ -1054,11 +1176,18 @@ class TestGemPackage < Gem::Package::TarTestCase
1054
1176
  def test_spec_from_io_raises_gem_error_for_io_not_at_start
1055
1177
  io = StringIO.new Gem.read_binary @gem
1056
1178
  io.read(1)
1057
- assert_raises(Gem::Package::Error) do
1179
+ assert_raise(Gem::Package::Error) do
1058
1180
  Gem::Package.new io
1059
1181
  end
1060
1182
  end
1061
1183
 
1184
+ def test_contents_from_io
1185
+ io = StringIO.new Gem.read_binary @gem
1186
+ package = Gem::Package.new io
1187
+
1188
+ assert_equal %w[lib/code.rb], package.contents
1189
+ end
1190
+
1062
1191
  def util_tar
1063
1192
  tar_io = StringIO.new
1064
1193
 
@@ -1077,9 +1206,10 @@ class TestGemPackage < Gem::Package::TarTestCase
1077
1206
  tgz_io = StringIO.new
1078
1207
 
1079
1208
  # can't wrap TarWriter because it seeks
1080
- Zlib::GzipWriter.wrap tgz_io do |io| io.write tar_io.string end
1209
+ Zlib::GzipWriter.wrap tgz_io do |io|
1210
+ io.write tar_io.string
1211
+ end
1081
1212
 
1082
1213
  StringIO.new tgz_io.string
1083
1214
  end
1084
-
1085
1215
  end