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
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ module VersionRanges
5
+ NEq = Struct.new(:version)
6
+ ReqR = Struct.new(:left, :right)
7
+ class ReqR
8
+ Endpoint = Struct.new(:version, :inclusive)
9
+ def to_s
10
+ "#{left.inclusive ? "[" : "("}#{left.version}, #{right.version}#{right.inclusive ? "]" : ")"}"
11
+ end
12
+ INFINITY = Object.new.freeze
13
+ ZERO = Gem::Version.new("0.a")
14
+
15
+ def cover?(v)
16
+ return false if left.inclusive && left.version > v
17
+ return false if !left.inclusive && left.version >= v
18
+
19
+ if right.version != INFINITY
20
+ return false if right.inclusive && right.version < v
21
+ return false if !right.inclusive && right.version <= v
22
+ end
23
+
24
+ true
25
+ end
26
+
27
+ def empty?
28
+ left.version == right.version && !(left.inclusive && right.inclusive)
29
+ end
30
+
31
+ def single?
32
+ left.version == right.version
33
+ end
34
+
35
+ UNIVERSAL = ReqR.new(ReqR::Endpoint.new(Gem::Version.new("0.a"), true), ReqR::Endpoint.new(ReqR::INFINITY, false)).freeze
36
+ end
37
+
38
+ def self.for_many(requirements)
39
+ requirements = requirements.map(&:requirements).flatten(1).map {|r| r.join(" ") }
40
+ requirements << ">= 0.a" if requirements.empty?
41
+ requirement = Gem::Requirement.new(requirements)
42
+ self.for(requirement)
43
+ end
44
+
45
+ def self.for(requirement)
46
+ ranges = requirement.requirements.map do |op, v|
47
+ case op
48
+ when "=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v, true))
49
+ when "!=" then NEq.new(v)
50
+ when ">=" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(ReqR::INFINITY, false))
51
+ when ">" then ReqR.new(ReqR::Endpoint.new(v, false), ReqR::Endpoint.new(ReqR::INFINITY, false))
52
+ when "<" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, false))
53
+ when "<=" then ReqR.new(ReqR::Endpoint.new(ReqR::ZERO, true), ReqR::Endpoint.new(v, true))
54
+ when "~>" then ReqR.new(ReqR::Endpoint.new(v, true), ReqR::Endpoint.new(v.bump, false))
55
+ else raise "unknown version op #{op} in requirement #{requirement}"
56
+ end
57
+ end.uniq
58
+ ranges, neqs = ranges.partition {|r| !r.is_a?(NEq) }
59
+
60
+ [ranges.sort_by {|range| [range.left.version, range.left.inclusive ? 0 : 1] }, neqs.map(&:version)]
61
+ end
62
+
63
+ def self.empty?(ranges, neqs)
64
+ !ranges.reduce(ReqR::UNIVERSAL) do |last_range, curr_range|
65
+ next false unless last_range
66
+ next false if curr_range.single? && neqs.include?(curr_range.left.version)
67
+ next curr_range if last_range.right.version == ReqR::INFINITY
68
+ case last_range.right.version <=> curr_range.left.version
69
+ when 1 then next curr_range
70
+ when 0 then next(last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version) && curr_range)
71
+ when -1 then next false
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
data/lib/bundler/vlad.rb CHANGED
@@ -1,4 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require "bundler/shared_helpers"
4
+ Bundler::SharedHelpers.major_deprecation 2,
5
+ "The Bundler task for Vlad"
6
+
2
7
  # Vlad task for Bundler.
3
8
  #
4
9
  # Add "require 'bundler/vlad'" in your Vlad deploy.rb, and
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "thread"
3
4
 
4
5
  module Bundler
@@ -25,18 +26,16 @@ module Bundler
25
26
  @request_queue = Queue.new
26
27
  @response_queue = Queue.new
27
28
  @func = func
28
- @threads = Array.new(size) do |i|
29
- Thread.start { process_queue(i) }.tap do |thread|
30
- thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
31
- end
32
- end
33
- trap("INT") { abort_threads }
29
+ @size = size
30
+ @threads = nil
31
+ SharedHelpers.trap("INT") { abort_threads }
34
32
  end
35
33
 
36
34
  # Enqueue a request to be executed in the worker pool
37
35
  #
38
36
  # @param obj [String] mostly it is name of spec that should be downloaded
