bundler_pack 4.0.15

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 (350) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5670 -0
  3. data/LICENSE.md +22 -0
  4. data/README.md +58 -0
  5. data/bundler.gemspec +46 -0
  6. data/exe/bundle +29 -0
  7. data/exe/bundler +4 -0
  8. data/lib/bundler/.document +1 -0
  9. data/lib/bundler/build_metadata.rb +44 -0
  10. data/lib/bundler/capistrano.rb +4 -0
  11. data/lib/bundler/checksum.rb +270 -0
  12. data/lib/bundler/ci_detector.rb +75 -0
  13. data/lib/bundler/cli/add.rb +62 -0
  14. data/lib/bundler/cli/binstubs.rb +57 -0
  15. data/lib/bundler/cli/cache.rb +32 -0
  16. data/lib/bundler/cli/check.rb +40 -0
  17. data/lib/bundler/cli/clean.rb +25 -0
  18. data/lib/bundler/cli/common.rb +161 -0
  19. data/lib/bundler/cli/config.rb +208 -0
  20. data/lib/bundler/cli/console.rb +47 -0
  21. data/lib/bundler/cli/doctor/diagnose.rb +167 -0
  22. data/lib/bundler/cli/doctor/ssl.rb +249 -0
  23. data/lib/bundler/cli/doctor.rb +33 -0
  24. data/lib/bundler/cli/exec.rb +114 -0
  25. data/lib/bundler/cli/fund.rb +36 -0
  26. data/lib/bundler/cli/gem.rb +493 -0
  27. data/lib/bundler/cli/info.rb +83 -0
  28. data/lib/bundler/cli/init.rb +51 -0
  29. data/lib/bundler/cli/install.rb +127 -0
  30. data/lib/bundler/cli/issue.rb +41 -0
  31. data/lib/bundler/cli/list.rb +97 -0
  32. data/lib/bundler/cli/lock.rb +94 -0
  33. data/lib/bundler/cli/open.rb +29 -0
  34. data/lib/bundler/cli/outdated.rb +337 -0
  35. data/lib/bundler/cli/platform.rb +48 -0
  36. data/lib/bundler/cli/plugin.rb +39 -0
  37. data/lib/bundler/cli/pristine.rb +64 -0
  38. data/lib/bundler/cli/remove.rb +17 -0
  39. data/lib/bundler/cli/show.rb +71 -0
  40. data/lib/bundler/cli/update.rb +125 -0
  41. data/lib/bundler/cli.rb +829 -0
  42. data/lib/bundler/compact_index_client/cache.rb +96 -0
  43. data/lib/bundler/compact_index_client/cache_file.rb +148 -0
  44. data/lib/bundler/compact_index_client/parser.rb +87 -0
  45. data/lib/bundler/compact_index_client/updater.rb +105 -0
  46. data/lib/bundler/compact_index_client.rb +92 -0
  47. data/lib/bundler/constants.rb +14 -0
  48. data/lib/bundler/current_ruby.rb +94 -0
  49. data/lib/bundler/definition.rb +1304 -0
  50. data/lib/bundler/dependency.rb +151 -0
  51. data/lib/bundler/deployment.rb +6 -0
  52. data/lib/bundler/deprecate.rb +44 -0
  53. data/lib/bundler/digest.rb +71 -0
  54. data/lib/bundler/dsl.rb +642 -0
  55. data/lib/bundler/endpoint_specification.rb +184 -0
  56. data/lib/bundler/env.rb +148 -0
  57. data/lib/bundler/environment_preserver.rb +69 -0
  58. data/lib/bundler/errors.rb +277 -0
  59. data/lib/bundler/feature_flag.rb +20 -0
  60. data/lib/bundler/fetcher/base.rb +55 -0
  61. data/lib/bundler/fetcher/compact_index.rb +133 -0
  62. data/lib/bundler/fetcher/dependency.rb +85 -0
  63. data/lib/bundler/fetcher/downloader.rb +116 -0
  64. data/lib/bundler/fetcher/gem_remote_fetcher.rb +24 -0
  65. data/lib/bundler/fetcher/index.rb +25 -0
  66. data/lib/bundler/fetcher.rb +365 -0
  67. data/lib/bundler/force_platform.rb +16 -0
  68. data/lib/bundler/friendly_errors.rb +127 -0
  69. data/lib/bundler/gem_helper.rb +237 -0
  70. data/lib/bundler/gem_tasks.rb +7 -0
  71. data/lib/bundler/gem_version_promoter.rb +147 -0
  72. data/lib/bundler/index.rb +203 -0
  73. data/lib/bundler/injector.rb +284 -0
  74. data/lib/bundler/inline.rb +106 -0
  75. data/lib/bundler/installer/gem_installer.rb +88 -0
  76. data/lib/bundler/installer/parallel_installer.rb +280 -0
  77. data/lib/bundler/installer/standalone.rb +113 -0
  78. data/lib/bundler/installer.rb +241 -0
  79. data/lib/bundler/lazy_specification.rb +270 -0
  80. data/lib/bundler/lockfile_generator.rb +119 -0
  81. data/lib/bundler/lockfile_parser.rb +328 -0
  82. data/lib/bundler/man/.document +1 -0
  83. data/lib/bundler/man/bundle-add.1 +79 -0
  84. data/lib/bundler/man/bundle-add.1.ronn +92 -0
  85. data/lib/bundler/man/bundle-binstubs.1 +30 -0
  86. data/lib/bundler/man/bundle-binstubs.1.ronn +42 -0
  87. data/lib/bundler/man/bundle-cache.1 +56 -0
  88. data/lib/bundler/man/bundle-cache.1.ronn +95 -0
  89. data/lib/bundler/man/bundle-check.1 +21 -0
  90. data/lib/bundler/man/bundle-check.1.ronn +26 -0
  91. data/lib/bundler/man/bundle-clean.1 +17 -0
  92. data/lib/bundler/man/bundle-clean.1.ronn +18 -0
  93. data/lib/bundler/man/bundle-config.1 +339 -0
  94. data/lib/bundler/man/bundle-config.1.ronn +455 -0
  95. data/lib/bundler/man/bundle-console.1 +33 -0
  96. data/lib/bundler/man/bundle-console.1.ronn +39 -0
  97. data/lib/bundler/man/bundle-doctor.1 +69 -0
  98. data/lib/bundler/man/bundle-doctor.1.ronn +77 -0
  99. data/lib/bundler/man/bundle-env.1 +9 -0
  100. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  101. data/lib/bundler/man/bundle-exec.1 +104 -0
  102. data/lib/bundler/man/bundle-exec.1.ronn +150 -0
  103. data/lib/bundler/man/bundle-fund.1 +22 -0
  104. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  105. data/lib/bundler/man/bundle-gem.1 +107 -0
  106. data/lib/bundler/man/bundle-gem.1.ronn +150 -0
  107. data/lib/bundler/man/bundle-help.1 +9 -0
  108. data/lib/bundler/man/bundle-help.1.ronn +12 -0
  109. data/lib/bundler/man/bundle-info.1 +17 -0
  110. data/lib/bundler/man/bundle-info.1.ronn +21 -0
  111. data/lib/bundler/man/bundle-init.1 +20 -0
  112. data/lib/bundler/man/bundle-init.1.ronn +32 -0
  113. data/lib/bundler/man/bundle-install.1 +178 -0
  114. data/lib/bundler/man/bundle-install.1.ronn +314 -0
  115. data/lib/bundler/man/bundle-issue.1 +45 -0
  116. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  117. data/lib/bundler/man/bundle-licenses.1 +9 -0
  118. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  119. data/lib/bundler/man/bundle-list.1 +40 -0
  120. data/lib/bundler/man/bundle-list.1.ronn +41 -0
  121. data/lib/bundler/man/bundle-lock.1 +75 -0
  122. data/lib/bundler/man/bundle-lock.1.ronn +115 -0
  123. data/lib/bundler/man/bundle-open.1 +32 -0
  124. data/lib/bundler/man/bundle-open.1.ronn +28 -0
  125. data/lib/bundler/man/bundle-outdated.1 +106 -0
  126. data/lib/bundler/man/bundle-outdated.1.ronn +117 -0
  127. data/lib/bundler/man/bundle-platform.1 +49 -0
  128. data/lib/bundler/man/bundle-platform.1.ronn +49 -0
  129. data/lib/bundler/man/bundle-plugin.1 +76 -0
  130. data/lib/bundler/man/bundle-plugin.1.ronn +84 -0
  131. data/lib/bundler/man/bundle-pristine.1 +23 -0
  132. data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
  133. data/lib/bundler/man/bundle-remove.1 +15 -0
  134. data/lib/bundler/man/bundle-remove.1.ronn +16 -0
  135. data/lib/bundler/man/bundle-show.1 +16 -0
  136. data/lib/bundler/man/bundle-show.1.ronn +21 -0
  137. data/lib/bundler/man/bundle-update.1 +284 -0
  138. data/lib/bundler/man/bundle-update.1.ronn +367 -0
  139. data/lib/bundler/man/bundle-version.1 +22 -0
  140. data/lib/bundler/man/bundle-version.1.ronn +24 -0
  141. data/lib/bundler/man/bundle.1 +93 -0
  142. data/lib/bundler/man/bundle.1.ronn +107 -0
  143. data/lib/bundler/man/gemfile.5 +503 -0
  144. data/lib/bundler/man/gemfile.5.ronn +586 -0
  145. data/lib/bundler/man/index.txt +31 -0
  146. data/lib/bundler/match_metadata.rb +30 -0
  147. data/lib/bundler/match_platform.rb +42 -0
  148. data/lib/bundler/match_remote_metadata.rb +29 -0
  149. data/lib/bundler/materialization.rb +59 -0
  150. data/lib/bundler/mirror.rb +221 -0
  151. data/lib/bundler/plugin/api/source.rb +330 -0
  152. data/lib/bundler/plugin/api.rb +81 -0
  153. data/lib/bundler/plugin/dsl.rb +53 -0
  154. data/lib/bundler/plugin/events.rb +85 -0
  155. data/lib/bundler/plugin/index.rb +203 -0
  156. data/lib/bundler/plugin/installer/git.rb +34 -0
  157. data/lib/bundler/plugin/installer/path.rb +26 -0
  158. data/lib/bundler/plugin/installer/rubygems.rb +19 -0
  159. data/lib/bundler/plugin/installer.rb +123 -0
  160. data/lib/bundler/plugin/source_list.rb +31 -0
  161. data/lib/bundler/plugin/unloaded_source.rb +25 -0
  162. data/lib/bundler/plugin.rb +387 -0
  163. data/lib/bundler/process_lock.rb +20 -0
  164. data/lib/bundler/remote_specification.rb +126 -0
  165. data/lib/bundler/resolver/base.rb +127 -0
  166. data/lib/bundler/resolver/candidate.rb +85 -0
  167. data/lib/bundler/resolver/incompatibility.rb +15 -0
  168. data/lib/bundler/resolver/package.rb +95 -0
  169. data/lib/bundler/resolver/root.rb +25 -0
  170. data/lib/bundler/resolver/spec_group.rb +74 -0
  171. data/lib/bundler/resolver/strategy.rb +43 -0
  172. data/lib/bundler/resolver.rb +603 -0
  173. data/lib/bundler/retry.rb +92 -0
  174. data/lib/bundler/ruby_dsl.rb +67 -0
  175. data/lib/bundler/ruby_version.rb +135 -0
  176. data/lib/bundler/rubygems_ext.rb +503 -0
  177. data/lib/bundler/rubygems_gem_installer.rb +206 -0
  178. data/lib/bundler/rubygems_integration.rb +456 -0
  179. data/lib/bundler/runtime.rb +331 -0
  180. data/lib/bundler/safe_marshal.rb +31 -0
  181. data/lib/bundler/self_manager.rb +197 -0
  182. data/lib/bundler/settings/validator.rb +86 -0
  183. data/lib/bundler/settings.rb +585 -0
  184. data/lib/bundler/setup.rb +39 -0
  185. data/lib/bundler/shared_helpers.rb +392 -0
  186. data/lib/bundler/source/gemspec.rb +19 -0
  187. data/lib/bundler/source/git/git_proxy.rb +509 -0
  188. data/lib/bundler/source/git.rb +451 -0
  189. data/lib/bundler/source/metadata.rb +67 -0
  190. data/lib/bundler/source/path/installer.rb +53 -0
  191. data/lib/bundler/source/path.rb +256 -0
  192. data/lib/bundler/source/rubygems/remote.rb +86 -0
  193. data/lib/bundler/source/rubygems.rb +606 -0
  194. data/lib/bundler/source/rubygems_aggregate.rb +71 -0
  195. data/lib/bundler/source.rb +120 -0
  196. data/lib/bundler/source_list.rb +240 -0
  197. data/lib/bundler/source_map.rb +72 -0
  198. data/lib/bundler/spec_set.rb +390 -0
  199. data/lib/bundler/stub_specification.rb +147 -0
  200. data/lib/bundler/templates/.document +1 -0
  201. data/lib/bundler/templates/Executable +16 -0
  202. data/lib/bundler/templates/Executable.standalone +14 -0
  203. data/lib/bundler/templates/Gemfile +5 -0
  204. data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
  205. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +10 -0
  206. data/lib/bundler/templates/newgem/Cargo.toml.tt +13 -0
  207. data/lib/bundler/templates/newgem/Gemfile.tt +24 -0
  208. data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
  209. data/lib/bundler/templates/newgem/README.md.tt +49 -0
  210. data/lib/bundler/templates/newgem/Rakefile.tt +72 -0
  211. data/lib/bundler/templates/newgem/bin/console.tt +11 -0
  212. data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
  213. data/lib/bundler/templates/newgem/circleci/config.yml.tt +37 -0
  214. data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
  215. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +22 -0
  216. data/lib/bundler/templates/newgem/ext/newgem/build.rs.tt +5 -0
  217. data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
  218. data/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
  219. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  220. data/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
  221. data/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
  222. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
  223. data/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
  224. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
  225. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +23 -0
  226. data/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt +69 -0
  227. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +48 -0
  228. data/lib/bundler/templates/newgem/gitignore.tt +23 -0
  229. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +27 -0
  230. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
  231. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
  232. data/lib/bundler/templates/newgem/newgem.gemspec.tt +58 -0
  233. data/lib/bundler/templates/newgem/rspec.tt +3 -0
  234. data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
  235. data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
  236. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +19 -0
  237. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
  238. data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
  239. data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
  240. data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +19 -0
  241. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  242. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  243. data/lib/bundler/ui/rg_proxy.rb +19 -0
  244. data/lib/bundler/ui/shell.rb +191 -0
  245. data/lib/bundler/ui/silent.rb +96 -0
  246. data/lib/bundler/ui.rb +9 -0
  247. data/lib/bundler/uri_credentials_filter.rb +43 -0
  248. data/lib/bundler/uri_normalizer.rb +23 -0
  249. data/lib/bundler/vendor/.document +1 -0
  250. data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
  251. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +227 -0
  252. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  253. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
  254. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +230 -0
  255. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  256. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2701 -0
  257. data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
  258. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
  259. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
  260. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +80 -0
  261. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1153 -0
  262. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  263. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  264. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +169 -0
  265. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  266. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
  267. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  268. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  269. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  270. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  271. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
  272. data/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  273. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  274. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  275. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
  276. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +423 -0
  277. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +236 -0
  278. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  279. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  280. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  281. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  282. data/lib/bundler/vendor/thor/LICENSE.md +20 -0
  283. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
  284. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
  285. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
  286. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
  287. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +407 -0
  288. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
  289. data/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
  290. data/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
  291. data/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
  292. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
  293. data/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
  294. data/lib/bundler/vendor/thor/lib/thor/group.rb +292 -0
  295. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
  296. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
  297. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
  298. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
  299. data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
  300. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +86 -0
  301. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
  302. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
  303. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +294 -0
  304. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
  305. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
  306. data/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
  307. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +384 -0
  308. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
  309. data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
  310. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
  311. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
  312. data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
  313. data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
  314. data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
  315. data/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
  316. data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
  317. data/lib/bundler/vendor/thor/lib/thor.rb +674 -0
  318. data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
  319. data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
  320. data/lib/bundler/vendor/uri/COPYING +56 -0
  321. data/lib/bundler/vendor/uri/lib/uri/common.rb +922 -0
  322. data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
  323. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
  324. data/lib/bundler/vendor/uri/lib/uri/generic.rb +1592 -0
  325. data/lib/bundler/vendor/uri/lib/uri/http.rb +137 -0
  326. data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
  327. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
  328. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
  329. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
  330. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +547 -0
  331. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  332. data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
  333. data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
  334. data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
  335. data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
  336. data/lib/bundler/vendored_fileutils.rb +4 -0
  337. data/lib/bundler/vendored_net_http.rb +23 -0
  338. data/lib/bundler/vendored_persistent.rb +11 -0
  339. data/lib/bundler/vendored_pub_grub.rb +4 -0
  340. data/lib/bundler/vendored_securerandom.rb +12 -0
  341. data/lib/bundler/vendored_thor.rb +8 -0
  342. data/lib/bundler/vendored_timeout.rb +12 -0
  343. data/lib/bundler/vendored_tsort.rb +4 -0
  344. data/lib/bundler/vendored_uri.rb +21 -0
  345. data/lib/bundler/version.rb +21 -0
  346. data/lib/bundler/vlad.rb +4 -0
  347. data/lib/bundler/worker.rb +125 -0
  348. data/lib/bundler/yaml_serializer.rb +98 -0
  349. data/lib/bundler.rb +691 -0
  350. metadata +409 -0
