rubygems-update 2.6.0 → 3.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (812) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5941 -0
  3. data/CODE_OF_CONDUCT.md +76 -35
  4. data/CONTRIBUTING.md +231 -0
  5. data/MAINTAINERS.txt +8 -0
  6. data/Manifest.txt +439 -216
  7. data/POLICIES.md +135 -0
  8. data/README.md +112 -0
  9. data/UPGRADING.md +15 -0
  10. data/bundler/CHANGELOG.md +4753 -0
  11. data/bundler/LICENSE.md +22 -0
  12. data/bundler/README.md +58 -0
  13. data/bundler/UPGRADING.md +222 -0
  14. data/bundler/bundler.gemspec +46 -0
  15. data/bundler/exe/bundle +29 -0
  16. data/bundler/exe/bundler +4 -0
  17. data/bundler/lib/bundler/.document +1 -0
  18. data/bundler/lib/bundler/build_metadata.rb +45 -0
  19. data/bundler/lib/bundler/capistrano.rb +22 -0
  20. data/bundler/lib/bundler/checksum.rb +254 -0
  21. data/bundler/lib/bundler/ci_detector.rb +75 -0
  22. data/bundler/lib/bundler/cli/add.rb +47 -0
  23. data/bundler/lib/bundler/cli/binstubs.rb +57 -0
  24. data/bundler/lib/bundler/cli/cache.rb +43 -0
  25. data/bundler/lib/bundler/cli/check.rb +40 -0
  26. data/bundler/lib/bundler/cli/clean.rb +25 -0
  27. data/bundler/lib/bundler/cli/common.rb +138 -0
  28. data/bundler/lib/bundler/cli/config.rb +204 -0
  29. data/bundler/lib/bundler/cli/console.rb +44 -0
  30. data/bundler/lib/bundler/cli/doctor.rb +157 -0
  31. data/bundler/lib/bundler/cli/exec.rb +88 -0
  32. data/bundler/lib/bundler/cli/fund.rb +36 -0
  33. data/bundler/lib/bundler/cli/gem.rb +471 -0
  34. data/bundler/lib/bundler/cli/info.rb +83 -0
  35. data/bundler/lib/bundler/cli/init.rb +51 -0
  36. data/bundler/lib/bundler/cli/inject.rb +60 -0
  37. data/bundler/lib/bundler/cli/install.rb +190 -0
  38. data/bundler/lib/bundler/cli/issue.rb +41 -0
  39. data/bundler/lib/bundler/cli/list.rb +66 -0
  40. data/bundler/lib/bundler/cli/lock.rb +73 -0
  41. data/bundler/lib/bundler/cli/open.rb +29 -0
  42. data/bundler/lib/bundler/cli/outdated.rb +297 -0
  43. data/bundler/lib/bundler/cli/platform.rb +48 -0
  44. data/bundler/lib/bundler/cli/plugin.rb +34 -0
  45. data/bundler/lib/bundler/cli/pristine.rb +60 -0
  46. data/bundler/lib/bundler/cli/remove.rb +17 -0
  47. data/bundler/lib/bundler/cli/show.rb +75 -0
  48. data/bundler/lib/bundler/cli/update.rb +123 -0
  49. data/bundler/lib/bundler/cli/viz.rb +31 -0
  50. data/bundler/lib/bundler/cli.rb +846 -0
  51. data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
  52. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  53. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
  54. data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
  55. data/bundler/lib/bundler/compact_index_client.rb +126 -0
  56. data/bundler/lib/bundler/constants.rb +7 -0
  57. data/bundler/lib/bundler/current_ruby.rb +92 -0
  58. data/bundler/lib/bundler/definition.rb +1015 -0
  59. data/bundler/lib/bundler/dependency.rb +105 -0
  60. data/bundler/lib/bundler/deployment.rb +69 -0
  61. data/bundler/lib/bundler/deprecate.rb +44 -0
  62. data/bundler/lib/bundler/digest.rb +71 -0
  63. data/bundler/lib/bundler/dsl.rb +604 -0
  64. data/bundler/lib/bundler/endpoint_specification.rb +147 -0
  65. data/bundler/lib/bundler/env.rb +148 -0
  66. data/bundler/lib/bundler/environment_preserver.rb +86 -0
  67. data/bundler/lib/bundler/errors.rb +233 -0
  68. data/bundler/lib/bundler/feature_flag.rb +53 -0
  69. data/bundler/lib/bundler/fetcher/base.rb +52 -0
  70. data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
  71. data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
  72. data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
  73. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  74. data/bundler/lib/bundler/fetcher/index.rb +25 -0
  75. data/bundler/lib/bundler/fetcher.rb +324 -0
  76. data/bundler/lib/bundler/force_platform.rb +18 -0
  77. data/bundler/lib/bundler/friendly_errors.rb +126 -0
  78. data/bundler/lib/bundler/gem_helper.rb +237 -0
  79. data/bundler/lib/bundler/gem_helpers.rb +127 -0
  80. data/bundler/lib/bundler/gem_tasks.rb +7 -0
  81. data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
  82. data/bundler/lib/bundler/graph.rb +152 -0
  83. data/bundler/lib/bundler/index.rb +205 -0
  84. data/bundler/lib/bundler/injector.rb +287 -0
  85. data/bundler/lib/bundler/inline.rb +73 -0
  86. data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
  87. data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
  88. data/bundler/lib/bundler/installer/standalone.rb +116 -0
  89. data/bundler/lib/bundler/installer.rb +267 -0
  90. data/bundler/lib/bundler/lazy_specification.rb +172 -0
  91. data/bundler/lib/bundler/lockfile_generator.rb +104 -0
  92. data/bundler/lib/bundler/lockfile_parser.rb +289 -0
  93. data/bundler/lib/bundler/man/.document +1 -0
  94. data/bundler/lib/bundler/man/bundle-add.1 +59 -0
  95. data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
  96. data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
  97. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
  98. data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
  99. data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
  100. data/bundler/lib/bundler/man/bundle-check.1 +22 -0
  101. data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
  102. data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
  103. data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
  104. data/bundler/lib/bundler/man/bundle-config.1 +321 -0
  105. data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
  106. data/bundler/lib/bundler/man/bundle-console.1 +35 -0
  107. data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
  108. data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
  109. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
  110. data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
  111. data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
  112. data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
  113. data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
  114. data/bundler/lib/bundler/man/bundle-help.1 +9 -0
  115. data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
  116. data/bundler/lib/bundler/man/bundle-info.1 +14 -0
  117. data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
  118. data/bundler/lib/bundler/man/bundle-init.1 +20 -0
  119. data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
  120. data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
  121. data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
  122. data/bundler/lib/bundler/man/bundle-install.1 +215 -0
  123. data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
  124. data/bundler/lib/bundler/man/bundle-list.1 +35 -0
  125. data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
  126. data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
  127. data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
  128. data/bundler/lib/bundler/man/bundle-open.1 +32 -0
  129. data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
  130. data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
  131. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
  132. data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
  133. data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
  134. data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
  135. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
  136. data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
  137. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  138. data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
  139. data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
  140. data/bundler/lib/bundler/man/bundle-show.1 +16 -0
  141. data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
  142. data/bundler/lib/bundler/man/bundle-update.1 +275 -0
  143. data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
  144. data/bundler/lib/bundler/man/bundle-version.1 +22 -0
  145. data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
  146. data/bundler/lib/bundler/man/bundle-viz.1 +30 -0
  147. data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
  148. data/bundler/lib/bundler/man/bundle.1 +102 -0
  149. data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
  150. data/bundler/lib/bundler/man/gemfile.5 +470 -0
  151. data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
  152. data/bundler/lib/bundler/man/index.txt +29 -0
  153. data/bundler/lib/bundler/match_metadata.rb +17 -0
  154. data/bundler/lib/bundler/match_platform.rb +23 -0
  155. data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
  156. data/bundler/lib/bundler/mirror.rb +221 -0
  157. data/bundler/lib/bundler/plugin/api/source.rb +321 -0
  158. data/bundler/lib/bundler/plugin/api.rb +81 -0
  159. data/bundler/lib/bundler/plugin/dsl.rb +53 -0
  160. data/bundler/lib/bundler/plugin/events.rb +61 -0
  161. data/bundler/lib/bundler/plugin/index.rb +193 -0
  162. data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
  163. data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
  164. data/bundler/lib/bundler/plugin/installer.rb +112 -0
  165. data/bundler/lib/bundler/plugin/source_list.rb +31 -0
  166. data/bundler/lib/bundler/plugin.rb +359 -0
  167. data/bundler/lib/bundler/process_lock.rb +24 -0
  168. data/bundler/lib/bundler/remote_specification.rb +121 -0
  169. data/bundler/lib/bundler/resolver/base.rb +107 -0
  170. data/bundler/lib/bundler/resolver/candidate.rb +94 -0
  171. data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
  172. data/bundler/lib/bundler/resolver/package.rb +77 -0
  173. data/bundler/lib/bundler/resolver/root.rb +25 -0
  174. data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
  175. data/bundler/lib/bundler/resolver.rb +462 -0
  176. data/bundler/lib/bundler/retry.rb +66 -0
  177. data/bundler/lib/bundler/ruby_dsl.rb +53 -0
  178. data/bundler/lib/bundler/ruby_version.rb +131 -0
  179. data/bundler/lib/bundler/rubygems_ext.rb +328 -0
  180. data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
  181. data/bundler/lib/bundler/rubygems_integration.rb +493 -0
  182. data/bundler/lib/bundler/runtime.rb +307 -0
  183. data/bundler/lib/bundler/safe_marshal.rb +31 -0
  184. data/bundler/lib/bundler/self_manager.rb +186 -0
  185. data/bundler/lib/bundler/settings/validator.rb +102 -0
  186. data/bundler/lib/bundler/settings.rb +588 -0
  187. data/bundler/lib/bundler/setup.rb +33 -0
  188. data/bundler/lib/bundler/shared_helpers.rb +380 -0
  189. data/bundler/lib/bundler/similarity_detector.rb +63 -0
  190. data/bundler/lib/bundler/source/gemspec.rb +18 -0
  191. data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
  192. data/bundler/lib/bundler/source/git.rb +380 -0
  193. data/bundler/lib/bundler/source/metadata.rb +62 -0
  194. data/bundler/lib/bundler/source/path/installer.rb +53 -0
  195. data/bundler/lib/bundler/source/path.rb +261 -0
  196. data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
  197. data/bundler/lib/bundler/source/rubygems.rb +516 -0
  198. data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
  199. data/bundler/lib/bundler/source.rb +116 -0
  200. data/bundler/lib/bundler/source_list.rb +227 -0
  201. data/bundler/lib/bundler/source_map.rb +71 -0
  202. data/bundler/lib/bundler/spec_set.rb +296 -0
  203. data/bundler/lib/bundler/stub_specification.rb +119 -0
  204. data/bundler/lib/bundler/templates/.document +1 -0
  205. data/bundler/lib/bundler/templates/Executable +27 -0
  206. data/bundler/lib/bundler/templates/Executable.bundler +109 -0
  207. data/bundler/lib/bundler/templates/Executable.standalone +14 -0
  208. data/bundler/lib/bundler/templates/Gemfile +5 -0
  209. data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  210. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
  211. data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  212. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
  213. data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  214. data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
  215. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
  216. data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
  217. data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  218. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
  219. data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  220. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  221. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  222. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  223. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  224. data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  225. data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  226. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +37 -0
  227. data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
  228. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
  229. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  230. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  231. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
  232. data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
  233. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
  234. data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  235. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
  236. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  237. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  238. data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  239. data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
  240. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  241. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  242. data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
  243. data/bundler/lib/bundler/ui/shell.rb +165 -0
  244. data/bundler/lib/bundler/ui/silent.rb +85 -0
  245. data/bundler/lib/bundler/ui.rb +9 -0
  246. data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
  247. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  248. data/bundler/lib/bundler/vendor/.document +1 -0
  249. data/bundler/lib/bundler/vendor/connection_pool/.document +1 -0
  250. data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  251. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
  252. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  253. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  254. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
  255. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  256. data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
  257. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
  258. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  259. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  260. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  261. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  262. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  263. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -0
  264. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  265. data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  266. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  267. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  268. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  269. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  270. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  271. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  272. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  273. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  274. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
  275. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  276. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  277. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  278. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
  279. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
  280. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  281. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  282. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  283. data/bundler/lib/bundler/vendor/thor/LICENSE.md +20 -0
  284. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  285. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  286. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  287. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  288. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
  289. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  290. data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  291. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  292. data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  293. data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  294. data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  295. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
  296. data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  297. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  298. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  299. data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  300. data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  301. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
  302. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  303. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  304. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
  305. data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  306. data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  307. data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  308. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
  309. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
  310. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  311. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
  312. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
  313. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  314. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  315. data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  316. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  317. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  318. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
  319. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  320. data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  321. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  322. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  323. data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
  324. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
  325. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  326. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  327. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
  328. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
  329. data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  330. data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  331. data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  332. data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  333. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
  334. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
  335. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  336. data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  337. data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  338. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  339. data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
  340. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  341. data/bundler/lib/bundler/vendored_persistent.rb +11 -0
  342. data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
  343. data/bundler/lib/bundler/vendored_thor.rb +8 -0
  344. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  345. data/bundler/lib/bundler/vendored_tsort.rb +4 -0
  346. data/bundler/lib/bundler/vendored_uri.rb +4 -0
  347. data/bundler/lib/bundler/version.rb +13 -0
  348. data/bundler/lib/bundler/vlad.rb +17 -0
  349. data/bundler/lib/bundler/worker.rb +117 -0
  350. data/bundler/lib/bundler/yaml_serializer.rb +93 -0
  351. data/bundler/lib/bundler.rb +663 -0
  352. data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
  353. data/exe/update_rubygems +38 -0
  354. data/hide_lib_for_update/note.txt +0 -4
  355. data/lib/rubygems/available_set.rb +12 -12
  356. data/lib/rubygems/basic_specification.rb +82 -59
  357. data/lib/rubygems/bundler_version_finder.rb +77 -0
  358. data/lib/rubygems/ci_detector.rb +75 -0
  359. data/lib/rubygems/command.rb +144 -71
  360. data/lib/rubygems/command_manager.rb +64 -27
  361. data/lib/rubygems/commands/build_command.rb +88 -17
  362. data/lib/rubygems/commands/cert_command.rb +131 -83
  363. data/lib/rubygems/commands/check_command.rb +30 -27
  364. data/lib/rubygems/commands/cleanup_command.rb +57 -40
  365. data/lib/rubygems/commands/contents_command.rb +37 -39
  366. data/lib/rubygems/commands/dependency_command.rb +53 -65
  367. data/lib/rubygems/commands/environment_command.rb +32 -16
  368. data/lib/rubygems/commands/exec_command.rb +249 -0
  369. data/lib/rubygems/commands/fetch_command.rb +36 -19
  370. data/lib/rubygems/commands/generate_index_command.rb +40 -74
  371. data/lib/rubygems/commands/help_command.rb +22 -22
  372. data/lib/rubygems/commands/info_command.rb +38 -0
  373. data/lib/rubygems/commands/install_command.rb +67 -143
  374. data/lib/rubygems/commands/list_command.rb +10 -9
  375. data/lib/rubygems/commands/lock_command.rb +12 -14
  376. data/lib/rubygems/commands/mirror_command.rb +4 -4
  377. data/lib/rubygems/commands/open_command.rb +28 -26
  378. data/lib/rubygems/commands/outdated_command.rb +6 -6
  379. data/lib/rubygems/commands/owner_command.rb +51 -27
  380. data/lib/rubygems/commands/pristine_command.rb +99 -71
  381. data/lib/rubygems/commands/push_command.rb +53 -46
  382. data/lib/rubygems/commands/query_command.rb +21 -328
  383. data/lib/rubygems/commands/rdoc_command.rb +33 -33
  384. data/lib/rubygems/commands/search_command.rb +9 -9
  385. data/lib/rubygems/commands/server_command.rb +15 -76
  386. data/lib/rubygems/commands/setup_command.rb +370 -186
  387. data/lib/rubygems/commands/signin_command.rb +34 -0
  388. data/lib/rubygems/commands/signout_command.rb +32 -0
  389. data/lib/rubygems/commands/sources_command.rb +57 -41
  390. data/lib/rubygems/commands/specification_command.rb +38 -28
  391. data/lib/rubygems/commands/stale_command.rb +6 -5
  392. data/lib/rubygems/commands/uninstall_command.rb +96 -62
  393. data/lib/rubygems/commands/unpack_command.rb +44 -53
  394. data/lib/rubygems/commands/update_command.rb +153 -99
  395. data/lib/rubygems/commands/which_command.rb +14 -17
  396. data/lib/rubygems/commands/yank_command.rb +28 -32
  397. data/lib/rubygems/compatibility.rb +13 -32
  398. data/lib/rubygems/config_file.rb +214 -119
  399. data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
  400. data/lib/rubygems/core_ext/kernel_require.rb +92 -90
  401. data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
  402. data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
  403. data/lib/rubygems/defaults.rb +184 -54
  404. data/lib/rubygems/dependency.rb +75 -62
  405. data/lib/rubygems/dependency_installer.rb +74 -230
  406. data/lib/rubygems/dependency_list.rb +32 -33
  407. data/lib/rubygems/deprecate.rb +113 -17
  408. data/lib/rubygems/doctor.rb +31 -31
  409. data/lib/rubygems/errors.rb +51 -13
  410. data/lib/rubygems/exceptions.rb +65 -35
  411. data/lib/rubygems/ext/build_error.rb +3 -1
  412. data/lib/rubygems/ext/builder.rb +103 -77
  413. data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
  414. data/lib/rubygems/ext/cargo_builder.rb +360 -0
  415. data/lib/rubygems/ext/cmake_builder.rb +6 -7
  416. data/lib/rubygems/ext/configure_builder.rb +6 -9
  417. data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
  418. data/lib/rubygems/ext/rake_builder.rb +18 -21
  419. data/lib/rubygems/ext.rb +8 -7
  420. data/lib/rubygems/gem_runner.rb +19 -21
  421. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
  422. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
  423. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
  424. data/lib/rubygems/gemcutter_utilities.rb +246 -43
  425. data/lib/rubygems/install_default_message.rb +3 -3
  426. data/lib/rubygems/install_message.rb +3 -3
  427. data/lib/rubygems/install_update_options.rb +104 -98
  428. data/lib/rubygems/installer.rb +407 -225
  429. data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
  430. data/lib/rubygems/local_remote_options.rb +29 -32
  431. data/lib/rubygems/name_tuple.rb +18 -23
  432. data/lib/rubygems/net/http.rb +3 -0
  433. data/lib/rubygems/net-http/.document +1 -0
  434. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  435. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  436. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  437. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  438. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  439. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  440. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  441. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  442. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  443. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  444. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  445. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  446. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  447. data/lib/rubygems/net-protocol/.document +1 -0
  448. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  449. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  450. data/lib/rubygems/openssl.rb +7 -0
  451. data/lib/rubygems/optparse/.document +1 -0
  452. data/lib/rubygems/optparse/COPYING +56 -0
  453. data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
  454. data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
  455. data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
  456. data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
  457. data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
  458. data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
  459. data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
  460. data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
  461. data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
  462. data/lib/rubygems/optparse.rb +3 -0
  463. data/lib/rubygems/package/digest_io.rb +5 -7
  464. data/lib/rubygems/package/file_source.rb +6 -8
  465. data/lib/rubygems/package/io_source.rb +6 -4
  466. data/lib/rubygems/package/old.rb +19 -28
  467. data/lib/rubygems/package/source.rb +1 -1
  468. data/lib/rubygems/package/tar_header.rb +114 -93
  469. data/lib/rubygems/package/tar_reader/entry.rb +116 -22
  470. data/lib/rubygems/package/tar_reader.rb +18 -40
  471. data/lib/rubygems/package/tar_writer.rb +42 -56
  472. data/lib/rubygems/package.rb +254 -144
  473. data/lib/rubygems/package_task.rb +8 -14
  474. data/lib/rubygems/path_support.rb +21 -16
  475. data/lib/rubygems/platform.rb +135 -74
  476. data/lib/rubygems/psych_tree.rb +3 -2
  477. data/lib/rubygems/query_utils.rb +349 -0
  478. data/lib/rubygems/rdoc.rb +4 -326
  479. data/lib/rubygems/remote_fetcher.rb +99 -181
  480. data/lib/rubygems/request/connection_pools.rb +31 -24
  481. data/lib/rubygems/request/http_pool.rb +6 -7
  482. data/lib/rubygems/request/https_pool.rb +2 -3
  483. data/lib/rubygems/request.rb +107 -57
  484. data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
  485. data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
  486. data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
  487. data/lib/rubygems/request_set/lockfile.rb +32 -35
  488. data/lib/rubygems/request_set.rb +115 -71
  489. data/lib/rubygems/requirement.rb +77 -68
  490. data/lib/rubygems/resolv/.document +1 -0
  491. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  492. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  493. data/lib/rubygems/resolver/activation_request.rb +34 -61
  494. data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
  495. data/lib/rubygems/resolver/api_set.rb +40 -32
  496. data/lib/rubygems/resolver/api_specification.rb +37 -18
  497. data/lib/rubygems/resolver/best_set.rb +15 -17
  498. data/lib/rubygems/resolver/composed_set.rb +9 -11
  499. data/lib/rubygems/resolver/conflict.rb +19 -33
  500. data/lib/rubygems/resolver/current_set.rb +2 -4
  501. data/lib/rubygems/resolver/dependency_request.rb +8 -9
  502. data/lib/rubygems/resolver/git_set.rb +8 -10
  503. data/lib/rubygems/resolver/git_specification.rb +11 -13
  504. data/lib/rubygems/resolver/index_set.rb +13 -15
  505. data/lib/rubygems/resolver/index_specification.rb +42 -11
  506. data/lib/rubygems/resolver/installed_specification.rb +9 -11
  507. data/lib/rubygems/resolver/installer_set.rb +93 -47
  508. data/lib/rubygems/resolver/local_specification.rb +5 -7
  509. data/lib/rubygems/resolver/lock_set.rb +13 -15
  510. data/lib/rubygems/resolver/lock_specification.rb +13 -15
  511. data/lib/rubygems/resolver/molinillo/.document +1 -0
  512. data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
  513. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  514. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
  515. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
  516. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
  517. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
  518. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  519. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
  520. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
  521. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
  522. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
  523. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
  524. data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
  525. data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
  526. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  527. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
  528. data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
  529. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
  530. data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
  531. data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
  532. data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
  533. data/lib/rubygems/resolver/molinillo.rb +2 -1
  534. data/lib/rubygems/resolver/requirement_list.rb +2 -2
  535. data/lib/rubygems/resolver/set.rb +3 -5
  536. data/lib/rubygems/resolver/source_set.rb +6 -7
  537. data/lib/rubygems/resolver/spec_specification.rb +16 -4
  538. data/lib/rubygems/resolver/specification.rb +25 -10
  539. data/lib/rubygems/resolver/stats.rb +1 -0
  540. data/lib/rubygems/resolver/vendor_set.rb +6 -8
  541. data/lib/rubygems/resolver/vendor_specification.rb +6 -8
  542. data/lib/rubygems/resolver.rb +121 -72
  543. data/lib/rubygems/s3_uri_signer.rb +177 -0
  544. data/lib/rubygems/safe_marshal/elements.rb +146 -0
  545. data/lib/rubygems/safe_marshal/reader.rb +308 -0
  546. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  547. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +415 -0
  548. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  549. data/lib/rubygems/safe_marshal.rb +74 -0
  550. data/lib/rubygems/safe_yaml.rb +36 -0
  551. data/lib/rubygems/security/policies.rb +49 -51
  552. data/lib/rubygems/security/policy.rb +46 -53
  553. data/lib/rubygems/security/signer.rb +86 -29
  554. data/lib/rubygems/security/trust_dir.rb +22 -24
  555. data/lib/rubygems/security.rb +101 -82
  556. data/lib/rubygems/security_option.rb +43 -0
  557. data/lib/rubygems/shellwords.rb +3 -0
  558. data/lib/rubygems/source/git.rb +40 -42
  559. data/lib/rubygems/source/installed.rb +5 -9
  560. data/lib/rubygems/source/local.rb +30 -33
  561. data/lib/rubygems/source/lock.rb +10 -10
  562. data/lib/rubygems/source/specific_file.rb +7 -9
  563. data/lib/rubygems/source/vendor.rb +3 -7
  564. data/lib/rubygems/source.rb +78 -68
  565. data/lib/rubygems/source_list.rb +11 -15
  566. data/lib/rubygems/spec_fetcher.rb +71 -83
  567. data/lib/rubygems/specification.rb +833 -1115
  568. data/lib/rubygems/specification_policy.rb +538 -0
  569. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
  570. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
  571. data/lib/rubygems/stub_specification.rb +55 -57
  572. data/lib/rubygems/text.rb +39 -27
  573. data/lib/rubygems/timeout/.document +1 -0
  574. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  575. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  576. data/lib/rubygems/timeout.rb +3 -0
  577. data/lib/rubygems/tsort/.document +1 -0
  578. data/lib/rubygems/tsort/LICENSE.txt +22 -0
  579. data/lib/rubygems/tsort/lib/tsort.rb +455 -0
  580. data/lib/rubygems/tsort.rb +3 -0
  581. data/lib/rubygems/uninstaller.rb +150 -87
  582. data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
  583. data/lib/rubygems/update_suggestion.rb +56 -0
  584. data/lib/rubygems/uri.rb +126 -0
  585. data/lib/rubygems/uri_formatter.rb +4 -7
  586. data/lib/rubygems/user_interaction.rb +92 -146
  587. data/lib/rubygems/util/licenses.rb +712 -317
  588. data/lib/rubygems/util/list.rb +5 -2
  589. data/lib/rubygems/util.rb +58 -75
  590. data/lib/rubygems/validator.rb +26 -48
  591. data/lib/rubygems/version.rb +106 -56
  592. data/lib/rubygems/version_option.rb +22 -14
  593. data/lib/rubygems/yaml_serializer.rb +93 -0
  594. data/lib/rubygems.rb +453 -358
  595. data/rubygems-update.gemspec +38 -0
  596. data/setup.rb +13 -27
  597. metadata +511 -363
  598. data/.autotest +0 -71
  599. data/.document +0 -5
  600. data/.travis.yml +0 -46
  601. data/CONTRIBUTING.rdoc +0 -129
  602. data/CVE-2013-4287.txt +0 -35
  603. data/CVE-2013-4363.txt +0 -45
  604. data/CVE-2015-3900.txt +0 -40
  605. data/History.txt +0 -3094
  606. data/MAINTAINERS.md +0 -5
  607. data/POLICIES.rdoc +0 -61
  608. data/README.rdoc +0 -54
  609. data/Rakefile +0 -449
  610. data/UPGRADING.rdoc +0 -92
  611. data/appveyor.yml +0 -36
  612. data/bin/gem +0 -25
  613. data/bin/update_rubygems +0 -37
  614. data/lib/gauntlet_rubygems.rb +0 -51
  615. data/lib/rubygems/indexer.rb +0 -434
  616. data/lib/rubygems/installer_test_case.rb +0 -194
  617. data/lib/rubygems/mock_gem_ui.rb +0 -89
  618. data/lib/rubygems/package/tar_test_case.rb +0 -147
  619. data/lib/rubygems/psych_additions.rb +0 -10
  620. data/lib/rubygems/server.rb +0 -869
  621. data/lib/rubygems/source_local.rb +0 -6
  622. data/lib/rubygems/source_specific_file.rb +0 -5
  623. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  624. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
  625. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  626. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  627. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  628. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  629. data/lib/rubygems/syck_hack.rb +0 -77
  630. data/lib/rubygems/test_case.rb +0 -1496
  631. data/lib/rubygems/test_utilities.rb +0 -384
  632. data/lib/ubygems.rb +0 -11
  633. data/test/rubygems/alternate_cert.pem +0 -18
  634. data/test/rubygems/alternate_cert_32.pem +0 -18
  635. data/test/rubygems/alternate_key.pem +0 -27
  636. data/test/rubygems/bad_rake.rb +0 -2
  637. data/test/rubygems/ca_cert.pem +0 -68
  638. data/test/rubygems/child_cert.pem +0 -18
  639. data/test/rubygems/child_cert_32.pem +0 -18
  640. data/test/rubygems/child_key.pem +0 -27
  641. data/test/rubygems/client.pem +0 -49
  642. data/test/rubygems/data/gem-private_key.pem +0 -27
  643. data/test/rubygems/data/gem-public_cert.pem +0 -20
  644. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  645. data/test/rubygems/encrypted_private_key.pem +0 -30
  646. data/test/rubygems/expired_cert.pem +0 -18
  647. data/test/rubygems/fake_certlib/openssl.rb +0 -8
  648. data/test/rubygems/fix_openssl_warnings.rb +0 -13
  649. data/test/rubygems/foo/discover.rb +0 -1
  650. data/test/rubygems/future_cert.pem +0 -18
  651. data/test/rubygems/future_cert_32.pem +0 -18
  652. data/test/rubygems/good_rake.rb +0 -2
  653. data/test/rubygems/grandchild_cert.pem +0 -18
  654. data/test/rubygems/grandchild_cert_32.pem +0 -18
  655. data/test/rubygems/grandchild_key.pem +0 -27
  656. data/test/rubygems/invalid_client.pem +0 -49
  657. data/test/rubygems/invalid_issuer_cert.pem +0 -18
  658. data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
  659. data/test/rubygems/invalid_key.pem +0 -27
  660. data/test/rubygems/invalid_signer_cert.pem +0 -18
  661. data/test/rubygems/invalid_signer_cert_32.pem +0 -18
  662. data/test/rubygems/invalidchild_cert.pem +0 -18
  663. data/test/rubygems/invalidchild_cert_32.pem +0 -18
  664. data/test/rubygems/invalidchild_key.pem +0 -27
  665. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
  666. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
  667. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
  668. data/test/rubygems/private_key.pem +0 -27
  669. data/test/rubygems/public_cert.pem +0 -18
  670. data/test/rubygems/public_cert_32.pem +0 -18
  671. data/test/rubygems/public_key.pem +0 -9
  672. data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
  673. data/test/rubygems/rubygems_plugin.rb +0 -22
  674. data/test/rubygems/sff/discover.rb +0 -1
  675. data/test/rubygems/simple_gem.rb +0 -67
  676. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  677. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  678. data/test/rubygems/ssl_cert.pem +0 -19
  679. data/test/rubygems/ssl_key.pem +0 -15
  680. data/test/rubygems/test_bundled_ca.rb +0 -59
  681. data/test/rubygems/test_config.rb +0 -24
  682. data/test/rubygems/test_deprecate.rb +0 -77
  683. data/test/rubygems/test_gem.rb +0 -1679
  684. data/test/rubygems/test_gem_available_set.rb +0 -130
  685. data/test/rubygems/test_gem_command.rb +0 -248
  686. data/test/rubygems/test_gem_command_manager.rb +0 -264
  687. data/test/rubygems/test_gem_commands_build_command.rb +0 -121
  688. data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
  689. data/test/rubygems/test_gem_commands_check_command.rb +0 -69
  690. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
  691. data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
  692. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
  693. data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
  694. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
  695. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
  696. data/test/rubygems/test_gem_commands_help_command.rb +0 -75
  697. data/test/rubygems/test_gem_commands_install_command.rb +0 -987
  698. data/test/rubygems/test_gem_commands_list_command.rb +0 -34
  699. data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
  700. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  701. data/test/rubygems/test_gem_commands_open_command.rb +0 -70
  702. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
  703. data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
  704. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
  705. data/test/rubygems/test_gem_commands_push_command.rb +0 -330
  706. data/test/rubygems/test_gem_commands_query_command.rb +0 -657
  707. data/test/rubygems/test_gem_commands_search_command.rb +0 -18
  708. data/test/rubygems/test_gem_commands_server_command.rb +0 -60
  709. data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
  710. data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
  711. data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
  712. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  713. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
  714. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
  715. data/test/rubygems/test_gem_commands_update_command.rb +0 -514
  716. data/test/rubygems/test_gem_commands_which_command.rb +0 -87
  717. data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
  718. data/test/rubygems/test_gem_config_file.rb +0 -491
  719. data/test/rubygems/test_gem_dependency.rb +0 -362
  720. data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
  721. data/test/rubygems/test_gem_dependency_list.rb +0 -260
  722. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
  723. data/test/rubygems/test_gem_doctor.rb +0 -169
  724. data/test/rubygems/test_gem_ext_builder.rb +0 -341
  725. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
  726. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
  727. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
  728. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
  729. data/test/rubygems/test_gem_gem_runner.rb +0 -69
  730. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
  731. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
  732. data/test/rubygems/test_gem_indexer.rb +0 -367
  733. data/test/rubygems/test_gem_install_update_options.rb +0 -197
  734. data/test/rubygems/test_gem_installer.rb +0 -1552
  735. data/test/rubygems/test_gem_local_remote_options.rb +0 -134
  736. data/test/rubygems/test_gem_name_tuple.rb +0 -45
  737. data/test/rubygems/test_gem_package.rb +0 -876
  738. data/test/rubygems/test_gem_package_old.rb +0 -90
  739. data/test/rubygems/test_gem_package_tar_header.rb +0 -147
  740. data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
  741. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
  742. data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
  743. data/test/rubygems/test_gem_package_task.rb +0 -84
  744. data/test/rubygems/test_gem_path_support.rb +0 -121
  745. data/test/rubygems/test_gem_platform.rb +0 -308
  746. data/test/rubygems/test_gem_rdoc.rb +0 -270
  747. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
  748. data/test/rubygems/test_gem_request.rb +0 -363
  749. data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
  750. data/test/rubygems/test_gem_request_set.rb +0 -595
  751. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
  752. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
  753. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
  754. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
  755. data/test/rubygems/test_gem_requirement.rb +0 -387
  756. data/test/rubygems/test_gem_resolver.rb +0 -715
  757. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
  758. data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
  759. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
  760. data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
  761. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
  762. data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
  763. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
  764. data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
  765. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  766. data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
  767. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
  768. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
  769. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
  770. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
  771. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
  772. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
  773. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
  774. data/test/rubygems/test_gem_resolver_specification.rb +0 -65
  775. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
  776. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
  777. data/test/rubygems/test_gem_security.rb +0 -307
  778. data/test/rubygems/test_gem_security_policy.rb +0 -541
  779. data/test/rubygems/test_gem_security_signer.rb +0 -209
  780. data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
  781. data/test/rubygems/test_gem_server.rb +0 -409
  782. data/test/rubygems/test_gem_silent_ui.rb +0 -117
  783. data/test/rubygems/test_gem_source.rb +0 -242
  784. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
  785. data/test/rubygems/test_gem_source_git.rb +0 -309
  786. data/test/rubygems/test_gem_source_installed.rb +0 -37
  787. data/test/rubygems/test_gem_source_list.rb +0 -118
  788. data/test/rubygems/test_gem_source_local.rb +0 -107
  789. data/test/rubygems/test_gem_source_lock.rb +0 -115
  790. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  791. data/test/rubygems/test_gem_source_vendor.rb +0 -32
  792. data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
  793. data/test/rubygems/test_gem_specification.rb +0 -3519
  794. data/test/rubygems/test_gem_stream_ui.rb +0 -239
  795. data/test/rubygems/test_gem_stub_specification.rb +0 -217
  796. data/test/rubygems/test_gem_text.rb +0 -77
  797. data/test/rubygems/test_gem_uninstaller.rb +0 -485
  798. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
  799. data/test/rubygems/test_gem_uri_formatter.rb +0 -29
  800. data/test/rubygems/test_gem_util.rb +0 -40
  801. data/test/rubygems/test_gem_validator.rb +0 -46
  802. data/test/rubygems/test_gem_version.rb +0 -222
  803. data/test/rubygems/test_gem_version_option.rb +0 -152
  804. data/test/rubygems/test_kernel.rb +0 -86
  805. data/test/rubygems/test_require.rb +0 -322
  806. data/test/rubygems/wrong_key_cert.pem +0 -18
  807. data/test/rubygems/wrong_key_cert_32.pem +0 -18
  808. data/util/CL2notes +0 -56
  809. data/util/create_certs.rb +0 -157
  810. data/util/create_encrypted_key.rb +0 -17
  811. data/util/generate_spdx_license_list.rb +0 -51
  812. data/util/update_bundled_ca_certificates.rb +0 -118