39
37
  def enq(obj)
38
+ create_threads unless @threads
40
39
  @request_queue.enq obj
41
40
  end
42
41
 
@@ -70,13 +69,38 @@ module Bundler
70
69
  # Stop the worker threads by sending a poison object down the request queue
71
70
  # so as worker threads after retrieving it, shut themselves down
72
71
  def stop_threads
72
+ return unless @threads
73
73
  @threads.each { @request_queue.enq POISON }
74
74
  @threads.each(&:join)
75
+ @threads = nil
75
76
  end
76
77
 
77
78
  def abort_threads
79
+ return unless @threads
80
+ Bundler.ui.debug("\n#{caller.join("\n")}")
78
81
  @threads.each(&:exit)
79
82
  exit 1
80
83
  end
84
+
85
+ def create_threads
86
+ creation_errors = []
87
+
88
+ @threads = Array.new(@size) do |i|
89
+ begin
90
+ Thread.start { process_queue(i) }.tap do |thread|
91
+ thread.name = "#{name} Worker ##{i}" if thread.respond_to?(:name=)
92
+ end
93
+ rescue ThreadError => e
94
+ creation_errors << e
95
+ nil
96
+ end
97
+ end.compact
98
+
99
+ return if creation_errors.empty?
100
+
101
+ message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}"
102
+ raise ThreadCreationError, message if @threads.empty?
103
+ Bundler.ui.info message
104
+ end
81
105
  end
82
106
  end
@@ -37,7 +37,7 @@ module Bundler
37
37
  HASH_REGEX = /
38
38
  ^
39
39
  ([ ]*) # indentations
40
- (.*) # key
40
+ (.+) # key
41
41
  (?::(?=(?:\s|$))) # : (without the lookahead the #key includes this when : is present in value)
42
42
  [ ]?
43
43
  (?: !\s)? # optional exclamation mark found with ruby 1.9.3
@@ -52,12 +52,12 @@ module Bundler
52
52
  stack = [res]
53
53
  last_hash = nil
54
54
  last_empty_key = nil
55
- str.split("\n").each do |line|
55
+ str.split(/\r?\n/).each do |line|
56
56
  if match = HASH_REGEX.match(line)
57
- indent, key, _, val = match.captures
57
+ indent, key, quote, val = match.captures
58
58
  key = convert_to_backward_compatible_key(key)
59
59
  depth = indent.scan(/ /).length
60
- if val.empty?
60
+ if quote.empty? && val.empty?
61
61
  new_hash = {}
62
62
  stack[depth][key] = new_hash
63
63
  stack[depth + 1] = new_hash
