bundler 1.13.6 → 1.17.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bundler might be problematic. Click here for more details.

Files changed (323) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +554 -9
  3. data/README.md +28 -5
  4. data/bundler.gemspec +40 -11
  5. data/exe/bundle +4 -8
  6. data/exe/bundle_ruby +4 -3
  7. data/lib/bundler.rb +162 -68
  8. data/lib/bundler/build_metadata.rb +53 -0
  9. data/lib/bundler/capistrano.rb +5 -0
  10. data/lib/bundler/cli.rb +360 -118
  11. data/lib/bundler/cli/add.rb +35 -0
  12. data/lib/bundler/cli/binstubs.rb +18 -10
  13. data/lib/bundler/cli/cache.rb +6 -5
  14. data/lib/bundler/cli/check.rb +4 -6
  15. data/lib/bundler/cli/clean.rb +6 -7
  16. data/lib/bundler/cli/common.rb +47 -1
  17. data/lib/bundler/cli/config.rb +26 -7
  18. data/lib/bundler/cli/console.rb +2 -1
  19. data/lib/bundler/cli/doctor.rb +63 -18
  20. data/lib/bundler/cli/exec.rb +12 -5
  21. data/lib/bundler/cli/gem.rb +59 -21
  22. data/lib/bundler/cli/info.rb +50 -0
  23. data/lib/bundler/cli/init.rb +21 -7
  24. data/lib/bundler/cli/inject.rb +13 -4
  25. data/lib/bundler/cli/install.rb +72 -101
  26. data/lib/bundler/cli/issue.rb +40 -0
  27. data/lib/bundler/cli/list.rb +58 -0
  28. data/lib/bundler/cli/lock.rb +9 -6
  29. data/lib/bundler/cli/open.rb +4 -3
  30. data/lib/bundler/cli/outdated.rb +175 -60
  31. data/lib/bundler/cli/package.rb +9 -6
  32. data/lib/bundler/cli/platform.rb +2 -1
  33. data/lib/bundler/cli/plugin.rb +1 -0
  34. data/lib/bundler/cli/pristine.rb +47 -0
  35. data/lib/bundler/cli/remove.rb +18 -0
  36. data/lib/bundler/cli/show.rb +2 -2
  37. data/lib/bundler/cli/update.rb +44 -34
  38. data/lib/bundler/cli/viz.rb +5 -1
  39. data/lib/bundler/compact_index_client.rb +109 -0
  40. data/lib/bundler/compact_index_client/cache.rb +118 -0
  41. data/lib/bundler/compact_index_client/updater.rb +116 -0
  42. data/lib/bundler/compatibility_guard.rb +14 -0
  43. data/lib/bundler/constants.rb +1 -0
  44. data/lib/bundler/current_ruby.rb +17 -8
  45. data/lib/bundler/definition.rb +353 -182
  46. data/lib/bundler/dep_proxy.rb +3 -1
  47. data/lib/bundler/dependency.rb +22 -10
  48. data/lib/bundler/deployment.rb +1 -1
  49. data/lib/bundler/deprecate.rb +15 -3
  50. data/lib/bundler/dsl.rb +122 -64
  51. data/lib/bundler/endpoint_specification.rb +13 -3
  52. data/lib/bundler/env.rb +110 -38
  53. data/lib/bundler/environment_preserver.rb +27 -6
  54. data/lib/bundler/errors.rb +24 -0
  55. data/lib/bundler/feature_flag.rb +74 -0
  56. data/lib/bundler/fetcher.rb +18 -11
  57. data/lib/bundler/fetcher/base.rb +1 -0
  58. data/lib/bundler/fetcher/compact_index.rb +7 -5
  59. data/lib/bundler/fetcher/dependency.rb +3 -2
  60. data/lib/bundler/fetcher/downloader.rb +25 -7
  61. data/lib/bundler/fetcher/index.rb +3 -2
  62. data/lib/bundler/friendly_errors.rb +33 -7
  63. data/lib/bundler/gem_helper.rb +25 -11
  64. data/lib/bundler/gem_helpers.rb +70 -1
  65. data/lib/bundler/gem_remote_fetcher.rb +1 -0
  66. data/lib/bundler/gem_tasks.rb +1 -0
  67. data/lib/bundler/gem_version_promoter.rb +17 -2
  68. data/lib/bundler/gemdeps.rb +29 -0
  69. data/lib/bundler/graph.rb +1 -0
  70. data/lib/bundler/index.rb +28 -15
  71. data/lib/bundler/injector.rb +216 -33
  72. data/lib/bundler/inline.rb +12 -12
  73. data/lib/bundler/installer.rb +139 -53
  74. data/lib/bundler/installer/gem_installer.rb +15 -5
  75. data/lib/bundler/installer/parallel_installer.rb +113 -28
  76. data/lib/bundler/installer/standalone.rb +1 -0
  77. data/lib/bundler/lazy_specification.rb +31 -3
  78. data/lib/bundler/lockfile_generator.rb +95 -0
  79. data/lib/bundler/lockfile_parser.rb +50 -37
  80. data/lib/bundler/match_platform.rb +13 -3
  81. data/lib/bundler/mirror.rb +10 -5
  82. data/lib/bundler/plugin.rb +22 -8
  83. data/lib/bundler/plugin/api.rb +2 -1
  84. data/lib/bundler/plugin/api/source.rb +17 -4
  85. data/lib/bundler/plugin/events.rb +61 -0
  86. data/lib/bundler/plugin/index.rb +9 -2
  87. data/lib/bundler/plugin/installer.rb +7 -6
  88. data/lib/bundler/plugin/source_list.rb +7 -8
  89. data/lib/bundler/process_lock.rb +24 -0
  90. data/lib/bundler/psyched_yaml.rb +10 -0
  91. data/lib/bundler/remote_specification.rb +30 -1
  92. data/lib/bundler/resolver.rb +187 -194
  93. data/lib/bundler/resolver/spec_group.rb +106 -0
  94. data/lib/bundler/retry.rb +5 -1
  95. data/lib/bundler/ruby_dsl.rb +1 -0
  96. data/lib/bundler/ruby_version.rb +12 -2
  97. data/lib/bundler/rubygems_ext.rb +23 -8
  98. data/lib/bundler/rubygems_gem_installer.rb +90 -0
  99. data/lib/bundler/rubygems_integration.rb +193 -70
  100. data/lib/bundler/runtime.rb +39 -22
  101. data/lib/bundler/settings.rb +245 -85
  102. data/lib/bundler/settings/validator.rb +102 -0
  103. data/lib/bundler/setup.rb +4 -7
  104. data/lib/bundler/shared_helpers.rb +183 -40
  105. data/lib/bundler/similarity_detector.rb +1 -0
  106. data/lib/bundler/source.rb +58 -1
  107. data/lib/bundler/source/gemspec.rb +1 -0
  108. data/lib/bundler/source/git.rb +52 -23
  109. data/lib/bundler/source/git/git_proxy.rb +30 -14
  110. data/lib/bundler/source/metadata.rb +62 -0
  111. data/lib/bundler/source/path.rb +42 -16
  112. data/lib/bundler/source/path/installer.rb +4 -2
  113. data/lib/bundler/source/rubygems.rb +171 -82
  114. data/lib/bundler/source/rubygems/remote.rb +12 -2
  115. data/lib/bundler/source_list.rb +75 -15
  116. data/lib/bundler/spec_set.rb +67 -32
  117. data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  118. data/lib/bundler/stub_specification.rb +86 -2
  119. data/lib/bundler/templates/.document +1 -0
  120. data/lib/bundler/templates/Executable +13 -1
  121. data/lib/bundler/templates/Executable.bundler +105 -0
  122. data/lib/bundler/templates/Executable.standalone +5 -5
  123. data/lib/bundler/templates/Gemfile +3 -0
  124. data/lib/bundler/templates/gems.rb +8 -0
  125. data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
  126. data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
  127. data/lib/bundler/templates/newgem/README.md.tt +14 -8
  128. data/lib/bundler/templates/newgem/Rakefile.tt +5 -5
  129. data/lib/bundler/templates/newgem/bin/console.tt +1 -1
  130. data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
  131. data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
  132. data/lib/bundler/templates/newgem/gitignore.tt +5 -1
  133. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
  134. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
  135. data/lib/bundler/templates/newgem/newgem.gemspec.tt +21 -12
  136. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  137. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -3
  138. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +13 -1
  139. data/lib/bundler/templates/newgem/test/newgem_test.rb.tt +1 -1
  140. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +3 -3
  141. data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
  142. data/lib/bundler/ui.rb +1 -0
  143. data/lib/bundler/ui/rg_proxy.rb +1 -0
  144. data/lib/bundler/ui/shell.rb +30 -10
  145. data/lib/bundler/ui/silent.rb +21 -1
  146. data/lib/bundler/uri_credentials_filter.rb +1 -0
  147. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  148. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  149. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  150. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  151. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  152. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +26 -6
  153. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +2 -1
  154. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +12 -4
  155. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +3 -2
  156. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
  157. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +11 -3
  158. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +13 -1
  159. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +3 -2
  160. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -2
  161. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +18 -5
  162. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +75 -7
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +499 -128
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  169. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
  170. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
  171. data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
  172. data/lib/bundler/vendor/thor/lib/thor.rb +46 -21
  173. data/lib/bundler/vendor/thor/lib/thor/actions.rb +24 -22
  174. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +2 -1
  175. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  176. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +2 -2
  177. data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
  178. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +66 -18
  179. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +17 -15
  180. data/lib/bundler/vendor/thor/lib/thor/base.rb +55 -32
  181. data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -11
  182. data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
  183. data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +7 -5
  184. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +94 -63
  185. data/lib/bundler/vendor/thor/lib/thor/error.rb +3 -3
  186. data/lib/bundler/vendor/thor/lib/thor/group.rb +13 -13
  187. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +4 -5
  188. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
  189. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
  190. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +16 -16
  191. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +42 -21
  192. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +13 -10
  193. data/lib/bundler/vendor/thor/lib/thor/runner.rb +31 -29
  194. data/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
  195. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +49 -33
  196. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  197. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +4 -4
  198. data/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
  199. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  200. data/lib/bundler/vendored_fileutils.rb +9 -0
  201. data/lib/bundler/vendored_molinillo.rb +1 -0
  202. data/lib/bundler/vendored_persistent.rb +43 -3
  203. data/lib/bundler/vendored_thor.rb +6 -2
  204. data/lib/bundler/version.rb +19 -2
  205. data/lib/bundler/version_ranges.rb +76 -0
  206. data/lib/bundler/vlad.rb +5 -0
  207. data/lib/bundler/worker.rb +30 -6
  208. data/lib/bundler/yaml_serializer.rb +4 -4
  209. data/man/bundle-add.1 +58 -0
  210. data/man/bundle-add.1.txt +52 -0
  211. data/man/bundle-add.ronn +40 -0
  212. data/{lib/bundler/man/bundle-binstubs → man/bundle-binstubs.1} +11 -1
  213. data/man/bundle-binstubs.1.txt +48 -0
  214. data/man/bundle-binstubs.ronn +15 -1
  215. data/man/bundle-check.1 +31 -0
  216. data/man/bundle-check.1.txt +33 -0
  217. data/man/bundle-check.ronn +26 -0
  218. data/man/bundle-clean.1 +24 -0
  219. data/man/bundle-clean.1.txt +26 -0
  220. data/man/bundle-clean.ronn +18 -0
  221. data/man/bundle-config.1 +497 -0
  222. data/man/bundle-config.1.txt +529 -0
  223. data/man/bundle-config.ronn +233 -61
  224. data/man/bundle-doctor.1 +44 -0
  225. data/man/bundle-doctor.1.txt +44 -0
  226. data/man/bundle-doctor.ronn +33 -0
  227. data/{lib/bundler/man/bundle-exec → man/bundle-exec.1} +6 -3
  228. data/man/bundle-exec.1.txt +178 -0
  229. data/man/bundle-exec.ronn +10 -3
  230. data/{lib/bundler/man/bundle-gem → man/bundle-gem.1} +4 -4
  231. data/man/bundle-gem.1.txt +91 -0
  232. data/man/bundle-gem.ronn +3 -2
  233. data/man/bundle-info.1 +20 -0
  234. data/man/bundle-info.1.txt +21 -0
  235. data/man/bundle-info.ronn +17 -0
  236. data/man/bundle-init.1 +25 -0
  237. data/man/bundle-init.1.txt +34 -0
  238. data/man/bundle-init.ronn +29 -0
  239. data/man/bundle-inject.1 +33 -0
  240. data/man/bundle-inject.1.txt +32 -0
  241. data/man/bundle-inject.ronn +22 -0
  242. data/{lib/bundler/man/bundle-install → man/bundle-install.1} +32 -29
  243. data/man/bundle-install.1.txt +396 -0
  244. data/man/bundle-install.ronn +45 -36
  245. data/man/bundle-list.1 +50 -0
  246. data/man/bundle-list.1.txt +43 -0
  247. data/man/bundle-list.ronn +33 -0
  248. data/{lib/bundler/man/bundle-lock → man/bundle-lock.1} +43 -2
  249. data/man/bundle-lock.1.txt +93 -0
  250. data/man/bundle-lock.ronn +47 -0
  251. data/man/bundle-open.1 +32 -0
  252. data/man/bundle-open.1.txt +29 -0
  253. data/man/bundle-open.ronn +19 -0
  254. data/man/bundle-outdated.1 +155 -0
  255. data/man/bundle-outdated.1.txt +131 -0
  256. data/man/bundle-outdated.ronn +111 -0
  257. data/{lib/bundler/man/bundle-package → man/bundle-package.1} +6 -3
  258. data/man/bundle-package.1.txt +79 -0
  259. data/man/bundle-package.ronn +7 -2
  260. data/{lib/bundler/man/bundle-platform → man/bundle-platform.1} +1 -1
  261. data/man/bundle-platform.1.txt +57 -0
  262. data/man/bundle-pristine.1 +34 -0
  263. data/man/bundle-pristine.1.txt +44 -0
  264. data/man/bundle-pristine.ronn +34 -0
  265. data/man/bundle-remove.1 +31 -0
  266. data/man/bundle-remove.1.txt +34 -0
  267. data/man/bundle-remove.ronn +23 -0
  268. data/man/bundle-show.1 +23 -0
  269. data/man/bundle-show.1.txt +27 -0
  270. data/man/bundle-show.ronn +21 -0
  271. data/man/bundle-update.1 +394 -0
  272. data/man/bundle-update.1.txt +391 -0
  273. data/man/bundle-update.ronn +172 -16
  274. data/man/bundle-viz.1 +39 -0
  275. data/man/bundle-viz.1.txt +39 -0
  276. data/man/bundle-viz.ronn +30 -0
  277. data/{lib/bundler/man/bundle → man/bundle.1} +44 -28
  278. data/man/bundle.1.txt +116 -0
  279. data/man/bundle.ronn +39 -27
  280. data/{lib/bundler/man → man}/gemfile.5 +67 -84
  281. data/man/gemfile.5.ronn +77 -55
  282. data/man/gemfile.5.txt +653 -0
  283. data/man/index.txt +25 -8
  284. metadata +118 -58
  285. data/.codeclimate.yml +0 -25
  286. data/.gitignore +0 -16
  287. data/.rspec +0 -3
  288. data/.rubocop.yml +0 -128
  289. data/.rubocop_todo.yml +0 -248
  290. data/.travis.yml +0 -108
  291. data/CODE_OF_CONDUCT.md +0 -42
  292. data/CONTRIBUTING.md +0 -36
  293. data/DEVELOPMENT.md +0 -148
  294. data/ISSUES.md +0 -100
  295. data/Rakefile +0 -333
  296. data/bin/rake +0 -19
  297. data/bin/rspec +0 -15
  298. data/bin/rubocop +0 -17
  299. data/bin/with_rubygems +0 -39
  300. data/lib/bundler/man/bundle-binstubs.txt +0 -33
  301. data/lib/bundler/man/bundle-config +0 -254
  302. data/lib/bundler/man/bundle-config.txt +0 -282
  303. data/lib/bundler/man/bundle-exec.txt +0 -171
  304. data/lib/bundler/man/bundle-gem.txt +0 -90
  305. data/lib/bundler/man/bundle-install.txt +0 -385
  306. data/lib/bundler/man/bundle-lock.txt +0 -52
  307. data/lib/bundler/man/bundle-package.txt +0 -74
  308. data/lib/bundler/man/bundle-platform.txt +0 -57
  309. data/lib/bundler/man/bundle-update +0 -221
  310. data/lib/bundler/man/bundle-update.txt +0 -227
  311. data/lib/bundler/man/bundle.txt +0 -104
  312. data/lib/bundler/man/gemfile.5.txt +0 -636
  313. data/lib/bundler/postit_trampoline.rb +0 -68
  314. data/lib/bundler/vendor/compact_index_client/lib/compact_index_client.rb +0 -79
  315. data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/cache.rb +0 -112
  316. data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/updater.rb +0 -80
  317. data/lib/bundler/vendor/compact_index_client/lib/compact_index_client/version.rb +0 -4
  318. data/lib/bundler/vendor/postit/lib/postit.rb +0 -15
  319. data/lib/bundler/vendor/postit/lib/postit/environment.rb +0 -44
  320. data/lib/bundler/vendor/postit/lib/postit/installer.rb +0 -28
  321. data/lib/bundler/vendor/postit/lib/postit/parser.rb +0 -21
  322. data/lib/bundler/vendor/postit/lib/postit/setup.rb +0 -12
  323. data/lib/bundler/vendor/postit/lib/postit/version.rb +0 -3
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
- if ENV["BUNDLE_ENABLE_TRAMPOLINE"]
3
-
4
- module BundlerVendoredPostIt; end
5
- require "bundler/vendor/postit/lib/postit"
6
- require "rubygems"
7
-
8
- environment = BundlerVendoredPostIt::PostIt::Environment.new([])
9
- version = Gem::Requirement.new(environment.bundler_version)
10
-
11
- installed_version =
12
- if defined?(Bundler::VERSION)
13
- Bundler::VERSION
14
- else
15
- File.read(File.expand_path("../version.rb", __FILE__)) =~ /VERSION = "(.+)"/
16
- $1
17
- end
18
- installed_version &&= Gem::Version.new(installed_version)
19
-
20
- if !version.satisfied_by?(installed_version)
21
- begin
22
- installer = BundlerVendoredPostIt::PostIt::Installer.new(version)
23
- unless installer.installed?
24
- warn "Installing locked Bundler version #{version.to_s.gsub("= ", "")}..."
25
- installer.install!
26
- end
27
- rescue => e
28
- abort <<-EOS.strip
29
- Installing the inferred bundler version (#{version}) failed.
30
- If you'd like to update to the current bundler version (#{installed_version}) in this project, run `bundle update --bundler`.
31
- The error was: #{e}
32
- EOS
33
- end
34
-
35
- if deleted_spec = Gem.loaded_specs.delete("bundler")
36
- deleted_spec.full_require_paths.each {|path| $:.delete(path) }
37
- else
38
- $:.delete(File.expand_path("../..", __FILE__))
39
- end
40
- gem "bundler", version
41
- else
42
- begin
43
- gem "bundler", version
44
- rescue LoadError
45
- $:.unshift(File.expand_path("../..", __FILE__))
46
- end
47
- end
48
-
49
- running_version = begin
50
- require "bundler/version"
51
- Bundler::VERSION
52
- rescue LoadError, NameError
53
- nil
54
- end
55
-
56
- ENV["BUNDLE_POSTIT_TRAMPOLINING_VERSION"] = installed_version.to_s
57
-
58
- if !Gem::Requirement.new(">= 1.13.pre".dup).satisfied_by?(Gem::Version.new(running_version)) && (ARGV.empty? || ARGV.any? {|a| %w(install i).include? a })
59
- puts <<-WARN.strip
60
- You're running Bundler #{installed_version} but this project uses #{running_version}. To update, run `bundle update --bundler`.
61
- WARN
62
- end
63
-
64
- if !Gem::Version.correct?(running_version.to_s) || !version.satisfied_by?(Gem::Version.create(running_version))
65
- abort "The running bundler (#{running_version}) does not match the required `#{version}`"
66
- end
67
-
68
- end # unless ENV["BUNDLE_ENABLE_TRAMPOLINE"]
@@ -1,79 +0,0 @@
1
- # frozen_string_literal: true
2
- require "pathname"
3
- require "set"
4
-
5
- class Bundler::CompactIndexClient
6
- class Error < StandardError; end
7
-
8
- require "bundler/vendor/compact_index_client/lib/compact_index_client/cache"
9
- require "bundler/vendor/compact_index_client/lib/compact_index_client/updater"
10
- require "bundler/vendor/compact_index_client/lib/compact_index_client/version"
11
-
12
- attr_reader :directory
13
-
14
- # @return [Lambda] A lambda that takes an array of inputs and a block, and
15
- # maps the inputs with the block in parallel.
16
- #
17
- attr_accessor :in_parallel
18
-
19
- def initialize(directory, fetcher)
20
- @directory = Pathname.new(directory)
21
- @updater = Updater.new(fetcher)
22
- @cache = Cache.new(@directory)
23
- @endpoints = Set.new
24
- @info_checksums_by_name = {}
25
- @parsed_checksums = false
26
- @in_parallel = lambda do |inputs, &blk|
27
- inputs.map(&blk)
28
- end
29
- end
30
-
31
- def names
32
- update(@cache.names_path, "names")
33
- @cache.names
34
- end
35
-
36
- def versions
37
- update(@cache.versions_path, "versions")
38
- versions, @info_checksums_by_name = @cache.versions
39
- versions
40
- end
41
-
42
- def dependencies(names)
43
- in_parallel.call(names) do |name|
44
- update_info(name)
45
- @cache.dependencies(name).map {|d| d.unshift(name) }
46
- end.flatten(1)
47
- end
48
-
49
- def spec(name, version, platform = nil)
50
- update_info(name)
51
- @cache.specific_dependency(name, version, platform)
52
- end
53
-
54
- def update_and_parse_checksums!
55
- return @info_checksums_by_name if @parsed_checksums
56
- update(@cache.versions_path, "versions")
57
- @info_checksums_by_name = @cache.checksums
58
- @parsed_checksums = true
59
- end
60
-
61
- private
62
-
63
- def update(local_path, remote_path)
64
- return unless @endpoints.add?(remote_path)
65
- @updater.update(local_path, url(remote_path))
66
- end
67
-
68
- def update_info(name)
69
- path = @cache.info_path(name)
70
- checksum = @updater.checksum_for_file(path)
71
- return unless existing = @info_checksums_by_name[name]
72
- return if checksum == existing
73
- update(path, "info/#{name}")
74
- end
75
-
76
- def url(path)
77
- path
78
- end
79
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
- require "digest/md5"
3
- class Bundler::CompactIndexClient
4
- class Cache
5
- attr_reader :directory
6
-
7
- def initialize(directory)
8
- @directory = Pathname.new(directory).expand_path
9
- info_roots.each {|dir| FileUtils.mkdir_p(dir) }
10
- end
11
-
12
- def names
13
- lines(names_path)
14
- end
15
-
16
- def names_path
17
- directory.join("names")
18
- end
19
-
20
- def versions
21
- versions_by_name = Hash.new {|hash, key| hash[key] = [] }
22
- info_checksums_by_name = {}
23
-
24
- lines(versions_path).each do |line|
25
- name, versions_string, info_checksum = line.split(" ", 3)
26
- info_checksums_by_name[name] = info_checksum || ""
27
- versions_string.split(",").each do |version|
28
- if version.start_with?("-")
29
- version = version[1..-1].split("-", 2).unshift(name)
30
- versions_by_name[name].delete(version)
31
- else
32
- version = version.split("-", 2).unshift(name)
33
- versions_by_name[name] << version
34
- end
35
- end
36
- end
37
-
38
- [versions_by_name, info_checksums_by_name]
39
- end
40
-
41
- def versions_path
42
- directory.join("versions")
43
- end
44
-
45
- def checksums
46
- checksums = {}
47
-
48
- lines(versions_path).each do |line|
49
- name, _, checksum = line.split(" ", 3)
50
- checksums[name] = checksum
51
- end
52
-
53
- checksums
54
- end
55
-
56
- def dependencies(name)
57
- lines(info_path(name)).map do |line|
58
- parse_gem(line)
59
- end
60
- end
61
-
62
- def info_path(name)
63
- name = name.to_s
64
- if name =~ /[^a-z0-9_-]/
65
- name += "-#{Digest::MD5.hexdigest(name).downcase}"
66
- info_roots.last.join(name)
67
- else
68
- info_roots.first.join(name)
69
- end
70
- end
71
-
72
- def specific_dependency(name, version, platform)
73
- pattern = [version, platform].compact.join("-")
74
- return nil if pattern.empty?
75
-
76
- gem_lines = info_path(name).read
77
- gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
78
- gem_line ? parse_gem(gem_line) : nil
79
- end
80
-
81
- private
82
-
83
- def lines(path)
84
- return [] unless path.file?
85
- lines = path.read.split("\n")
86
- header = lines.index("---")
87
- lines = header ? lines[header + 1..-1] : lines
88
- end
89
-
90
- def parse_gem(string)
91
- version_and_platform, rest = string.split(" ", 2)
92
- version, platform = version_and_platform.split("-", 2)
93
- dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
94
- dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
95
- requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
96
- [version, platform, dependencies, requirements]
97
- end
98
-
99
- def parse_dependency(string)
100
- dependency = string.split(":")
101
- dependency[-1] = dependency[-1].split("&") if dependency.size > 1
102
- dependency
103
- end
104
-
105
- def info_roots
106
- [
107
- directory.join("info"),
108
- directory.join("info-special-characters"),
109
- ]
110
- end
111
- end
112
- end
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
- require "fileutils"
3
- require "stringio"
4
- require "tmpdir"
5
- require "zlib"
6
-
7
- class Bundler::CompactIndexClient
8
- class Updater
9
- class MisMatchedChecksumError < Error
10
- def initialize(path, server_checksum, local_checksum)
11
- @path = path
12
- @server_checksum = server_checksum
13
- @local_checksum = local_checksum
14
- end
15
-
16
- def message
17
- "The checksum of /#{@path} does not match the checksum provided by the server! Something is wrong " \
18
- "(local checksum is #{@local_checksum.inspect}, was expecting #{@server_checksum.inspect})."
19
- end
20
- end
21
-
22
- def initialize(fetcher)
23
- @fetcher = fetcher
24
- end
25
-
26
- def update(local_path, remote_path, retrying = nil)
27
- headers = {}
28
-
29
- Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
30
- local_temp_path = Pathname.new(local_temp_dir).join(local_path.basename)
31
-
32
- # first try to fetch any new bytes on the existing file
33
- if retrying.nil? && local_path.file?
34
- FileUtils.cp local_path, local_temp_path
35
- headers["If-None-Match"] = etag_for(local_temp_path)
36
- headers["Range"] = "bytes=#{local_temp_path.size}-"
37
- else
38
- # Fastly ignores Range when Accept-Encoding: gzip is set
39
- headers["Accept-Encoding"] = "gzip"
40
- end
41
-
42
- response = @fetcher.call(remote_path, headers)
43
- return if response.is_a?(Net::HTTPNotModified)
44
-
45
- content = response.body
46
- if response["Content-Encoding"] == "gzip"
47
- content = Zlib::GzipReader.new(StringIO.new(content)).read
48
- end
49
-
50
- mode = response.is_a?(Net::HTTPPartialContent) ? "a" : "w"
51
- local_temp_path.open(mode) {|f| f << content }
52
-
53
- response_etag = response["ETag"].gsub(%r{\AW/}, "")
54
- if etag_for(local_temp_path) == response_etag
55
- FileUtils.mv(local_temp_path, local_path)
56
- return
57
- end
58
-
59
- if retrying.nil?
60
- update(local_path, remote_path, :retrying)
61
- else
62
- raise MisMatchedChecksumError.new(remote_path, response_etag, etag_for(local_temp_path))
63
- end
64
- end
65
- end
66
-
67
- def etag_for(path)
68
- sum = checksum_for_file(path)
69
- sum ? %("#{sum}") : nil
70
- end
71
-
72
- def checksum_for_file(path)
73
- return nil unless path.file?
74
- # This must use IO.read instead of Digest.file().hexdigest
75
- # because we need to preserve \n line endings on windows when calculating
76
- # the checksum
77
- Digest::MD5.hexdigest(IO.read(path))
78
- end
79
- end
80
- end
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
- class Bundler::CompactIndexClient
3
- VERSION = "0.1.0".freeze
4
- end
@@ -1,15 +0,0 @@
1
- require 'bundler/vendor/postit/lib/postit/environment'
2
- require 'bundler/vendor/postit/lib/postit/installer'
3
- require 'bundler/vendor/postit/lib/postit/parser'
4
- require 'bundler/vendor/postit/lib/postit/version'
5
- require 'rubygems'
6
-
7
- module BundlerVendoredPostIt::PostIt
8
- def self.setup
9
- load File.expand_path('../postit/setup.rb', __FILE__)
10
- end
11
-
12
- def self.bundler_version
13
- defined?(Bundler::VERSION) && Bundler::VERSION
14
- end
15
- end
@@ -1,44 +0,0 @@
1
- require 'bundler/vendor/postit/lib/postit/parser'
2
-
3
- module BundlerVendoredPostIt::PostIt
4
- class Environment
5
- def initialize(argv)
6
- @argv = argv
7
- end
8
-
9
- def env_var_version
10
- ENV['BUNDLER_VERSION']
11
- end
12
-
13
- def cli_arg_version
14
- return unless str = @argv.first
15
- str = str.dup.force_encoding('BINARY') if str.respond_to?(:force_encoding)
16
- if Gem::Version.correct?(str)
17
- @argv.shift
18
- str
19
- end
20
- end
21
-
22
- def gemfile
23
- ENV['BUNDLE_GEMFILE'] || 'Gemfile'
24
- end
25
-
26
- def lockfile
27
- File.expand_path case File.basename(gemfile)
28
- when 'gems.rb' then gemfile.sub(/\.rb$/, gemfile)
29
- else "#{gemfile}.lock"
30
- end
31
- end
32
-
33
- def lockfile_version
34
- BundlerVendoredPostIt::PostIt::Parser.new(lockfile).parse
35
- end
36
-
37
- def bundler_version
38
- @bundler_version ||= begin
39
- env_var_version || cli_arg_version ||
40
- lockfile_version || "#{Gem::Requirement.default}.a"
41
- end
42
- end
43
- end
44
- end
@@ -1,28 +0,0 @@
1
- module BundlerVendoredPostIt::PostIt
2
- class Installer
3
- def initialize(bundler_version)
4
- @bundler_version = bundler_version
5
- end
6
-
7
- def installed?
8
- if Gem::Specification.respond_to?(:find_by_name)
9
- !Gem::Specification.find_by_name('bundler', @bundler_version).nil?
10
- else
11
- requirement = Gem::Requirement.new(@bundler_version)
12
- Gem.source_index.gems.values.any? do |s|
13
- s.name == 'bundler' && requirement.satisfied_by?(s.version)
14
- end
15
- end
16
- rescue LoadError
17
- false
18
- end
19
-
20
- def install!
21
- return if installed?
22
- require 'rubygems/dependency_installer'
23
- installer = Gem::DependencyInstaller.new
24
- installer.install('bundler', @bundler_version)
25
- installer.installed_gems
26
- end
27
- end
28
- end
@@ -1,21 +0,0 @@
1
- require 'rubygems'
2
-
3
- module BundlerVendoredPostIt::PostIt
4
- class Parser
5
- def initialize(file)
6
- @file = file
7
- end
8
-
9
- BUNDLED_WITH =
10
- /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
11
-
12
- def parse
13
- return unless lockfile = File.file?(@file) && File.read(@file)
14
- if lockfile =~ BUNDLED_WITH
15
- Regexp.last_match(1)
16
- else
17
- '< 1.10'
18
- end
19
- end
20
- end
21
- end