@@ -0,0 +1,825 @@
1
+ require_relative "command"
2
+ require_relative "core_ext/hash_with_indifferent_access"
3
+ require_relative "error"
4
+ require_relative "invocation"
5
+ require_relative "nested_context"
6
+ require_relative "parser"
7
+ require_relative "shell"
8
+ require_relative "line_editor"
9
+ require_relative "util"
10
+
11
+ class Bundler::Thor
12
+ autoload :Actions, File.expand_path("actions", __dir__)
13
+ autoload :RakeCompat, File.expand_path("rake_compat", __dir__)
14
+ autoload :Group, File.expand_path("group", __dir__)
15
+
16
+ # Shortcuts for help.
17
+ HELP_MAPPINGS = %w(-h -? --help -D)
18
+
19
+ # Bundler::Thor methods that should not be overwritten by the user.
20
+ THOR_RESERVED_WORDS = %w(invoke shell options behavior root destination_root relative_root
21
+ action add_file create_file in_root inside run run_ruby_script)
22
+
23
+ TEMPLATE_EXTNAME = ".tt"
24
+
25
+ class << self
26
+ def deprecation_warning(message) #:nodoc:
27
+ unless ENV["THOR_SILENCE_DEPRECATION"]
28
+ warn "Deprecation warning: #{message}\n" +
29
+ "You can silence deprecations warning by setting the environment variable THOR_SILENCE_DEPRECATION."
30
+ end
31
+ end
32
+ end
33
+
34
+ module Base
35
+ attr_accessor :options, :parent_options, :args
36
+
37
+ # It receives arguments in an Array and two hashes, one for options and
38
+ # other for configuration.
39
+ #
40
+ # Notice that it does not check if all required arguments were supplied.
41
+ # It should be done by the parser.
42
+ #
43
+ # ==== Parameters
44
+ # args<Array[Object]>:: An array of objects. The objects are applied to their
45
+ # respective accessors declared with <tt>argument</tt>.
46
+ #
47
+ # options<Hash>:: An options hash that will be available as self.options.
48
+ # The hash given is converted to a hash with indifferent
49
+ # access, magic predicates (options.skip?) and then frozen.
50
+ #
51
+ # config<Hash>:: Configuration for this Bundler::Thor class.
52
+ #
53
+ def initialize(args = [], local_options = {}, config = {})
54
+ parse_options = self.class.class_options
55
+
56
+ # The start method splits inbound arguments at the first argument
57
+ # that looks like an option (starts with - or --). It then calls
58
+ # new, passing in the two halves of the arguments Array as the
59
+ # first two parameters.
60
+
61
+ command_options = config.delete(:command_options) # hook for start
62
+ parse_options = parse_options.merge(command_options) if command_options
63
+
64
+ if local_options.is_a?(Array)
65
+ array_options = local_options
66
+ hash_options = {}
67
+ else
68
+ # Handle the case where the class was explicitly instantiated
69
+ # with pre-parsed options.
70
+ array_options = []
71
+ hash_options = local_options
72
+ end
73
+
74
+ # Let Bundler::Thor::Options parse the options first, so it can remove
75
+ # declared options from the array. This will leave us with
76
+ # a list of arguments that weren't declared.
77
+ current_command = config[:current_command]
78
+ stop_on_unknown = self.class.stop_on_unknown_option? current_command
79
+
80
+ # Give a relation of options.
81
+ # After parsing, Bundler::Thor::Options check whether right relations are kept
82
+ relations = if current_command.nil?
83
+ {exclusive_option_names: [], at_least_one_option_names: []}
84
+ else
85
+ current_command.options_relation
86
+ end
87
+
88
+ self.class.class_exclusive_option_names.map { |n| relations[:exclusive_option_names] << n }
89
+ self.class.class_at_least_one_option_names.map { |n| relations[:at_least_one_option_names] << n }
90
+
91
+ disable_required_check = self.class.disable_required_check? current_command
92
+
93
+ opts = Bundler::Thor::Options.new(parse_options, hash_options, stop_on_unknown, disable_required_check, relations)
94
+
95
+ self.options = opts.parse(array_options)
96
+ self.options = config[:class_options].merge(options) if config[:class_options]
97
+
98
+ # If unknown options are disallowed, make sure that none of the
99
+ # remaining arguments looks like an option.
100
+ opts.check_unknown! if self.class.check_unknown_options?(config)
101
+
102
+ # Add the remaining arguments from the options parser to the
103
+ # arguments passed in to initialize. Then remove any positional
104
+ # arguments declared using #argument (this is primarily used
105
+ # by Bundler::Thor::Group). Tis will leave us with the remaining
106
+ # positional arguments.
107
+ to_parse = args
108
+ to_parse += opts.remaining unless self.class.strict_args_position?(config)
109
+
110
+ thor_args = Bundler::Thor::Arguments.new(self.class.arguments)
111
+ thor_args.parse(to_parse).each { |k, v| __send__("#{k}=", v) }
112
+ @args = thor_args.remaining
113
+ end
114
+
115
+ class << self
116
+ def included(base) #:nodoc:
117
+ super(base)
118
+ base.extend ClassMethods
119
+ base.send :include, Invocation
120
+ base.send :include, Shell
121
+ end
122
+
123
+ # Returns the classes that inherits from Bundler::Thor or Bundler::Thor::Group.
124
+ #
125
+ # ==== Returns
126
+ # Array[Class]
127
+ #
128
+ def subclasses
129
+ @subclasses ||= []
130
+ end
131
+
132
+ # Returns the files where the subclasses are kept.
133
+ #
134
+ # ==== Returns
135
+ # Hash[path<String> => Class]
136
+ #
137
+ def subclass_files
138
+ @subclass_files ||= Hash.new { |h, k| h[k] = [] }
139
+ end
140
+
141
+ # Whenever a class inherits from Bundler::Thor or Bundler::Thor::Group, we should track the
142
+ # class and the file on Bundler::Thor::Base. This is the method responsible for it.
143
+ #
144
+ def register_klass_file(klass) #:nodoc:
145
+ file = caller[1].match(/(.*):\d+/)[1]
146
+ Bundler::Thor::Base.subclasses << klass unless Bundler::Thor::Base.subclasses.include?(klass)
147
+
148
+ file_subclasses = Bundler::Thor::Base.subclass_files[File.expand_path(file)]
149
+ file_subclasses << klass unless file_subclasses.include?(klass)
150
+ end
151
+ end
152
+
153
+ module ClassMethods
154
+ def attr_reader(*) #:nodoc:
155
+ no_commands { super }
156
+ end
157
+
158
+ def attr_writer(*) #:nodoc:
159
+ no_commands { super }
160
+ end
161
+
162
+ def attr_accessor(*) #:nodoc:
163
+ no_commands { super }
164
+ end
165
+
166
+ # If you want to raise an error for unknown options, call check_unknown_options!
167
+ # This is disabled by default to allow dynamic invocations.
168
+ def check_unknown_options!
169
+ @check_unknown_options = true
170
+ end
171
+
172
+ def check_unknown_options #:nodoc:
173
+ @check_unknown_options ||= from_superclass(:check_unknown_options, false)
174
+ end
175
+
176
+ def check_unknown_options?(config) #:nodoc:
177
+ !!check_unknown_options
178
+ end
179
+
180
+ # If you want to raise an error when the default value of an option does not match
181
+ # the type call check_default_type!
182
+ # This will be the default; for compatibility a deprecation warning is issued if necessary.
183
+ def check_default_type!
184
+ @check_default_type = true
185
+ end
186
+
187
+ # If you want to use defaults that don't match the type of an option,
188
+ # either specify `check_default_type: false` or call `allow_incompatible_default_type!`
189
+ def allow_incompatible_default_type!
190
+ @check_default_type = false
191
+ end
192
+
193
+ def check_default_type #:nodoc:
194
+ @check_default_type = from_superclass(:check_default_type, nil) unless defined?(@check_default_type)
195
+ @check_default_type
196
+ end
197
+
198
+ # If true, option parsing is suspended as soon as an unknown option or a
199
+ # regular argument is encountered. All remaining arguments are passed to
200
+ # the command as regular arguments.
201
+ def stop_on_unknown_option?(command_name) #:nodoc:
202
+ false
203
+ end
204
+
205
+ # If true, option set will not suspend the execution of the command when
206
+ # a required option is not provided.
207
+ def disable_required_check?(command_name) #:nodoc:
208
+ false
209
+ end
210
+
211
+ # If you want only strict string args (useful when cascading thor classes),
212
+ # call strict_args_position! This is disabled by default to allow dynamic
213
+ # invocations.
214
+ def strict_args_position!
215
+ @strict_args_position = true
216
+ end
217
+
218
+ def strict_args_position #:nodoc:
219
+ @strict_args_position ||= from_superclass(:strict_args_position, false)
220
+ end
221
+
222
+ def strict_args_position?(config) #:nodoc:
223
+ !!strict_args_position
224
+ end
225
+
226
+ # Adds an argument to the class and creates an attr_accessor for it.
227
+ #
228
+ # Arguments are different from options in several aspects. The first one
229
+ # is how they are parsed from the command line, arguments are retrieved
230
+ # from position:
231
+ #
232
+ # thor command NAME
233
+ #
234
+ # Instead of:
235
+ #
236
+ # thor command --name=NAME
237
+ #
238
+ # Besides, arguments are used inside your code as an accessor (self.argument),
239
+ # while options are all kept in a hash (self.options).
240
+ #
241
+ # Finally, arguments cannot have type :default or :boolean but can be
242
+ # optional (supplying :optional => :true or :required => false), although
243
+ # you cannot have a required argument after a non-required argument. If you
244
+ # try it, an error is raised.
245
+ #
246
+ # ==== Parameters
247
+ # name<Symbol>:: The name of the argument.
248
+ # options<Hash>:: Described below.
249
+ #
250
+ # ==== Options
251
+ # :desc - Description for the argument.
252
+ # :required - If the argument is required or not.
253
+ # :optional - If the argument is optional or not.
254
+ # :type - The type of the argument, can be :string, :hash, :array, :numeric.
255
+ # :default - Default value for this argument. It cannot be required and have default values.
256
+ # :banner - String to show on usage notes.
257
+ #
258
+ # ==== Errors
259
+ # ArgumentError:: Raised if you supply a required argument after a non required one.
260
+ #
261
+ def argument(name, options = {})
262
+ is_thor_reserved_word?(name, :argument)
263
+ no_commands { attr_accessor name }
264
+
265
+ required = if options.key?(:optional)
266
+ !options[:optional]
267
+ elsif options.key?(:required)
268
+ options[:required]
269
+ else
270
+ options[:default].nil?
271
+ end
272
+
273
+ remove_argument name
274
+
275
+ if required
276
+ arguments.each do |argument|
277
+ next if argument.required?
278
+ raise ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " \
279
+ "the non-required argument #{argument.human_name.inspect}."
280
+ end
281
+ end
282
+
283
+ options[:required] = required
284
+
285
+ arguments << Bundler::Thor::Argument.new(name, options)
286
+ end
287
+
288
+ # Returns this class arguments, looking up in the ancestors chain.
289
+ #
290
+ # ==== Returns
291
+ # Array[Bundler::Thor::Argument]
292
+ #
293
+ def arguments
294
+ @arguments ||= from_superclass(:arguments, [])
295
+ end
296
+
297
+ # Adds a bunch of options to the set of class options.
298
+ #
299
+ # class_options :foo => false, :bar => :required, :baz => :string
300
+ #
301
+ # If you prefer more detailed declaration, check class_option.
302
+ #
303
+ # ==== Parameters
304
+ # Hash[Symbol => Object]
305
+ #
306
+ def class_options(options = nil)
307
+ @class_options ||= from_superclass(:class_options, {})
308
+ build_options(options, @class_options) if options
309
+ @class_options
310
+ end
311
+
312
+ # Adds an option to the set of class options
313
+ #
314
+ # ==== Parameters
315
+ # name<Symbol>:: The name of the argument.
316
+ # options<Hash>:: Described below.
317
+ #
318
+ # ==== Options
319
+ # :desc:: -- Description for the argument.
320
+ # :required:: -- If the argument is required or not.
321
+ # :default:: -- Default value for this argument.
322
+ # :group:: -- The group for this options. Use by class options to output options in different levels.
323
+ # :aliases:: -- Aliases for this option. <b>Note:</b> Bundler::Thor follows a convention of one-dash-one-letter options. Thus aliases like "-something" wouldn't be parsed; use either "\--something" or "-s" instead.
324
+ # :type:: -- The type of the argument, can be :string, :hash, :array, :numeric or :boolean.
325
+ # :banner:: -- String to show on usage notes.
326
+ # :hide:: -- If you want to hide this option from the help.
327
+ #
328
+ def class_option(name, options = {})
329
+ unless [ Symbol, String ].any? { |klass| name.is_a?(klass) }
330
+ raise ArgumentError, "Expected a Symbol or String, got #{name.inspect}"
331
+ end
332
+ build_option(name, options, class_options)
333
+ end
334
+
335
+ # Adds and declares option group for exclusive options in the
336
+ # block and arguments. You can declare options as the outside of the block.
337
+ #
338
+ # ==== Parameters
339
+ # Array[Bundler::Thor::Option.name]
340
+ #
341
+ # ==== Examples
342
+ #
343
+ # class_exclusive do
344
+ # class_option :one
345
+ # class_option :two
346
+ # end
347
+ #
348
+ # Or
349
+ #
350
+ # class_option :one
351
+ # class_option :two
352
+ # class_exclusive :one, :two
353
+ #
354
+ # If you give "--one" and "--two" at the same time ExclusiveArgumentsError
355
+ # will be raised.
356
+ #
357
+ def class_exclusive(*args, &block)
358
+ register_options_relation_for(:class_options,
359
+ :class_exclusive_option_names, *args, &block)
360
+ end
361
+
362
+ # Adds and declares option group for required at least one of options in the
363
+ # block and arguments. You can declare options as the outside of the block.
364
+ #
365
+ # ==== Examples
366
+ #
367
+ # class_at_least_one do
368
+ # class_option :one
369
+ # class_option :two
370
+ # end
371
+ #
372
+ # Or
373
+ #
374
+ # class_option :one
375
+ # class_option :two
376
+ # class_at_least_one :one, :two
377
+ #
378
+ # If you do not give "--one" and "--two" AtLeastOneRequiredArgumentError
379
+ # will be raised.
380
+ #
381
+ # You can use class_at_least_one and class_exclusive at the same time.
382
+ #
383
+ # class_exclusive do
384
+ # class_at_least_one do
385
+ # class_option :one
386
+ # class_option :two
387
+ # end
388
+ # end
389
+ #
390
+ # Then it is required either only one of "--one" or "--two".
391
+ #
392
+ def class_at_least_one(*args, &block)
393
+ register_options_relation_for(:class_options,
394
+ :class_at_least_one_option_names, *args, &block)
395
+ end
396
+
397
+ # Returns this class exclusive options array set, looking up in the ancestors chain.
398
+ #
399
+ # ==== Returns
400
+ # Array[Array[Bundler::Thor::Option.name]]
401
+ #
402
+ def class_exclusive_option_names
403
+ @class_exclusive_option_names ||= from_superclass(:class_exclusive_option_names, [])
404
+ end
405
+
406
+ # Returns this class at least one of required options array set, looking up in the ancestors chain.
407
+ #
408
+ # ==== Returns
409
+ # Array[Array[Bundler::Thor::Option.name]]
410
+ #
411
+ def class_at_least_one_option_names
412
+ @class_at_least_one_option_names ||= from_superclass(:class_at_least_one_option_names, [])
413
+ end
414
+
415
+ # Removes a previous defined argument. If :undefine is given, undefine
416
+ # accessors as well.
417
+ #
418
+ # ==== Parameters
419
+ # names<Array>:: Arguments to be removed
420
+ #
421
+ # ==== Examples
422
+ #
423
+ # remove_argument :foo
424
+ # remove_argument :foo, :bar, :baz, :undefine => true
425
+ #
426
+ def remove_argument(*names)
427
+ options = names.last.is_a?(Hash) ? names.pop : {}
428
+
429
+ names.each do |name|
430
+ arguments.delete_if { |a| a.name == name.to_s }
431
+ undef_method name, "#{name}=" if options[:undefine]
432
+ end
433
+ end
434
+
435
+ # Removes a previous defined class option.
436
+ #
437
+ # ==== Parameters
438
+ # names<Array>:: Class options to be removed
439
+ #
440
+ # ==== Examples
441
+ #
442
+ # remove_class_option :foo
443
+ # remove_class_option :foo, :bar, :baz
444
+ #
445
+ def remove_class_option(*names)
446
+ names.each do |name|
447
+ class_options.delete(name)
448
+ end
449
+ end
450
+
451
+ # Defines the group. This is used when thor list is invoked so you can specify
452
+ # that only commands from a pre-defined group will be shown. Defaults to standard.
453
+ #
454
+ # ==== Parameters
455
+ # name<String|Symbol>
456
+ #
457
+ def group(name = nil)
458
+ if name
459
+ @group = name.to_s
460
+ else
461
+ @group ||= from_superclass(:group, "standard")
462
+ end
463
+ end
464
+
465
+ # Returns the commands for this Bundler::Thor class.
466
+ #
467
+ # ==== Returns
468
+ # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
469
+ # objects as values.
470
+ #
471
+ def commands
472
+ @commands ||= Hash.new
473
+ end
474
+ alias_method :tasks, :commands
475
+
476
+ # Returns the commands for this Bundler::Thor class and all subclasses.
477
+ #
478
+ # ==== Returns
479
+ # Hash:: An ordered hash with commands names as keys and Bundler::Thor::Command
480
+ # objects as values.
481
+ #
482
+ def all_commands
483
+ @all_commands ||= from_superclass(:all_commands, Hash.new)
484
+ @all_commands.merge!(commands)
485
+ end
486
+ alias_method :all_tasks, :all_commands
487
+
488
+ # Removes a given command from this Bundler::Thor class. This is usually done if you
489
+ # are inheriting from another class and don't want it to be available
490
+ # anymore.
491
+ #
492
+ # By default it only remove the mapping to the command. But you can supply
493
+ # :undefine => true to undefine the method from the class as well.
494
+ #
495
+ # ==== Parameters
496
+ # name<Symbol|String>:: The name of the command to be removed
497
+ # options<Hash>:: You can give :undefine => true if you want commands the method
498
+ # to be undefined from the class as well.
499
+ #
500
+ def remove_command(*names)
501
+ options = names.last.is_a?(Hash) ? names.pop : {}
502
+
503
+ names.each do |name|
504
+ commands.delete(name.to_s)
505
+ all_commands.delete(name.to_s)
506
+ undef_method name if options[:undefine]
507
+ end
508
+ end
509
+ alias_method :remove_task, :remove_command
510
+
511
+ # All methods defined inside the given block are not added as commands.
512
+ #
513
+ # So you can do:
514
+ #
515
+ # class MyScript < Bundler::Thor
516
+ # no_commands do
517
+ # def this_is_not_a_command
518
+ # end
519
+ # end
520
+ # end
521
+ #
522
+ # You can also add the method and remove it from the command list:
523
+ #
524
+ # class MyScript < Bundler::Thor
525
+ # def this_is_not_a_command
526
+ # end
527
+ # remove_command :this_is_not_a_command
528
+ # end
529
+ #
530
+ def no_commands(&block)
531
+ no_commands_context.enter(&block)
532
+ end
533
+
534
+ alias_method :no_tasks, :no_commands
535
+
536
+ def no_commands_context
537
+ @no_commands_context ||= NestedContext.new
538
+ end
539
+
540
+ def no_commands?
541
+ no_commands_context.entered?
542
+ end
543
+
544
+ # Sets the namespace for the Bundler::Thor or Bundler::Thor::Group class. By default the
545
+ # namespace is retrieved from the class name. If your Bundler::Thor class is named
546
+ # Scripts::MyScript, the help method, for example, will be called as:
547
+ #
548
+ # thor scripts:my_script -h
549
+ #
550
+ # If you change the namespace:
551
+ #
552
+ # namespace :my_scripts
553
+ #
554
+ # You change how your commands are invoked:
555
+ #
556
+ # thor my_scripts -h
557
+ #
558
+ # Finally, if you change your namespace to default:
559
+ #
560
+ # namespace :default
561
+ #
562
+ # Your commands can be invoked with a shortcut. Instead of:
563
+ #
564
+ # thor :my_command
565
+ #
566
+ def namespace(name = nil)
567
+ if name
568
+ @namespace = name.to_s
569
+ else
570
+ @namespace ||= Bundler::Thor::Util.namespace_from_thor_class(self)
571
+ end
572
+ end
573
+
574
+ # Parses the command and options from the given args, instantiate the class
575
+ # and invoke the command. This method is used when the arguments must be parsed
576
+ # from an array. If you are inside Ruby and want to use a Bundler::Thor class, you
577
+ # can simply initialize it:
578
+ #
579
+ # script = MyScript.new(args, options, config)
580
+ # script.invoke(:command, first_arg, second_arg, third_arg)
581
+ #
582
+ def start(given_args = ARGV, config = {})
583
+ config[:shell] ||= Bundler::Thor::Base.shell.new
584
+ dispatch(nil, given_args.dup, nil, config)
585
+ rescue Bundler::Thor::Error => e
586
+ config[:debug] || ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
587
+ exit(false) if exit_on_failure?
588
+ rescue Errno::EPIPE
589
+ # This happens if a thor command is piped to something like `head`,
590
+ # which closes the pipe when it's done reading. This will also
591
+ # mean that if the pipe is closed, further unnecessary
592
+ # computation will not occur.
593
+ exit(true)
594
+ end
595
+
596
+ # Allows to use private methods from parent in child classes as commands.
597
+ #
598
+ # ==== Parameters
599
+ # names<Array>:: Method names to be used as commands
600
+ #
601
+ # ==== Examples
602
+ #
603
+ # public_command :foo
604
+ # public_command :foo, :bar, :baz
605
+ #
606
+ def public_command(*names)
607
+ names.each do |name|
608
+ class_eval "def #{name}(*); super end", __FILE__, __LINE__
609
+ end
610
+ end
611
+ alias_method :public_task, :public_command
612
+
613
+ def handle_no_command_error(command, has_namespace = $thor_runner) #:nodoc:
614
+ raise UndefinedCommandError.new(command, all_commands.keys, (namespace if has_namespace))
615
+ end
616
+ alias_method :handle_no_task_error, :handle_no_command_error
617
+
618
+ def handle_argument_error(command, error, args, arity) #:nodoc:
619
+ name = [command.ancestor_name, command.name].compact.join(" ")
620
+ msg = "ERROR: \"#{basename} #{name}\" was called with ".dup
621
+ msg << "no arguments" if args.empty?
622
+ msg << "arguments " << args.inspect unless args.empty?
623
+ msg << "\nUsage: \"#{banner(command).split("\n").join("\"\n \"")}\""
624
+ raise InvocationError, msg
625
+ end
626
+
627
+ # A flag that makes the process exit with status 1 if any error happens.
628
+ def exit_on_failure?
629
+ Bundler::Thor.deprecation_warning "Bundler::Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `#{self.name}`"
630
+ false
631
+ end
632
+
633
+ protected
634
+
635
+ # Prints the class options per group. If an option does not belong to
636
+ # any group, it's printed as Class option.
637
+ #
638
+ def class_options_help(shell, groups = {}) #:nodoc:
639
+ # Group options by group
640
+ class_options.each do |_, value|
641
+ groups[value.group] ||= []
642
+ groups[value.group] << value
643
+ end
644
+
645
+ # Deal with default group
646
+ global_options = groups.delete(nil) || []
647
+ print_options(shell, global_options)
648
+
649
+ # Print all others
650
+ groups.each do |group_name, options|
651
+ print_options(shell, options, group_name)
652
+ end
653
+ end
654
+
655
+ # Receives a set of options and print them.
656
+ def print_options(shell, options, group_name = nil)
657
+ return if options.empty?
658
+
659
+ list = []
660
+ padding = options.map { |o| o.aliases_for_usage.size }.max.to_i
661
+ options.each do |option|
662
+ next if option.hide
663
+ item = [option.usage(padding)]
664
+ item.push(option.description ? "# #{option.description}" : "")
665
+
666
+ list << item
667
+ list << ["", "# Default: #{option.print_default}"] if option.show_default?
668
+ list << ["", "# Possible values: #{option.enum_to_s}"] if option.enum
669
+ end
670
+
671
+ shell.say(group_name ? "#{group_name} options:" : "Options:")
672
+ shell.print_table(list, indent: 2)
673
+ shell.say ""
674
+ end
675
+
676
+ # Raises an error if the word given is a Bundler::Thor reserved word.
677
+ def is_thor_reserved_word?(word, type) #:nodoc:
678
+ return false unless THOR_RESERVED_WORDS.include?(word.to_s)
679
+ raise "#{word.inspect} is a Bundler::Thor reserved word and cannot be defined as #{type}"
680
+ end
681
+
682
+ # Build an option and adds it to the given scope.
683
+ #
684
+ # ==== Parameters
685
+ # name<Symbol>:: The name of the argument.
686
+ # options<Hash>:: Described in both class_option and method_option.
687
+ # scope<Hash>:: Options hash that is being built up
688
+ def build_option(name, options, scope) #:nodoc:
689
+ scope[name] = Bundler::Thor::Option.new(name, {check_default_type: check_default_type}.merge!(options))
690
+ end
691
+
692
+ # Receives a hash of options, parse them and add to the scope. This is a
693
+ # fast way to set a bunch of options:
694
+ #
695
+ # build_options :foo => true, :bar => :required, :baz => :string
696
+ #
697
+ # ==== Parameters
698
+ # Hash[Symbol => Object]
699
+ def build_options(options, scope) #:nodoc:
700
+ options.each do |key, value|
701
+ scope[key] = Bundler::Thor::Option.parse(key, value)
702
+ end
703
+ end
704
+
705
+ # Finds a command with the given name. If the command belongs to the current
706
+ # class, just return it, otherwise dup it and add the fresh copy to the
707
+ # current command hash.
708
+ def find_and_refresh_command(name) #:nodoc:
709
+ if commands[name.to_s]
710
+ commands[name.to_s]
711
+ elsif command = all_commands[name.to_s] # rubocop:disable Lint/AssignmentInCondition
712
+ commands[name.to_s] = command.clone
713
+ else
714
+ raise ArgumentError, "You supplied :for => #{name.inspect}, but the command #{name.inspect} could not be found."
715
+ end
716
+ end
717
+ alias_method :find_and_refresh_task, :find_and_refresh_command
718
+
719
+ # Every time someone inherits from a Bundler::Thor class, register the klass
720
+ # and file into baseclass.
721
+ def inherited(klass)
722
+ super(klass)
723
+ Bundler::Thor::Base.register_klass_file(klass)
724
+ klass.instance_variable_set(:@no_commands, 0)
725
+ end
726
+
727
+ # Fire this callback whenever a method is added. Added methods are
728
+ # tracked as commands by invoking the create_command method.
729
+ def method_added(meth)
730
+ super(meth)
731
+ meth = meth.to_s
732
+
733
+ if meth == "initialize"
734
+ initialize_added
735
+ return
736
+ end
737
+
738
+ # Return if it's not a public instance method
739
+ return unless public_method_defined?(meth.to_sym)
740
+
741
+ return if no_commands? || !create_command(meth)
742
+
743
+ is_thor_reserved_word?(meth, :command)
744
+ Bundler::Thor::Base.register_klass_file(self)
745
+ end
746
+
747
+ # Retrieves a value from superclass. If it reaches the baseclass,
748
+ # returns default.
749
+ def from_superclass(method, default = nil)
750
+ if self == baseclass || !superclass.respond_to?(method, true)
751
+ default
752
+ else
753
+ value = superclass.send(method)
754
+
755
+ # Ruby implements `dup` on Object, but raises a `TypeError`
756
+ # if the method is called on immediates. As a result, we
757
+ # don't have a good way to check whether dup will succeed
758
+ # without calling it and rescuing the TypeError.
759
+ begin
760
+ value.dup
761
+ rescue TypeError
762
+ value
763
+ end
764
+
765
+ end
766
+ end
767
+
768
+ #
769
+ # The basename of the program invoking the thor class.
770
+ #
771
+ def basename
772
+ File.basename($PROGRAM_NAME).split(" ").first
773
+ end
774
+
775
+ # SIGNATURE: Sets the baseclass. This is where the superclass lookup
776
+ # finishes.
777
+ def baseclass #:nodoc:
778
+ end
779
+
780
+ # SIGNATURE: Creates a new command if valid_command? is true. This method is
781
+ # called when a new method is added to the class.
782
+ def create_command(meth) #:nodoc:
783
+ end
784
+ alias_method :create_task, :create_command
785
+
786
+ # SIGNATURE: Defines behavior when the initialize method is added to the
787
+ # class.
788
+ def initialize_added #:nodoc:
789
+ end
790
+
791
+ # SIGNATURE: The hook invoked by start.
792
+ def dispatch(command, given_args, given_opts, config) #:nodoc:
793
+ raise NotImplementedError
794
+ end
795
+
796
+ # Register a relation of options for target(method_option/class_option)
797
+ # by args and block.
798
+ def register_options_relation_for(target, relation, *args, &block) # :nodoc:
799
+ opt = args.pop if args.last.is_a? Hash
800
+ opt ||= {}
801
+ names = args.map{ |arg| arg.to_s }
802
+ names += built_option_names(target, opt, &block) if block_given?
803
+ command_scope_member(relation, opt) << names
804
+ end
805
+
806
+ # Get target(method_options or class_options) options
807
+ # of before and after by block evaluation.
808
+ def built_option_names(target, opt = {}, &block) # :nodoc:
809
+ before = command_scope_member(target, opt).map{ |k,v| v.name }
810
+ instance_eval(&block)
811
+ after = command_scope_member(target, opt).map{ |k,v| v.name }
812
+ after - before
813
+ end
814
+
815
+ # Get command scope member by name.
816
+ def command_scope_member(name, options = {}) # :nodoc:
817
+ if options[:for]
818
+ find_and_refresh_command(options[:for]).send(name)
819
+ else
820
+ send(name)
821
+ end
822
+ end
823
+ end
824
+ end
825
+ end