data/man/bundle-add.1 ADDED
@@ -0,0 +1,58 @@
1
+ .\" generated with Ronn/v0.7.3
2
+ .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
+ .
4
+ .TH "BUNDLE\-ADD" "1" "December 2018" "" ""
5
+ .
6
+ .SH "NAME"
7
+ \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
8
+ .
9
+ .SH "SYNOPSIS"
10
+ \fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
11
+ .
12
+ .SH "DESCRIPTION"
13
+ Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
14
+ .
15
+ .P
16
+ Example:
17
+ .
18
+ .P
19
+ bundle add rails
20
+ .
21
+ .P
22
+ bundle add rails \-\-version "< 3\.0, > 1\.1"
23
+ .
24
+ .P
25
+ bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"
26
+ .
27
+ .P
28
+ bundle add rails \-\-skip\-install
29
+ .
30
+ .P
31
+ bundle add rails \-\-group "development, test"
32
+ .
33
+ .SH "OPTIONS"
34
+ .
35
+ .TP
36
+ \fB\-\-version\fR, \fB\-v\fR
37
+ Specify version requirements(s) for the added gem\.
38
+ .
39
+ .TP
40
+ \fB\-\-group\fR, \fB\-g\fR
41
+ Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
42
+ .
43
+ .TP
44
+ \fB\-\-source\fR, , \fB\-s\fR
45
+ Specify the source for the added gem\.
46
+ .
47
+ .TP
48
+ \fB\-\-skip\-install\fR
49
+ Adds the gem to the Gemfile but does not install it\.
50
+ .
51
+ .TP
52
+ \fB\-\-optimistic\fR
53
+ Adds optimistic declaration of version
54
+ .
55
+ .TP
56
+ \fB\-\-strict\fR
57
+ Adds strict declaration of version
58
+
@@ -0,0 +1,52 @@
1
+ BUNDLE-ADD(1) BUNDLE-ADD(1)
2
+
3
+
4
+
5
+ NAME
6
+ bundle-add - Add gem to the Gemfile and run bundle install
7
+
8
+ SYNOPSIS
9
+ bundle add GEM_NAME [--group=GROUP] [--version=VERSION]
10
+ [--source=SOURCE] [--skip-install] [--strict] [--optimistic]
11
+
12
+ DESCRIPTION
13
+ Adds the named gem to the Gemfile and run bundle install. bundle
14
+ install can be avoided by using the flag --skip-install.
15
+
16
+ Example:
17
+
18
+ bundle add rails
19
+
20
+ bundle add rails --version "< 3.0, > 1.1"
21
+
22
+ bundle add rails --version "~> 5.0.0" --source "https://gems.exam-
23
+ ple.com" --group "development"
24
+
25
+ bundle add rails --skip-install
26
+
27
+ bundle add rails --group "development, test"
28
+
29
+ OPTIONS
30
+ --version, -v
31
+ Specify version requirements(s) for the added gem.
32
+
33
+ --group, -g
34
+ Specify the group(s) for the added gem. Multiple groups should
35
+ be separated by commas.
36
+
37
+ --source, , -s
38
+ Specify the source for the added gem.
39
+
40
+ --skip-install
41
+ Adds the gem to the Gemfile but does not install it.
42
+
43
+ --optimistic
44
+ Adds optimistic declaration of version
45
+
46
+ --strict
47
+ Adds strict declaration of version
48
+
49
+
50
+
51
+
52
+ December 2018 BUNDLE-ADD(1)
@@ -0,0 +1,40 @@
1
+ bundle-add(1) -- Add gem to the Gemfile and run bundle install
2
+ ================================================================
3
+
4
+ ## SYNOPSIS
5
+
6
+ `bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--skip-install] [--strict] [--optimistic]
7
+
8
+ ## DESCRIPTION
9
+ Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`.
10
+
11
+ Example:
12
+
13
+ bundle add rails
14
+
15
+ bundle add rails --version "< 3.0, > 1.1"
16
+
17
+ bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"
18
+
19
+ bundle add rails --skip-install
20
+
21
+ bundle add rails --group "development, test"
22
+
23
+ ## OPTIONS
24
+ * `--version`, `-v`:
25
+ Specify version requirements(s) for the added gem.
26
+
27
+ * `--group`, `-g`:
28
+ Specify the group(s) for the added gem. Multiple groups should be separated by commas.
29
+
30
+ * `--source`, , `-s`:
31
+ Specify the source for the added gem.
32
+
33
+ * `--skip-install`:
34
+ Adds the gem to the Gemfile but does not install it.
35
+
36
+ * `--optimistic`:
37
+ Adds optimistic declaration of version
38
+
39
+ * `--strict`:
40
+ Adds strict declaration of version
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "BUNDLE\-BINSTUBS" "1" "October 2016" "" ""
4
+ .TH "BUNDLE\-BINSTUBS" "1" "November 2018" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
@@ -10,6 +10,12 @@
10
10
  \fBbundle binstubs\fR \fIGEM_NAME\fR [\-\-force] [\-\-path PATH] [\-\-standalone]
11
11
  .
12
12
  .SH "DESCRIPTION"
13
+ Binstubs are scripts that wrap around executables\. Bundler creates a small Ruby file (a binstub) that loads Bundler, runs the command, and puts it into \fBbin/\fR\. Binstubs are a shortcut\-or alternative\- to always using \fBbundle exec\fR\. This gives you a file that can by run directly, and one that will always run the correct gem version used by the application\.
14
+ .
15
+ .P
16
+ For example, if you run \fBbundle binstubs rspec\-core\fR, Bundler will create the file \fBbin/rspec\fR\. That file will contain enough code to load Bundler, tell it to load the bundled gems, and then run rspec\.
17
+ .
18
+ .P
13
19
  This command generates binstubs for executables in \fBGEM_NAME\fR\. Binstubs are put into \fBbin\fR, or the \fB\-\-path\fR directory if one has been set\. Calling binstubs with [GEM [GEM]] will create binstubs for all given gems\.
14
20
  .
15
21
  .SH "OPTIONS"