@@ -0,0 +1,184 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ # used for Creating Specifications from the Gemcutter Endpoint
5
+ class EndpointSpecification < Gem::Specification
6
+ include MatchRemoteMetadata
7
+
8
+ attr_reader :name, :version, :platform, :checksum, :created_at
9
+ attr_writer :dependencies
10
+ attr_accessor :remote, :locked_platform
11
+
12
+ def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
13
+ super()
14
+ @name = name
15
+ @version = Gem::Version.create version
16
+ @platform = Gem::Platform.new(platform)
17
+ @spec_fetcher = spec_fetcher
18
+ @dependencies = nil
19
+ @unbuilt_dependencies = dependencies
20
+
21
+ @loaded_from = nil
22
+ @remote_specification = nil
23
+ @locked_platform = nil
24
+
25
+ parse_metadata(metadata)
26
+ end
27
+
28
+ def insecurely_materialized?
29
+ @locked_platform.to_s != @platform.to_s
30
+ end
31
+
32
+ def fetch_platform
33
+ @platform
34
+ end
35
+
36
+ def dependencies
37
+ @dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
38
+ end
39
+ alias_method :runtime_dependencies, :dependencies
40
+
41
+ # needed for standalone, load required_paths from local gemspec
42
+ # after the gem is installed
43
+ def require_paths
44
+ if @remote_specification
45
+ @remote_specification.require_paths
46
+ elsif _local_specification
47
+ _local_specification.require_paths
48
+ else
49
+ super
50
+ end
51
+ end
52
+
53
+ # needed for inline
54
+ def load_paths
55
+ # remote specs aren't installed, and can't have load_paths
56
+ if _local_specification
57
+ _local_specification.load_paths
58
+ else
59
+ super
60
+ end
61
+ end
62
+
63
+ # needed for binstubs
64
+ def executables
65
+ if @remote_specification
66
+ @remote_specification.executables
67
+ elsif _local_specification
68
+ _local_specification.executables
69
+ else
70
+ super
71
+ end
72
+ end
73
+
74
+ # needed for bundle clean
75
+ def bindir
76
+ if @remote_specification
77
+ @remote_specification.bindir
78
+ elsif _local_specification
79
+ _local_specification.bindir
80
+ else
81
+ super
82
+ end
83
+ end
84
+
85
+ # needed for post_install_messages during install
86
+ def post_install_message
87
+ if @remote_specification
88
+ @remote_specification.post_install_message
89
+ elsif _local_specification
90
+ _local_specification.post_install_message
91
+ else
92
+ super
93
+ end
94
+ end
95
+
96
+ # needed for "with native extensions" during install
97
+ def extensions
98
+ if @remote_specification
99
+ @remote_specification.extensions
100
+ elsif _local_specification
101
+ _local_specification.extensions
102
+ else
103
+ super
104
+ end
105
+ end
106
+
107
+ # needed for `bundle fund`
108
+ def metadata
109
+ if @remote_specification
110
+ @remote_specification.metadata
111
+ elsif _local_specification
112
+ _local_specification.metadata
113
+ else
114
+ super
115
+ end
116
+ end
117
+
118
+ def _local_specification
119
+ return unless @loaded_from && File.exist?(local_specification_path)
120
+ eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
121
+ spec.loaded_from = @loaded_from
122
+ end
123
+ end
124
+
125
+ def __swap__(spec)
126
+ SharedHelpers.ensure_same_dependencies(self, dependencies, spec.dependencies)
127
+ @remote_specification = spec
128
+ end
129
+
130
+ def inspect
131
+ "#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
132
+ end
133
+
134
+ private
135
+
136
+ def _remote_specification
137
+ @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
138
+ end
139
+
140
+ def local_specification_path
141
+ "#{base_dir}/specifications/#{full_name}.gemspec"
142
+ end
143
+
144
+ def parse_metadata(data)
145
+ unless data
146
+ @required_ruby_version = nil
147
+ @required_rubygems_version = nil
148
+ @created_at = nil
149
+ return
150
+ end
151
+
152
+ data.each do |k, v|
153
+ next unless v
154
+ case k.to_s
155
+ when "checksum"
156
+ begin
157
+ @checksum = Checksum.from_api(v.last, @spec_fetcher.uri)
158
+ rescue ArgumentError => e
159
+ raise ArgumentError, "Invalid checksum for #{full_name}: #{e.message}"
160
+ end
161
+ when "rubygems"
162
+ @required_rubygems_version = Gem::Requirement.new(v)
163
+ when "ruby"
164
+ @required_ruby_version = Gem::Requirement.new(v)
165
+ when "created_at"
166
+ value = v.is_a?(Array) ? v.last : v
167
+ if value.is_a?(String)
168
+ @created_at = begin
169
+ Time.new(value)
170
+ rescue ArgumentError
171
+ nil
172
+ end
173
+ end
174
+ end
175
+ end
176
+ rescue StandardError => e
177
+ raise GemspecError, "There was an error parsing the metadata for the gem #{name} (#{version}): #{e.class}\n#{e}\nThe metadata was #{data.inspect}"
178
+ end
179
+
180
+ def build_dependency(name, requirements)
181
+ Dependency.new(name, requirements)
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,148 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rubygems_integration"
4
+ require_relative "source/git/git_proxy"
5
+
6
+ module Bundler
7
+ class Env
8
+ def self.write(io)
9
+ io.write report
10
+ end
11
+
12
+ def self.report(options = {})
13
+ print_gemfile = options.delete(:print_gemfile) { true }
14
+ print_gemspecs = options.delete(:print_gemspecs) { true }
15
+
16
+ out = String.new
17
+ append_formatted_table("Environment", environment, out)
18
+ append_formatted_table("Bundler Build Metadata", BuildMetadata.to_h, out)
19
+
20
+ unless Bundler.settings.all.empty?
21
+ out << "\n## Bundler settings\n\n```\n"
22
+ Bundler.settings.all.each do |setting|
23
+ out << setting << "\n"
24
+ Bundler.settings.pretty_values_for(setting).each do |line|
25
+ out << " " << line << "\n"
26
+ end
27
+ end
28
+ out << "```\n"
29
+ end
30
+
31
+ return out unless SharedHelpers.in_bundle?
32
+
33
+ if print_gemfile
34
+ gemfiles = [Bundler.default_gemfile]
35
+ begin
36
+ gemfiles = Bundler.definition.gemfiles
37
+ rescue GemfileNotFound
38
+ nil
39
+ end
40
+
41
+ out << "\n## Gemfile\n"
42
+ gemfiles.each do |gemfile|
43
+ out << "\n### #{SharedHelpers.relative_path_to(gemfile)}\n\n"
44
+ out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
45
+ end
46
+
47
+ out << "\n### #{SharedHelpers.relative_path_to(Bundler.default_lockfile)}\n\n"
48
+ out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
49
+ end
50
+
51
+ if print_gemspecs
52
+ dsl = Dsl.new.tap {|d| d.eval_gemfile(Bundler.default_gemfile) }
53
+ out << "\n## Gemspecs\n" unless dsl.gemspecs.empty?
54
+ dsl.gemspecs.each do |gs|
55
+ out << "\n### #{File.basename(gs.loaded_from)}"
56
+ out << "\n\n```ruby\n" << read_file(gs.loaded_from).chomp << "\n```\n"
57
+ end
58
+ end
59
+
60
+ out
61
+ end
62
+
63
+ def self.read_file(filename)
64
+ Bundler.read_file(filename.to_s).strip
65
+ rescue Errno::ENOENT
66
+ "<No #{filename} found>"
67
+ rescue RuntimeError => e
68
+ "#{e.class}: #{e.message}"
69
+ end
70
+
71
+ def self.ruby_version
72
+ "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
73
+ end
74
+
75
+ def self.git_version
76
+ Bundler::Source::Git::GitProxy.new(nil, nil).full_version
77
+ rescue Bundler::Source::Git::GitNotInstalledError
78
+ "not installed"
79
+ end
80
+
81
+ def self.version_of(script)
82
+ return "not installed" unless Bundler.which(script)
83
+ `#{script} --version`.chomp
84
+ end
85
+
86
+ def self.chruby_version
87
+ return "not installed" unless Bundler.which("chruby-exec")
88
+ `chruby-exec -- chruby --version`.
89
+ sub(/.*^chruby: (#{Gem::Version::VERSION_PATTERN}).*/m, '\1')
90
+ end
91
+
92
+ def self.environment
93
+ out = []
94
+
95
+ out << ["Bundler", Bundler::VERSION]
96
+ out << [" Platforms", Gem.platforms.join(", ")]
97
+ out << ["Ruby", ruby_version]
98
+ out << [" Full Path", Gem.ruby]
99
+ out << [" Config Dir", Pathname.new(Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE).dirname]
100
+ out << ["RubyGems", Gem::VERSION]
101
+ out << [" Gem Home", Gem.dir]
102
+ out << [" Gem Path", Gem.path.join(File::PATH_SEPARATOR)]
103
+ out << [" User Home", Gem.user_home]
104
+ out << [" User Path", Gem.user_dir]
105
+ out << [" Bin Dir", Gem.bindir]
106
+ if defined?(OpenSSL::SSL)
107
+ out << ["OpenSSL"]
108
+ out << [" Compiled", OpenSSL::OPENSSL_VERSION] if defined?(OpenSSL::OPENSSL_VERSION)
109
+ out << [" Loaded", OpenSSL::OPENSSL_LIBRARY_VERSION] if defined?(OpenSSL::OPENSSL_LIBRARY_VERSION)
110
+ out << [" Cert File", OpenSSL::X509::DEFAULT_CERT_FILE] if defined?(OpenSSL::X509::DEFAULT_CERT_FILE)
111
+ out << [" Cert Dir", OpenSSL::X509::DEFAULT_CERT_DIR] if defined?(OpenSSL::X509::DEFAULT_CERT_DIR)
112
+ end
113
+ out << ["Tools"]
114
+ out << [" Git", git_version]
115
+ out << [" RVM", ENV.fetch("rvm_version") { version_of("rvm") }]
116
+ out << [" rbenv", version_of("rbenv")]
117
+ out << [" chruby", chruby_version]
118
+
119
+ %w[rubygems-bundler open_gem].each do |name|
120
+ specs = Bundler.rubygems.find_name(name)
121
+ out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
122
+ end
123
+ if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
124
+ shebang = File.read(exe).lines.first
125
+ shebang.sub!(/^#!\s*/, "")
126
+ unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
127
+ out << ["Gem.ruby", Gem.ruby]
128
+ out << ["bundle #!", shebang]
129
+ end
130
+ end
131
+
132
+ out
133
+ end
134
+
135
+ def self.append_formatted_table(title, pairs, out)
136
+ return if pairs.empty?
137
+ out << "\n" unless out.empty?
138
+ out << "## #{title}\n\n```\n"
139
+ ljust = pairs.map {|k, _v| k.to_s.length }.max
140
+ pairs.each do |k, v|
141
+ out << "#{k.to_s.ljust(ljust)} #{v}\n"
142
+ end
143
+ out << "```\n"
144
+ end
145
+
146
+ private_class_method :read_file, :ruby_version, :git_version, :append_formatted_table, :version_of, :chruby_version
147
+ end
148
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class EnvironmentPreserver
5
+ INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL"
6
+ BUNDLER_KEYS = %w[
7
+ BUNDLE_BIN_PATH
8
+ BUNDLE_GEMFILE
9
+ BUNDLE_LOCKFILE
10
+ BUNDLER_VERSION
11
+ BUNDLER_SETUP
12
+ GEM_HOME
13
+ GEM_PATH
14
+ MANPATH
15
+ PATH
16
+ RB_USER_INSTALL
17
+ RUBYLIB
18
+ RUBYOPT
19
+ ].map(&:freeze).freeze
20
+ BUNDLER_PREFIX = "BUNDLER_ORIG_"
21
+
22
+ def self.from_env
23
+ new(ENV.to_hash, BUNDLER_KEYS)
24
+ end
25
+
26
+ # @param env [Hash]
27
+ # @param keys [Array<String>]
28
+ def initialize(env, keys)
29
+ @original = env
30
+ @keys = keys
31
+ @prefix = BUNDLER_PREFIX
32
+ end
33
+
34
+ # Replaces `ENV` with the bundler environment variables backed up
35
+ def replace_with_backup
36
+ ENV.replace(backup)
37
+ end
38
+
39
+ # @return [Hash]
40
+ def backup
41
+ env = @original.clone
42
+ @keys.each do |key|
43
+ value = env[key]
44
+ if !value.nil?
45
+ env[@prefix + key] ||= value
46
+ else
47
+ env[@prefix + key] ||= INTENTIONALLY_NIL
48
+ end
49
+ end
50
+ env
51
+ end
52
+
53
+ # @return [Hash]
54
+ def restore
55
+ env = @original.clone
56
+ @keys.each do |key|
57
+ value_original = env[@prefix + key]
58
+ next if value_original.nil?
59
+ if value_original == INTENTIONALLY_NIL
60
+ env.delete(key)
61
+ else
62
+ env[key] = value_original
63
+ end
64
+ env.delete(@prefix + key)
65
+ end
66
+ env
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,277 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class BundlerError < StandardError
5
+ def self.status_code(code)
6
+ define_method(:status_code) { code }
7
+ if match = BundlerError.all_errors.find {|_k, v| v == code }
8
+ error, _ = match
9
+ raise ArgumentError,
10
+ "Trying to register #{self} for status code #{code} but #{error} is already registered"
11
+ end
12
+ BundlerError.all_errors[self] = code
13
+ end
14
+
15
+ def self.all_errors
16
+ @all_errors ||= {}
17
+ end
18
+ end
19
+
20
+ class GemfileError < BundlerError; status_code(4); end
21
+ class InstallError < BundlerError; status_code(5); end
22
+
23
+ # Internal error, should be rescued
24
+ class SolveFailure < BundlerError; status_code(6); end
25
+
26
+ class GemNotFound < BundlerError; status_code(7); end
27
+ class InstallHookError < BundlerError; status_code(8); end
28
+ class RemovedError < BundlerError; status_code(9); end
29
+ class GemfileNotFound < BundlerError; status_code(10); end
30
+ class GitError < BundlerError; status_code(11); end
31
+ class DeprecatedError < BundlerError; status_code(12); end
32
+ class PathError < BundlerError; status_code(13); end
33
+ class GemspecError < BundlerError; status_code(14); end
34
+ class InvalidOption < BundlerError; status_code(15); end
35
+ class ProductionError < BundlerError; status_code(16); end
36
+
37
+ class HTTPError < BundlerError
38
+ status_code(17)
39
+ def filter_uri(uri)
40
+ URICredentialsFilter.credential_filtered_uri(uri)
41
+ end
42
+ end
43
+
44
+ class RubyVersionMismatch < BundlerError; status_code(18); end
45
+ class SecurityError < BundlerError; status_code(19); end
46
+ class LockfileError < BundlerError; status_code(20); end
47
+ class CyclicDependencyError < BundlerError; status_code(21); end
48
+ class GemfileLockNotFound < BundlerError; status_code(22); end
49
+ class PluginError < BundlerError; status_code(29); end
50
+ class ThreadCreationError < BundlerError; status_code(33); end
51
+ class APIResponseMismatchError < BundlerError; status_code(34); end
52
+ class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
53
+ class GemfileEvalError < GemfileError; end
54
+ class MarshalError < StandardError; end
55
+
56
+ class ChecksumMismatchError < SecurityError
57
+ def initialize(lock_name, existing, checksum)
58
+ @lock_name = lock_name
59
+ @existing = existing
60
+ @checksum = checksum
61
+ end
62
+
63
+ def message
64
+ <<~MESSAGE
65
+ Bundler found mismatched checksums. This is a potential security risk.
66
+ #{@lock_name} #{@existing.to_lock}
67
+ from #{@existing.sources.join("\n and ")}
68
+ #{@lock_name} #{@checksum.to_lock}
69
+ from #{@checksum.sources.join("\n and ")}
70
+
71
+ #{mismatch_resolution_instructions}
72
+ To ignore checksum security warnings, disable checksum validation with
73
+ `bundle config set --local disable_checksum_validation true`
74
+ MESSAGE
75
+ end
76
+
77
+ def mismatch_resolution_instructions
78
+ removable, remote = [@existing, @checksum].partition(&:removable?)
79
+ case removable.size
80
+ when 1
81
+ msg = +"If you trust #{remote.first.sources.first}, to resolve this issue you can:\n"
82
+ msg << removable.first.removal_instructions
83
+ when 2
84
+ msg = +"To resolve this issue you can either:\n"
85
+ msg << @checksum.removal_instructions
86
+ msg << "or if you are sure that the new checksum from #{@checksum.sources.first} is correct:\n"
87
+ msg << @existing.removal_instructions
88
+ end
89
+ end
90
+
91
+ status_code(37)
92
+ end
93
+
94
+ class PermissionError < BundlerError
95
+ def initialize(path, permission_type = :write)
96
+ @path = path
97
+ @permission_type = permission_type
98
+ end
99
+
100
+ def action
101
+ case @permission_type
102
+ when :read then "read from"
103
+ when :write then "write to"
104
+ when :executable, :exec then "execute"
105
+ else @permission_type.to_s
106
+ end
107
+ end
108
+
109
+ def permission_type
110
+ case @permission_type
111
+ when :create
112
+ "executable permissions for all parent directories and write permissions for `#{parent_folder}`"
113
+ else
114
+ "#{@permission_type} permissions for that path"
115
+ end
116
+ end
117
+
118
+ def parent_folder
119
+ File.dirname(@path)
120
+ end
121
+
122
+ def message
123
+ "There was an error while trying to #{action} `#{@path}`. " \
124
+ "It is likely that you need to grant #{permission_type}."
125
+ end
126
+
127
+ status_code(23)
128
+ end
129
+
130
+ class GemRequireError < BundlerError
131
+ attr_reader :orig_exception
132
+
133
+ def initialize(orig_exception, msg)
134
+ full_message = msg + "\nGem Load Error is: #{orig_exception.message}\n"\
135
+ "Backtrace for gem load error is:\n"\
136
+ "#{orig_exception.backtrace.join("\n")}\n"\
137
+ "Bundler Error Backtrace:\n"
138
+ super(full_message)
139
+ @orig_exception = orig_exception
140
+ end
141
+
142
+ status_code(24)
143
+ end
144
+
145
+ class YamlSyntaxError < BundlerError
146
+ attr_reader :orig_exception
147
+
148
+ def initialize(orig_exception, msg)
149
+ super(msg)
150
+ @orig_exception = orig_exception
151
+ end
152
+
153
+ status_code(25)
154
+ end
155
+
156
+ class TemporaryResourceError < PermissionError
157
+ def message
158
+ "There was an error while trying to #{action} `#{@path}`. " \
159
+ "Some resource was temporarily unavailable. It's suggested that you try" \
160
+ "the operation again."
161
+ end
162
+
163
+ status_code(26)
164
+ end
165
+
166
+ class VirtualProtocolError < BundlerError
167
+ def message
168
+ "There was an error relating to virtualization and file access. " \
169
+ "It is likely that you need to grant access to or mount some file system correctly."
170
+ end
171
+
172
+ status_code(27)
173
+ end
174
+
175
+ class OperationNotSupportedError < PermissionError
176
+ def message
177
+ "Attempting to #{action} `#{@path}` is unsupported by your OS."
178
+ end
179
+
180
+ status_code(28)
181
+ end
182
+
183
+ class NoSpaceOnDeviceError < PermissionError
184
+ def message
185
+ "There was an error while trying to #{action} `#{@path}`. " \
186
+ "There was insufficient space remaining on the device."
187
+ end
188
+
189
+ status_code(31)
190
+ end
191
+
192
+ class ReadOnlyFileSystemError < PermissionError
193
+ def message
194
+ "There was an error while trying to #{action} `#{@path}`. " \
195
+ "File system is read-only."
196
+ end
197
+
198
+ status_code(42)
199
+ end
200
+
201
+ class OperationNotPermittedError < PermissionError
202
+ def message
203
+ "There was an error while trying to #{action} `#{@path}`. " \
204
+ "Underlying OS system call raised an EPERM error."
205
+ end
206
+
207
+ status_code(43)
208
+ end
209
+
210
+ class GenericSystemCallError < BundlerError
211
+ attr_reader :underlying_error
212
+
213
+ def initialize(underlying_error, message)
214
+ @underlying_error = underlying_error
215
+ super("#{message}\nThe underlying system error is #{@underlying_error.class}: #{@underlying_error}")
216
+ end
217
+
218
+ status_code(32)
219
+ end
220
+
221
+ class DirectoryRemovalError < BundlerError
222
+ def initialize(orig_exception, msg)
223
+ full_message = "#{msg}.\n" \
224
+ "The underlying error was #{orig_exception.class}: #{orig_exception.message}, with backtrace:\n" \
225
+ " #{orig_exception.backtrace.join("\n ")}\n\n" \
226
+ "Bundler Error Backtrace:"
227
+ super(full_message)
228
+ end
229
+
230
+ status_code(36)
231
+ end
232
+
233
+ class InsecureInstallPathError < BundlerError
234
+ def initialize(name, path)
235
+ @name = name
236
+ @path = path
237
+ end
238
+
239
+ def message
240
+ "Bundler cannot reinstall #{@name} because there's a previous installation of it at #{@path} that is unsafe to remove.\n" \
241
+ "The parent of #{@path} is world-writable and does not have the sticky bit set, making it insecure to remove due to potential vulnerabilities.\n" \
242
+ "Please change the permissions of #{File.dirname(@path)} or choose a different install path."
243
+ end
244
+
245
+ status_code(38)
246
+ end
247
+
248
+ class CorruptBundlerInstallError < BundlerError
249
+ def initialize(loaded_spec)
250
+ @loaded_spec = loaded_spec
251
+ end
252
+
253
+ def message
254
+ "The running version of Bundler (#{Bundler::VERSION}) does not match the version of the specification installed for it (#{@loaded_spec.version}). " \
255
+ "This can be caused by reinstalling Ruby without removing previous installation, leaving around an upgraded default version of Bundler. " \
256
+ "Reinstalling Ruby from scratch should fix the problem."
257
+ end
258
+
259
+ status_code(39)
260
+ end
261
+
262
+ class InvalidArgumentError < BundlerError; status_code(40); end
263
+
264
+ class IncorrectLockfileDependencies < BundlerError
265
+ attr_reader :spec
266
+
267
+ def initialize(spec)
268
+ @spec = spec
269
+ end
270
+
271
+ def message
272
+ "Bundler found incorrect dependencies in the lockfile for #{spec.full_name}"
273
+ end
274
+
275
+ status_code(41)
276
+ end
277
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class FeatureFlag
5
+ (1..10).each {|v| define_method("bundler_#{v}_mode?") { @major_version >= v } }
6
+
7
+ def removed_major?(target_major_version)
8
+ @major_version > target_major_version
9
+ end
10
+
11
+ def deprecated_major?(target_major_version)
12
+ @major_version >= target_major_version
13
+ end
14
+
15
+ def initialize(bundler_version)
16
+ @bundler_version = Gem::Version.create(bundler_version)
17
+ @major_version = @bundler_version.segments.first
18
+ end
19
+ end
20
+ end