bundler-plus 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,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Cache
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ Bundler.ui.level = "warn" if options[:quiet]
13
+ Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
14
+
15
+ install
16
+
17
+ Bundler.settings.temporary(cache_all_platforms: options["all-platforms"]) do
18
+ Bundler.load.cache
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def install
25
+ require_relative "install"
26
+ options = self.options.dup
27
+ options["local"] = false if Bundler.settings[:cache_all_platforms]
28
+ options["no-cache"] = true
29
+ Bundler::CLI::Install.new(options).run
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Check
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ Bundler.settings.set_command_option_if_given :path, options[:path]
13
+
14
+ definition = Bundler.definition
15
+ definition.validate_runtime!
16
+
17
+ begin
18
+ definition.check!
19
+ not_installed = definition.missing_specs
20
+ rescue GemNotFound, GitError, SolveFailure
21
+ Bundler.ui.error "Bundler can't satisfy your Gemfile's dependencies."
22
+ Bundler.ui.warn "Install missing gems with `bundle install`."
23
+ exit 1
24
+ end
25
+
26
+ if not_installed.any?
27
+ Bundler.ui.error "The following gems are missing"
28
+ not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
29
+ Bundler.ui.warn "Install missing gems with `bundle install`"
30
+ exit 1
31
+ elsif !Bundler.default_lockfile.file? && Bundler.frozen_bundle?
32
+ Bundler.ui.error "This bundle has been frozen, but there is no #{SharedHelpers.relative_lockfile_path} present"
33
+ exit 1
34
+ else
35
+ definition.lock(true) unless options[:"dry-run"]
36
+ Bundler.ui.info "The Gemfile's dependencies are satisfied"
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Clean
5
+ attr_reader :options
6
+
7
+ def initialize(options)
8
+ @options = options
9
+ end
10
+
11
+ def run
12
+ require_path_or_force unless options[:"dry-run"]
13
+ Bundler.load.clean(options[:"dry-run"])
14
+ end
15
+
16
+ protected
17
+
18
+ def require_path_or_force
19
+ return unless Bundler.use_system_gems? && !options[:force]
20
+ raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
21
+ "If you're sure you want to remove every system gem not in this " \
22
+ "bundle, run `bundle clean --force`."
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,161 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module CLI::Common
5
+ def self.validate_cooldown!(value)
6
+ return if value.nil?
7
+ return if value.is_a?(Integer) && value >= 0
8
+ raise InvalidOption, "Expected `--cooldown` to be a non-negative integer, got #{value.inspect}"
9
+ end
10
+
11
+ def self.output_post_install_messages(messages)
12
+ return if Bundler.settings["ignore_messages"]
13
+ messages.to_a.each do |name, msg|
14
+ print_post_install_message(name, msg) unless Bundler.settings["ignore_messages.#{name}"]
15
+ end
16
+ end
17
+
18
+ def self.print_post_install_message(name, msg)
19
+ Bundler.ui.confirm "Post-install message from #{name}:"
20
+ Bundler.ui.info msg
21
+ end
22
+
23
+ def self.output_fund_metadata_summary
24
+ return if Bundler.settings["ignore_funding_requests"]
25
+ definition = Bundler.definition
26
+ current_dependencies = definition.requested_dependencies
27
+ current_specs = definition.specs
28
+
29
+ count = current_dependencies.count {|dep| current_specs[dep.name].first.metadata.key?("funding_uri") }
30
+
31
+ return if count.zero?
32
+
33
+ intro = count > 1 ? "#{count} installed gems you directly depend on are" : "#{count} installed gem you directly depend on is"
34
+ message = "#{intro} looking for funding.\n Run `bundle fund` for details"
35
+ Bundler.ui.info message
36
+ end
37
+
38
+ def self.output_without_groups_message(command)
39
+ return if Bundler.settings[:without].empty?
40
+ Bundler.ui.confirm without_groups_message(command)
41
+ end
42
+
43
+ def self.without_groups_message(command)
44
+ command_in_past_tense = command == :install ? "installed" : "updated"
45
+ groups = Bundler.settings[:without]
46
+ "Gems in the #{verbalize_groups(groups)} were not #{command_in_past_tense}."
47
+ end
48
+
49
+ def self.verbalize_groups(groups)
50
+ groups.map! {|g| "'#{g}'" }
51
+ group_list = [groups[0...-1].join(", "), groups[-1..-1]].
52
+ reject {|s| s.to_s.empty? }.join(" and ")
53
+ group_str = groups.size == 1 ? "group" : "groups"
54
+ "#{group_str} #{group_list}"
55
+ end
56
+
57
+ def self.select_spec(name, regex_match = nil)
58
+ specs = []
59
+ regexp = Regexp.new(name) if regex_match
60
+
61
+ Bundler.definition.specs.each do |spec|
62
+ return spec if spec.name == name
63
+ specs << spec if regexp && spec.name.match?(regexp)
64
+ end
65
+
66
+ default_spec = default_gem_spec(name)
67
+ specs << default_spec if default_spec
68
+
69
+ case specs.count
70
+ when 0
71
+ dep_in_other_group = Bundler.definition.current_dependencies.find {|dep|dep.name == name }
72
+
73
+ if dep_in_other_group
74
+ raise GemNotFound, "Could not find gem '#{name}', because it's in the #{verbalize_groups(dep_in_other_group.groups)}, configured to be ignored."
75
+ else
76
+ raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
77
+ end
78
+ when 1
79
+ specs.first
80
+ else
81
+ ask_for_spec_from(specs)
82
+ end
83
+ rescue RegexpError
84
+ raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
85
+ end
86
+
87
+ def self.default_gem_spec(name)
88
+ gem_spec = Gem::Specification.find_all_by_name(name).last
89
+ gem_spec if gem_spec&.default_gem?
90
+ end
91
+
92
+ def self.ask_for_spec_from(specs)
93
+ specs.each_with_index do |spec, index|
94
+ Bundler.ui.info "#{index.succ} : #{spec.name}", true
95
+ end
96
+ Bundler.ui.info "0 : - exit -", true
97
+
98
+ num = Bundler.ui.ask("> ").to_i
99
+ num > 0 ? specs[num - 1] : nil
100
+ end
101
+
102
+ def self.gem_not_found_message(missing_gem_name, alternatives)
103
+ message = "Could not find gem '#{missing_gem_name}'."
104
+ alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
105
+ if alternate_names.include?(missing_gem_name.downcase)
106
+ message += "\nDid you mean '#{missing_gem_name.downcase}'?"
107
+ elsif defined?(DidYouMean::SpellChecker)
108
+ suggestions = DidYouMean::SpellChecker.new(dictionary: alternate_names).correct(missing_gem_name)
109
+ message += "\nDid you mean #{word_list(suggestions)}?" unless suggestions.empty?
110
+ end
111
+ message
112
+ end
113
+
114
+ def self.ensure_all_gems_in_lockfile!(names, locked_gems = Bundler.locked_gems)
115
+ return unless locked_gems
116
+
117
+ locked_names = locked_gems.specs.map(&:name).uniq
118
+ names.-(locked_names).each do |g|
119
+ raise GemNotFound, gem_not_found_message(g, locked_names)
120
+ end
121
+ end
122
+
123
+ def self.configure_gem_version_promoter(definition, options)
124
+ patch_level = patch_level_options(options)
125
+ patch_level << :patch if patch_level.empty? && Bundler.settings[:prefer_patch]
126
+ raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1
127
+
128
+ definition.gem_version_promoter.tap do |gvp|
129
+ gvp.level = patch_level.first || :major
130
+ gvp.strict = options[:strict] || options["filter-strict"]
131
+ gvp.pre = options[:pre]
132
+ end
133
+ end
134
+
135
+ def self.patch_level_options(options)
136
+ [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
137
+ end
138
+
139
+ def self.clean_after_install?
140
+ clean = Bundler.settings[:clean]
141
+ return clean unless clean.nil?
142
+ clean ||= Bundler.feature_flag.bundler_5_mode? && Bundler.settings[:path].nil?
143
+ clean &&= !Bundler.use_system_gems?
144
+ clean
145
+ end
146
+
147
+ def self.word_list(words)
148
+ if words.empty?
149
+ return ""
150
+ end
151
+
152
+ words = words.map {|word| "'#{word}'" }
153
+
154
+ if words.length == 1
155
+ return words[0]
156
+ end
157
+
158
+ [words[0..-2].join(", "), words[-1]].join(" or ")
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,208 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Config < Thor
5
+ class_option :parseable, type: :boolean, banner: "Use minimal formatting for more parseable output"
6
+
7
+ def self.scope_options
8
+ method_option :global, type: :boolean, banner: "Only change the global config"
9
+ method_option :local, type: :boolean, banner: "Only change the local config"
10
+ end
11
+ private_class_method :scope_options
12
+
13
+ desc "base NAME [VALUE]", "The Bundler 1 config interface", hide: true
14
+ scope_options
15
+ method_option :delete, type: :boolean, banner: "delete"
16
+ def base(name = nil, *value)
17
+ new_args =
18
+ if ARGV.size == 1
19
+ ["config", "list"]
20
+ elsif ARGV.include?("--delete")
21
+ ARGV.map {|arg| arg == "--delete" ? "unset" : arg }
22
+ elsif ARGV.include?("--global") || ARGV.include?("--local") || ARGV.size == 3
23
+ ["config", "set", *ARGV[1..-1]]
24
+ else
25
+ ["config", "get", ARGV[1]]
26
+ end
27
+
28
+ message = "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
29
+ SharedHelpers.feature_deprecated! message
30
+
31
+ Base.new(options, name, value, self).run
32
+ end
33
+
34
+ desc "list", "List out all configured settings"
35
+ def list
36
+ Base.new(options, nil, nil, self).run
37
+ end
38
+
39
+ desc "get NAME", "Returns the value for the given key"
40
+ def get(name)
41
+ Base.new(options, name, nil, self).run
42
+ end
43
+
44
+ desc "set NAME VALUE", "Sets the given value for the given key"
45
+ scope_options
46
+ def set(name, value, *value_)
47
+ Base.new(options, name, value_.unshift(value), self).run
48
+ end
49
+
50
+ desc "unset NAME", "Unsets the value for the given key"
51
+ scope_options
52
+ def unset(name)
53
+ options[:delete] = true
54
+ Base.new(options, name, nil, self).run
55
+ end
56
+
57
+ default_task :base
58
+
59
+ class Base
60
+ attr_reader :name, :value, :options, :scope, :thor
61
+
62
+ def initialize(options, name, value, thor)
63
+ @options = options
64
+ @name = name
65
+ value = Array(value)
66
+ @value = value.empty? ? nil : value.join(" ")
67
+ @thor = thor
68
+ validate_scope!
69
+ end
70
+
71
+ def run
72
+ unless name
73
+ warn_unused_scope "Ignoring --#{scope}"
74
+ confirm_all
75
+ return
76
+ end
77
+
78
+ if options[:delete]
79
+ if !explicit_scope? || scope != "global"
80
+ Bundler.settings.set_local(name, nil)
81
+ end
82
+ if !explicit_scope? || scope != "local"
83
+ Bundler.settings.set_global(name, nil)
84
+ end
85
+ return
86
+ end
87
+
88
+ if value.nil?
89
+ warn_unused_scope "Ignoring --#{scope} since no value to set was given"
90
+ current_value = Bundler.settings[name]
91
+
92
+ if options[:parseable]
93
+ if value = Bundler.settings[name]
94
+ Bundler.ui.info("#{name}=#{value}")
95
+ end
96
+ else
97
+ confirm(name)
98
+ end
99
+
100
+ if current_value.nil?
101
+ exit 1
102
+ else
103
+ return
104
+ end
105
+ end
106
+
107
+ Bundler.ui.info(message) if message
108
+ Bundler.settings.send("set_#{scope}", name, new_value)
109
+ end
110
+
111
+ def confirm_all
112
+ if @options[:parseable]
113
+ thor.with_padding do
114
+ Bundler.settings.all.each do |setting|
115
+ val = Bundler.settings[setting]
116
+ Bundler.ui.info "#{setting}=#{val}"
117
+ end
118
+ end
119
+ else
120
+ Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
121
+ Bundler.settings.all.each do |setting|
122
+ Bundler.ui.confirm setting
123
+ show_pretty_values_for(setting)
124
+ Bundler.ui.confirm ""
125
+ end
126
+ end
127
+ end
128
+
129
+ def confirm(name)
130
+ Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
131
+ show_pretty_values_for(name)
132
+ end
133
+
134
+ def new_value
135
+ pathname = Pathname.new(value)
136
+ if name.start_with?("local.") && pathname.directory?
137
+ pathname.expand_path.to_s
138
+ else
139
+ value
140
+ end
141
+ end
142
+
143
+ def message
144
+ locations = Bundler.settings.locations(name)
145
+ if @options[:parseable]
146
+ "#{name}=#{new_value}" if new_value
147
+ elsif scope == "global"
148
+ if !locations[:local].nil?
149
+ "Your application has set #{name} to #{locations[:local].inspect}. " \
150
+ "This will override the global value you are currently setting"
151
+ elsif locations[:env]
152
+ "You have a bundler environment variable for #{name} set to " \
153
+ "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
154
+ elsif !locations[:global].nil? && locations[:global] != value
155
+ "You are replacing the current global value of #{name}, which is currently " \
156
+ "#{locations[:global].inspect}"
157
+ end
158
+ elsif scope == "local" && !locations[:local].nil? && locations[:local] != value
159
+ "You are replacing the current local value of #{name}, which is currently " \
160
+ "#{locations[:local].inspect}"
161
+ end
162
+ end
163
+
164
+ def show_pretty_values_for(setting)
165
+ thor.with_padding do
166
+ Bundler.settings.pretty_values_for(setting).each do |line|
167
+ Bundler.ui.info line
168
+ end
169
+ end
170
+ end
171
+
172
+ def explicit_scope?
173
+ @explicit_scope
174
+ end
175
+
176
+ def warn_unused_scope(msg)
177
+ return unless explicit_scope?
178
+ return if options[:parseable]
179
+
180
+ Bundler.ui.warn(msg)
181
+ end
182
+
183
+ def validate_scope!
184
+ @explicit_scope = true
185
+ scopes = %w[global local].select {|s| options[s] }
186
+ case scopes.size
187
+ when 0
188
+ @scope = inside_app? ? "local" : "global"
189
+ @explicit_scope = false
190
+ when 1
191
+ @scope = scopes.first
192
+ else
193
+ raise InvalidOption,
194
+ "The options #{scopes.join " and "} were specified. Please only use one of the switches at a time."
195
+ end
196
+ end
197
+
198
+ private
199
+
200
+ def inside_app?
201
+ Bundler.root
202
+ true
203
+ rescue GemfileNotFound
204
+ false
205
+ end
206
+ end
207
+ end
208
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class CLI::Console
5
+ attr_reader :options, :group
6
+ def initialize(options, group)
7
+ @options = options
8
+ @group = group
9
+ end
10
+
11
+ def run
12
+ group ? Bundler.require(:default, *group.split(" ").map!(&:to_sym)) : Bundler.require
13
+ ARGV.clear
14
+
15
+ console = get_console(Bundler.settings[:console] || "irb")
16
+ console.start
17
+ end
18
+
19
+ def get_console(name)
20
+ require name
21
+ get_constant(name)
22
+ rescue LoadError
23
+ if name == "irb"
24
+ if defined?(Gem::BUNDLED_GEMS) && Gem::BUNDLED_GEMS.respond_to?(:force_activate)
25
+ Gem::BUNDLED_GEMS.force_activate "irb"
26
+ require name
27
+ return get_constant(name)
28
+ end
29
+ Bundler.ui.error "#{name} is not available"
30
+ exit 1
31
+ else
32
+ Bundler.ui.error "Couldn't load console #{name}, falling back to irb"
33
+ name = "irb"
34
+ retry
35
+ end
36
+ end
37
+
38
+ def get_constant(name)
39
+ const_name = {
40
+ "pry" => :Pry,
41
+ "ripl" => :Ripl,
42
+ "irb" => :IRB,
43
+ }[name]
44
+ Object.const_get(const_name)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,167 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbconfig"
4
+ require "shellwords"
5
+
6
+ module Bundler
7
+ class CLI::Doctor::Diagnose
8
+ DARWIN_REGEX = /\s+(.+) \(compatibility /
9
+ LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/
10
+
11
+ attr_reader :options
12
+
13
+ def initialize(options)
14
+ @options = options
15
+ end
16
+
17
+ def otool_available?
18
+ Bundler.which("otool")
19
+ end
20
+
21
+ def ldd_available?
22
+ Bundler.which("ldd")
23
+ end
24
+
25
+ def dylibs_darwin(path)
26
+ output = `/usr/bin/otool -L #{path.shellescape}`.chomp
27
+ dylibs = output.split("\n")[1..-1].filter_map {|l| l.match(DARWIN_REGEX)&.match(1) }.uniq
28
+ # ignore @rpath and friends
29
+ dylibs.reject {|dylib| dylib.start_with? "@" }
30
+ end
31
+
32
+ def dylibs_ldd(path)
33
+ output = `/usr/bin/ldd #{path.shellescape}`.chomp
34
+ output.split("\n").filter_map do |l|
35
+ match = l.match(LDD_REGEX)
36
+ next if match.nil?
37
+ match.captures[0]
38
+ end
39
+ end
40
+
41
+ def dylibs(path)
42
+ case RbConfig::CONFIG["host_os"]
43
+ when /darwin/
44
+ return [] unless otool_available?
45
+ dylibs_darwin(path)
46
+ when /(linux|solaris|bsd)/
47
+ return [] unless ldd_available?
48
+ dylibs_ldd(path)
49
+ else # Windows, etc.
50
+ Bundler.ui.warn("Dynamic library check not supported on this platform.")
51
+ []
52
+ end
53
+ end
54
+
55
+ def bundles_for_gem(spec)
56
+ Dir.glob("#{spec.full_gem_path}/**/*.bundle")
57
+ end
58
+
59
+ def lookup_with_fiddle(path)
60
+ require "fiddle"
61
+ Fiddle.dlopen(path)
62
+ false
63
+ rescue Fiddle::DLError
64
+ true
65
+ end
66
+
67
+ def check!
68
+ require_relative "../check"
69
+ Bundler::CLI::Check.new({}).run
70
+ end
71
+
72
+ def diagnose_ssl
73
+ require_relative "ssl"
74
+ Bundler::CLI::Doctor::SSL.new({}).run
75
+ end
76
+
77
+ def run
78
+ Bundler.ui.level = "warn" if options[:quiet]
79
+ Bundler.settings.validate!
80
+ check!
81
+ diagnose_ssl if options[:ssl]
82
+
83
+ definition = Bundler.definition
84
+ broken_links = {}
85
+
86
+ definition.specs.each do |spec|
87
+ bundles_for_gem(spec).each do |bundle|
88
+ bad_paths = dylibs(bundle).select do |f|
89
+ lookup_with_fiddle(f)
90
+ end
91
+ if bad_paths.any?
92
+ broken_links[spec] ||= []
93
+ broken_links[spec].concat(bad_paths)
94
+ end
95
+ end
96
+ end
97
+
98
+ permissions_valid = check_home_permissions
99
+
100
+ if broken_links.any?
101
+ message = "The following gems are missing OS dependencies:"
102
+ broken_links.flat_map do |spec, paths|
103
+ paths.uniq.map do |path|
104
+ "\n * #{spec.name}: #{path}"
105
+ end
106
+ end.sort.each {|m| message += m }
107
+ raise ProductionError, message
108
+ elsif permissions_valid
109
+ Bundler.ui.info "No issues found with the installed bundle"
110
+ end
111
+ end
112
+
113
+ private
114
+
115
+ def check_home_permissions
116
+ require "find"
117
+ files_not_readable = []
118
+ files_not_readable_and_owned_by_different_user = []
119
+ files_not_owned_by_current_user_but_still_readable = []
120
+ broken_symlinks = []
121
+ Find.find(Bundler.bundle_path.to_s).each do |f|
122
+ if !File.exist?(f)
123
+ broken_symlinks << f
124
+ elsif !File.readable?(f)
125
+ if File.stat(f).uid != Process.uid
126
+ files_not_readable_and_owned_by_different_user << f
127
+ else
128
+ files_not_readable << f
129
+ end
130
+ elsif File.stat(f).uid != Process.uid
131
+ files_not_owned_by_current_user_but_still_readable << f
132
+ end
133
+ end
134
+
135
+ ok = true
136
+
137
+ if broken_symlinks.any?
138
+ Bundler.ui.warn "Broken links exist in the Bundler home. Please report them to the offending gem's upstream repo. These files are:\n - #{broken_symlinks.join("\n - ")}"
139
+
140
+ ok = false
141
+ end
142
+
143
+ if files_not_owned_by_current_user_but_still_readable.any?
144
+ Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
145
+ "user, but are still readable. These files are:\n - #{files_not_owned_by_current_user_but_still_readable.join("\n - ")}"
146
+
147
+ ok = false
148
+ end
149
+
150
+ if files_not_readable_and_owned_by_different_user.any?
151
+ Bundler.ui.warn "Files exist in the Bundler home that are owned by another " \
152
+ "user, and are not readable. These files are:\n - #{files_not_readable_and_owned_by_different_user.join("\n - ")}"
153
+
154
+ ok = false
155
+ end
156
+
157
+ if files_not_readable.any?
158
+ Bundler.ui.warn "Files exist in the Bundler home that are not " \
159
+ "readable by the current user. These files are:\n - #{files_not_readable.join("\n - ")}"
160
+
161
+ ok = false
162
+ end
163
+
164
+ ok
165
+ end
166
+ end
167
+ end