@@ -26,5 +32,9 @@ The location to install the specified binstubs to\. This defaults to \fBbin\fR\.
26
32
  \fB\-\-standalone\fR
27
33
  Makes binstubs that can work without depending on Rubygems or Bundler at runtime\.
28
34
  .
35
+ .TP
36
+ \fB\-\-shebang\fR
37
+ Specify a different shebang executable name than the default (default \'ruby\')
38
+ .
29
39
  .SH "BUNDLE INSTALL \-\-BINSTUBS"
30
40
  To create binstubs for all the gems in the bundle you can use the \fB\-\-binstubs\fR flag in bundle install(1) \fIbundle\-install\.1\.html\fR\.
@@ -0,0 +1,48 @@
1
+ BUNDLE-BINSTUBS(1) BUNDLE-BINSTUBS(1)
2
+
3
+
4
+
5
+ NAME
6
+ bundle-binstubs - Install the binstubs of the listed gems
7
+
8
+ SYNOPSIS
9
+ bundle binstubs GEM_NAME [--force] [--path PATH] [--standalone]
10
+
11
+ DESCRIPTION
12
+ Binstubs are scripts that wrap around executables. Bundler creates a
13
+ small Ruby file (a binstub) that loads Bundler, runs the command, and
14
+ puts it into bin/. Binstubs are a shortcut-or alternative- to always
15
+ using bundle exec. This gives you a file that can by run directly, and
16
+ one that will always run the correct gem version used by the applica-
17
+ tion.
18
+
19
+ For example, if you run bundle binstubs rspec-core, Bundler will create
20
+ the file bin/rspec. That file will contain enough code to load Bundler,
21
+ tell it to load the bundled gems, and then run rspec.
22
+
23
+ This command generates binstubs for executables in GEM_NAME. Binstubs
24
+ are put into bin, or the --path directory if one has been set. Calling
25
+ binstubs with [GEM [GEM]] will create binstubs for all given gems.
26
+
27
+ OPTIONS
28
+ --force
29
+ Overwrite existing binstubs if they exist.
30
+
31
+ --path The location to install the specified binstubs to. This defaults
32
+ to bin.
33
+
34
+ --standalone
35
+ Makes binstubs that can work without depending on Rubygems or
36
+ Bundler at runtime.
37
+
38
+ --shebang
39
+ Specify a different shebang executable name than the default
40
+ (default 'ruby')
41
+
42
+ BUNDLE INSTALL --BINSTUBS
43
+ To create binstubs for all the gems in the bundle you can use the
44
+ --binstubs flag in bundle install(1) bundle-install.1.html.
45
+
46
+
47
+
48
+ November 2018 BUNDLE-BINSTUBS(1)
@@ -7,6 +7,17 @@ bundle-binstubs(1) -- Install the binstubs of the listed gems
7
7
 
8
8
  ## DESCRIPTION
9
9
 
10
+ Binstubs are scripts that wrap around executables. Bundler creates a
11
+ small Ruby file (a binstub) that loads Bundler, runs the command,
12
+ and puts it into `bin/`. Binstubs are a shortcut-or alternative-
13
+ to always using `bundle exec`. This gives you a file that can by run
14
+ directly, and one that will always run the correct gem version
15
+ used by the application.
16
+
17
+ For example, if you run `bundle binstubs rspec-core`, Bundler will create
18
+ the file `bin/rspec`. That file will contain enough code to load Bundler,
19
+ tell it to load the bundled gems, and then run rspec.
20
+
10
21
  This command generates binstubs for executables in `GEM_NAME`.
11
22
  Binstubs are put into `bin`, or the `--path` directory if one has been set.
12
23
  Calling binstubs with [GEM [GEM]] will create binstubs for all given gems.
@@ -23,7 +34,10 @@ Calling binstubs with [GEM [GEM]] will create binstubs for all given gems.
23
34
  Makes binstubs that can work without depending on Rubygems or Bundler at
24
35
  runtime.
25
36
 
37
+ * `--shebang`:
38
+ Specify a different shebang executable name than the default (default 'ruby')
39
+
26
40
  ## BUNDLE INSTALL --BINSTUBS
27
41
 
28
42
  To create binstubs for all the gems in the bundle you can use the `--binstubs`
29
- flag in [bundle install(1)][bundle-install].
43
+ flag in [bundle install(1)](bundle-install.1.html).