bundler 2.0.0.pre.1 → 2.1.0.pre.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 (230) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +774 -574
  3. data/LICENSE.md +18 -19
  4. data/README.md +9 -8
  5. data/bundler.gemspec +12 -23
  6. data/exe/bundle +19 -3
  7. data/lib/bundler.rb +203 -87
  8. data/lib/bundler/build_metadata.rb +14 -7
  9. data/lib/bundler/capistrano.rb +5 -5
  10. data/lib/bundler/cli.rb +181 -143
  11. data/lib/bundler/cli/add.rb +28 -16
  12. data/lib/bundler/cli/cache.rb +25 -13
  13. data/lib/bundler/cli/common.rb +11 -12
  14. data/lib/bundler/cli/config.rb +161 -86
  15. data/lib/bundler/cli/console.rb +2 -2
  16. data/lib/bundler/cli/doctor.rb +4 -4
  17. data/lib/bundler/cli/exec.rb +4 -16
  18. data/lib/bundler/cli/gem.rb +5 -5
  19. data/lib/bundler/cli/info.rb +17 -5
  20. data/lib/bundler/cli/init.rb +1 -1
  21. data/lib/bundler/cli/install.rb +12 -11
  22. data/lib/bundler/cli/issue.rb +3 -3
  23. data/lib/bundler/cli/open.rb +10 -6
  24. data/lib/bundler/cli/outdated.rb +85 -81
  25. data/lib/bundler/cli/plugin.rb +9 -2
  26. data/lib/bundler/cli/pristine.rb +1 -1
  27. data/lib/bundler/cli/show.rb +1 -1
  28. data/lib/bundler/cli/update.rb +32 -12
  29. data/lib/bundler/compact_index_client.rb +25 -9
  30. data/lib/bundler/compact_index_client/updater.rb +2 -6
  31. data/lib/bundler/current_ruby.rb +9 -7
  32. data/lib/bundler/definition.rb +36 -27
  33. data/lib/bundler/dependency.rb +16 -4
  34. data/lib/bundler/deployment.rb +2 -2
  35. data/lib/bundler/dsl.rb +18 -42
  36. data/lib/bundler/env.rb +8 -13
  37. data/lib/bundler/environment_preserver.rb +0 -1
  38. data/lib/bundler/feature_flag.rb +1 -11
  39. data/lib/bundler/fetcher.rb +14 -11
  40. data/lib/bundler/fetcher/compact_index.rb +26 -12
  41. data/lib/bundler/fetcher/dependency.rb +1 -1
  42. data/lib/bundler/fetcher/downloader.rb +4 -1
  43. data/lib/bundler/fetcher/index.rb +4 -2
  44. data/lib/bundler/friendly_errors.rb +5 -6
  45. data/lib/bundler/gem_helper.rb +38 -25
  46. data/lib/bundler/gem_helpers.rb +2 -4
  47. data/lib/bundler/gem_tasks.rb +1 -1
  48. data/lib/bundler/gem_version_promoter.rb +3 -3
  49. data/lib/bundler/graph.rb +2 -2
  50. data/lib/bundler/injector.rb +10 -8
  51. data/lib/bundler/inline.rb +25 -20
  52. data/lib/bundler/installer.rb +7 -14
  53. data/lib/bundler/installer/gem_installer.rb +5 -1
  54. data/lib/bundler/installer/parallel_installer.rb +4 -8
  55. data/lib/bundler/installer/standalone.rb +1 -2
  56. data/lib/bundler/lazy_specification.rb +2 -2
  57. data/lib/bundler/lockfile_parser.rb +14 -21
  58. data/lib/bundler/match_platform.rb +1 -1
  59. data/lib/bundler/plugin.rb +42 -29
  60. data/lib/bundler/plugin/api.rb +1 -1
  61. data/lib/bundler/plugin/api/source.rb +2 -2
  62. data/lib/bundler/plugin/index.rb +14 -3
  63. data/lib/bundler/plugin/installer.rb +28 -15
  64. data/lib/bundler/psyched_yaml.rb +1 -1
  65. data/lib/bundler/resolver.rb +72 -24
  66. data/lib/bundler/resolver/spec_group.rb +3 -2
  67. data/lib/bundler/retry.rb +2 -2
  68. data/lib/bundler/ruby_version.rb +4 -19
  69. data/lib/bundler/rubygems_ext.rb +11 -67
  70. data/lib/bundler/rubygems_gem_installer.rb +1 -1
  71. data/lib/bundler/rubygems_integration.rb +143 -395
  72. data/lib/bundler/runtime.rb +2 -9
  73. data/lib/bundler/settings.rb +15 -48
  74. data/lib/bundler/setup.rb +7 -13
  75. data/lib/bundler/shared_helpers.rb +57 -73
  76. data/lib/bundler/similarity_detector.rb +2 -2
  77. data/lib/bundler/source.rb +5 -5
  78. data/lib/bundler/source/git.rb +19 -12
  79. data/lib/bundler/source/git/git_proxy.rb +36 -40
  80. data/lib/bundler/source/metadata.rb +9 -5
  81. data/lib/bundler/source/path.rb +13 -8
  82. data/lib/bundler/source/rubygems.rb +11 -5
  83. data/lib/bundler/source/rubygems/remote.rb +1 -2
  84. data/lib/bundler/source_list.rb +9 -12
  85. data/lib/bundler/spec_set.rb +23 -12
  86. data/lib/bundler/stub_specification.rb +18 -30
  87. data/lib/bundler/templates/Executable.bundler +23 -14
  88. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
  89. data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
  90. data/lib/bundler/templates/newgem/README.md.tt +4 -3
  91. data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
  92. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
  93. data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
  94. data/lib/bundler/ui.rb +3 -3
  95. data/lib/bundler/ui/rg_proxy.rb +1 -1
  96. data/lib/bundler/ui/shell.rb +4 -8
  97. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
  98. data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
  99. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
  100. data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
  101. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
  102. data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
  103. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
  104. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  105. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  106. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  107. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  108. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  109. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  110. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  111. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  112. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
  113. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  114. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  115. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  116. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
  117. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  118. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  119. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  120. data/lib/bundler/vendor/thor/lib/thor.rb +12 -4
  121. data/lib/bundler/vendor/thor/lib/thor/actions.rb +22 -11
  122. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  123. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
  124. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
  125. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +16 -7
  126. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
  127. data/lib/bundler/vendor/thor/lib/thor/base.rb +25 -24
  128. data/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
  129. data/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
  130. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  131. data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
  132. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  133. data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
  134. data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
  135. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  136. data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +1 -1
  137. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +8 -6
  138. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +20 -5
  139. data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
  140. data/lib/bundler/vendor/thor/lib/thor/runner.rb +8 -6
  141. data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  142. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
  143. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +6 -2
  144. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  145. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  146. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  147. data/lib/bundler/vendored_fileutils.rb +1 -6
  148. data/lib/bundler/vendored_molinillo.rb +1 -1
  149. data/lib/bundler/vendored_persistent.rb +7 -5
  150. data/lib/bundler/vendored_thor.rb +2 -2
  151. data/lib/bundler/version.rb +1 -20
  152. data/lib/bundler/version_ranges.rb +51 -5
  153. data/lib/bundler/vlad.rb +3 -3
  154. data/lib/bundler/worker.rb +1 -3
  155. data/lib/bundler/yaml_serializer.rb +2 -3
  156. data/man/bundle-add.1 +10 -2
  157. data/man/bundle-add.1.txt +11 -5
  158. data/man/bundle-add.ronn +7 -1
  159. data/man/bundle-binstubs.1 +2 -2
  160. data/man/bundle-binstubs.1.txt +2 -2
  161. data/man/bundle-binstubs.ronn +1 -1
  162. data/man/bundle-cache.1 +55 -0
  163. data/man/bundle-cache.1.txt +78 -0
  164. data/man/{bundle-package.ronn → bundle-cache.ronn} +15 -15
  165. data/man/bundle-check.1 +1 -1
  166. data/man/bundle-check.1.txt +6 -6
  167. data/man/bundle-clean.1 +1 -1
  168. data/man/bundle-clean.1.txt +1 -1
  169. data/man/bundle-config.1 +36 -36
  170. data/man/bundle-config.1.txt +66 -67
  171. data/man/bundle-config.ronn +42 -40
  172. data/man/bundle-doctor.1 +1 -1
  173. data/man/bundle-doctor.1.txt +1 -1
  174. data/man/bundle-exec.1 +2 -2
  175. data/man/bundle-exec.1.txt +2 -2
  176. data/man/bundle-exec.ronn +1 -1
  177. data/man/bundle-gem.1 +1 -1
  178. data/man/bundle-gem.1.txt +3 -3
  179. data/man/bundle-info.1 +1 -1
  180. data/man/bundle-info.1.txt +1 -1
  181. data/man/bundle-init.1 +2 -2
  182. data/man/bundle-init.1.txt +2 -2
  183. data/man/bundle-init.ronn +1 -1
  184. data/man/bundle-inject.1 +1 -1
  185. data/man/bundle-inject.1.txt +1 -1
  186. data/man/bundle-install.1 +8 -5
  187. data/man/bundle-install.1.txt +56 -51
  188. data/man/bundle-install.ronn +9 -4
  189. data/man/bundle-list.1 +1 -1
  190. data/man/bundle-list.1.txt +1 -1
  191. data/man/bundle-lock.1 +1 -1
  192. data/man/bundle-lock.1.txt +16 -16
  193. data/man/bundle-open.1 +1 -1
  194. data/man/bundle-open.1.txt +1 -1
  195. data/man/bundle-outdated.1 +1 -1
  196. data/man/bundle-outdated.1.txt +1 -1
  197. data/man/bundle-platform.1 +1 -1
  198. data/man/bundle-platform.1.txt +1 -1
  199. data/man/bundle-pristine.1 +1 -1
  200. data/man/bundle-pristine.1.txt +1 -1
  201. data/man/bundle-remove.1 +1 -1
  202. data/man/bundle-remove.1.txt +1 -1
  203. data/man/bundle-show.1 +1 -1
  204. data/man/bundle-show.1.txt +1 -1
  205. data/man/bundle-update.1 +4 -4
  206. data/man/bundle-update.1.txt +64 -65
  207. data/man/bundle-update.ronn +3 -3
  208. data/man/bundle-viz.1 +1 -1
  209. data/man/bundle-viz.1.txt +1 -1
  210. data/man/bundle.1 +7 -3
  211. data/man/bundle.1.txt +11 -8
  212. data/man/bundle.ronn +5 -2
  213. data/man/gemfile.5 +17 -20
  214. data/man/gemfile.5.ronn +14 -18
  215. data/man/gemfile.5.txt +108 -112
  216. data/man/index.txt +1 -1
  217. metadata +19 -107
  218. data/exe/bundle_ruby +0 -60
  219. data/lib/bundler/cli/package.rb +0 -49
  220. data/lib/bundler/compatibility_guard.rb +0 -14
  221. data/lib/bundler/ssl_certs/.document +0 -1
  222. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  223. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  224. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  225. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  226. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  227. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
  228. data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
  229. data/man/bundle-package.1 +0 -55
  230. data/man/bundle-package.1.txt +0 -79
data/LICENSE.md CHANGED
@@ -1,23 +1,22 @@
1
- Portions copyright (c) 2010 Andre Arko
2
- Portions copyright (c) 2009 Engine Yard
1
+ The MIT License
3
2
 
4
- MIT License
3
+ Portions copyright (c) 2010-2019 André Arko
4
+ Portions copyright (c) 2009 Engine Yard
5
5
 
6
- Permission is hereby granted, free of charge, to any person obtaining
7
- a copy of this software and associated documentation files (the
8
- "Software"), to deal in the Software without restriction, including
9
- without limitation the rights to use, copy, modify, merge, publish,
10
- distribute, sublicense, and/or sell copies of the Software, and to
11
- permit persons to whom the Software is furnished to do so, subject to
12
- the following conditions:
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
13
12
 
14
- The above copyright notice and this permission notice shall be
15
- included in all copies or substantial portions of the Software.
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
16
15
 
17
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  [![Version ](https://img.shields.io/gem/v/bundler.svg?style=flat)](https://rubygems.org/gems/bundler)
2
2
  [![Build Status](https://img.shields.io/travis/bundler/bundler/master.svg?style=flat)](https://travis-ci.org/bundler/bundler)
3
- [![Code Climate](https://img.shields.io/codeclimate/github/bundler/bundler.svg?style=flat)](https://codeclimate.com/github/bundler/bundler)
4
- [![Inline docs ](http://inch-ci.org/github/bundler/bundler.svg?style=flat)](http://inch-ci.org/github/bundler/bundler)
5
- [![Slack ](http://bundler-slackin.herokuapp.com/badge.svg)](http://bundler-slackin.herokuapp.com)
3
+ [![Inline docs ](https://inch-ci.org/github/bundler/bundler.svg?style=flat)](https://inch-ci.org/github/bundler/bundler)
4
+ [![Slack ](https://bundler-slackin.herokuapp.com/badge.svg)](https://bundler-slackin.herokuapp.com)
6
5
 
7
6
  # Bundler: a gem to bundle gems
8
7
 
@@ -29,7 +28,7 @@ bundle install
29
28
  bundle exec rspec
30
29
  ```
31
30
 
32
- See [bundler.io](http://bundler.io) for the full documentation.
31
+ See [bundler.io](https://bundler.io) for the full documentation.
33
32
 
34
33
  ### Troubleshooting
35
34
 
@@ -45,9 +44,11 @@ To get in touch with the Bundler core team and other Bundler users, please see [
45
44
 
46
45
  ### Contributing
47
46
 
48
- If you'd like to contribute to Bundler, that's awesome, and we <3 you. There's a guide to contributing to Bundler (both code and general help) over in [our documentation section](doc/README.md).
47
+ If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/bundler/bundler/blob/master/doc/contributing/README.md) with all of the information you need to get started.
49
48
 
50
- While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author’s affiliation with Ruby Together.
49
+ If you'd like to request a substantial change to Bundler or to the Bundler documentation, refer to the [Bundler RFC process](https://github.com/bundler/rfcs) for more information.
50
+
51
+ While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author's affiliation with Ruby Together.
51
52
 
52
53
  ### Supporting
53
54
 
@@ -56,8 +57,8 @@ While some Bundler contributors are compensated by Ruby Together, the project ma
56
57
 
57
58
  ### Code of Conduct
58
59
 
59
- Everyone interacting in the Bundler projects codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md).
60
+ Everyone interacting in the Bundler project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [Bundler code of conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md).
60
61
 
61
62
  ### License
62
63
 
63
- [MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md)
64
+ Bundler is available under an [MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md).
@@ -1,8 +1,11 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- require File.expand_path("../lib/bundler/version", __FILE__)
5
- require "shellwords"
3
+ begin
4
+ require_relative "lib/bundler/version"
5
+ rescue LoadError
6
+ # for Ruby core repository
7
+ require_relative "version"
8
+ end
6
9
 
7
10
  Gem::Specification.new do |s|
8
11
  s.name = "bundler"
@@ -15,38 +18,24 @@ Gem::Specification.new do |s|
15
18
  "Yehuda Katz"
16
19
  ]
17
20
  s.email = ["team@bundler.io"]
18
- s.homepage = "http://bundler.io"
21
+ s.homepage = "https://bundler.io"
19
22
  s.summary = "The best way to manage your application's dependencies"
20
23
  s.description = "Bundler manages an application's dependencies through its entire life, across many machines, systematically and repeatably"
21
24
 
22
25
  if s.respond_to?(:metadata=)
23
26
  s.metadata = {
24
- "bug_tracker_uri" => "http://github.com/bundler/bundler/issues",
27
+ "bug_tracker_uri" => "https://github.com/bundler/bundler/issues",
25
28
  "changelog_uri" => "https://github.com/bundler/bundler/blob/master/CHANGELOG.md",
26
29
  "homepage_uri" => "https://bundler.io/",
27
- "source_code_uri" => "http://github.com/bundler/bundler/",
30
+ "source_code_uri" => "https://github.com/bundler/bundler/",
28
31
  }
29
32
  end
30
33
 
31
- if s.version >= Gem::Version.new("2.a".dup)
32
- s.required_ruby_version = ">= 2.3.0"
33
- s.required_rubygems_version = ">= 2.5.0"
34
- else
35
- s.required_ruby_version = ">= 1.8.7"
36
- s.required_rubygems_version = ">= 1.3.6"
37
- end
34
+ s.required_ruby_version = ">= 2.3.0"
35
+ s.required_rubygems_version = ">= 2.5.2"
38
36
 
39
- s.add_development_dependency "automatiek", "~> 0.1.0"
40
- s.add_development_dependency "mustache", "0.99.6"
41
- s.add_development_dependency "rake", "~> 10.0"
42
- s.add_development_dependency "rdiscount", "~> 2.2"
43
- s.add_development_dependency "ronn", "~> 0.7.3"
44
- s.add_development_dependency "rspec", "~> 3.6"
37
+ s.files = Dir.glob("{lib,man,exe}/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
45
38
 
46
- s.files = `git ls-files -z`.split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
47
- # we don't check in man pages, but we need to ship them because
48
- # we use them to generate the long-form help for each command.
49
- s.files += Dir.glob("man/**/*")
50
39
  # Include the CHANGELOG.md, LICENSE.md, README.md manually
51
40
  s.files += %w[CHANGELOG.md LICENSE.md README.md]
52
41
  # include the gemspec itself because warbler breaks w/o it
data/exe/bundle CHANGED
@@ -7,7 +7,14 @@ Signal.trap("INT") do
7
7
  exit 1
8
8
  end
9
9
 
10
- require "bundler"
10
+ base_path = File.expand_path("../lib", __dir__)
11
+
12
+ if File.exist?(base_path)
13
+ require_relative "../lib/bundler"
14
+ else
15
+ require "bundler"
16
+ end
17
+
11
18
  # Check if an older version of bundler is installed
12
19
  $LOAD_PATH.each do |path|
13
20
  next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9
@@ -18,9 +25,18 @@ $LOAD_PATH.each do |path|
18
25
  abort(err)
19
26
  end
20
27
 
21
- require "bundler/friendly_errors"
28
+ if File.exist?(base_path)
29
+ require_relative "../lib/bundler/friendly_errors"
30
+ else
31
+ require "bundler/friendly_errors"
32
+ end
33
+
22
34
  Bundler.with_friendly_errors do
23
- require "bundler/cli"
35
+ if File.exist?(base_path)
36
+ require_relative "../lib/bundler/cli"
37
+ else
38
+ require "bundler/cli"
39
+ end
24
40
 
25
41
  # Allow any command to use --help flag to show help for that command
26
42
  help_flags = %w[--help -h]
@@ -1,65 +1,81 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/compatibility_guard"
4
-
5
- require "bundler/vendored_fileutils"
3
+ require_relative "bundler/vendored_fileutils"
6
4
  require "pathname"
7
5
  require "rbconfig"
8
- require "thread"
9
-
10
- require "bundler/errors"
11
- require "bundler/environment_preserver"
12
- require "bundler/plugin"
13
- require "bundler/rubygems_ext"
14
- require "bundler/rubygems_integration"
15
- require "bundler/version"
16
- require "bundler/constants"
17
- require "bundler/current_ruby"
18
- require "bundler/build_metadata"
19
6
 
7
+ require_relative "bundler/errors"
8
+ require_relative "bundler/environment_preserver"
9
+ require_relative "bundler/plugin"
10
+ require_relative "bundler/rubygems_ext"
11
+ require_relative "bundler/rubygems_integration"
12
+ require_relative "bundler/version"
13
+ require_relative "bundler/constants"
14
+ require_relative "bundler/current_ruby"
15
+ require_relative "bundler/build_metadata"
16
+
17
+ # Bundler provides a consistent environment for Ruby projects by
18
+ # tracking and installing the exact gems and versions that are needed.
19
+ #
20
+ # Since Ruby 2.6, Bundler is a part of Ruby's standard library.
21
+ #
22
+ # Bunder is used by creating _gemfiles_ listing all the project dependencies
23
+ # and (optionally) their versions and then using
24
+ #
25
+ # require 'bundler/setup'
26
+ #
27
+ # or Bundler.setup to setup environment where only specified gems and their
28
+ # specified versions could be used.
29
+ #
30
+ # See {Bundler website}[https://bundler.io/docs.html] for extensive documentation
31
+ # on gemfiles creation and Bundler usage.
32
+ #
33
+ # As a standard library inside project, Bundler could be used for introspection
34
+ # of loaded and required modules.
35
+ #
20
36
  module Bundler
21
37
  environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS)
22
38
  ORIGINAL_ENV = environment_preserver.restore
23
39
  ENV.replace(environment_preserver.backup)
24
40
  SUDO_MUTEX = Mutex.new
25
41
 
26
- autoload :Definition, "bundler/definition"
27
- autoload :Dependency, "bundler/dependency"
28
- autoload :DepProxy, "bundler/dep_proxy"
29
- autoload :Deprecate, "bundler/deprecate"
30
- autoload :Dsl, "bundler/dsl"
31
- autoload :EndpointSpecification, "bundler/endpoint_specification"
32
- autoload :Env, "bundler/env"
33
- autoload :Fetcher, "bundler/fetcher"
34
- autoload :FeatureFlag, "bundler/feature_flag"
35
- autoload :GemHelper, "bundler/gem_helper"
36
- autoload :GemHelpers, "bundler/gem_helpers"
37
- autoload :GemRemoteFetcher, "bundler/gem_remote_fetcher"
38
- autoload :GemVersionPromoter, "bundler/gem_version_promoter"
39
- autoload :Graph, "bundler/graph"
40
- autoload :Index, "bundler/index"
41
- autoload :Injector, "bundler/injector"
42
- autoload :Installer, "bundler/installer"
43
- autoload :LazySpecification, "bundler/lazy_specification"
44
- autoload :LockfileParser, "bundler/lockfile_parser"
45
- autoload :MatchPlatform, "bundler/match_platform"
46
- autoload :ProcessLock, "bundler/process_lock"
47
- autoload :RemoteSpecification, "bundler/remote_specification"
48
- autoload :Resolver, "bundler/resolver"
49
- autoload :Retry, "bundler/retry"
50
- autoload :RubyDsl, "bundler/ruby_dsl"
51
- autoload :RubyGemsGemInstaller, "bundler/rubygems_gem_installer"
52
- autoload :RubyVersion, "bundler/ruby_version"
53
- autoload :Runtime, "bundler/runtime"
54
- autoload :Settings, "bundler/settings"
55
- autoload :SharedHelpers, "bundler/shared_helpers"
56
- autoload :Source, "bundler/source"
57
- autoload :SourceList, "bundler/source_list"
58
- autoload :SpecSet, "bundler/spec_set"
59
- autoload :StubSpecification, "bundler/stub_specification"
60
- autoload :UI, "bundler/ui"
61
- autoload :URICredentialsFilter, "bundler/uri_credentials_filter"
62
- autoload :VersionRanges, "bundler/version_ranges"
42
+ autoload :Definition, File.expand_path("bundler/definition", __dir__)
43
+ autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
44
+ autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
45
+ autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
46
+ autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
47
+ autoload :EndpointSpecification, File.expand_path("bundler/endpoint_specification", __dir__)
48
+ autoload :Env, File.expand_path("bundler/env", __dir__)
49
+ autoload :Fetcher, File.expand_path("bundler/fetcher", __dir__)
50
+ autoload :FeatureFlag, File.expand_path("bundler/feature_flag", __dir__)
51
+ autoload :GemHelper, File.expand_path("bundler/gem_helper", __dir__)
52
+ autoload :GemHelpers, File.expand_path("bundler/gem_helpers", __dir__)
53
+ autoload :GemRemoteFetcher, File.expand_path("bundler/gem_remote_fetcher", __dir__)
54
+ autoload :GemVersionPromoter, File.expand_path("bundler/gem_version_promoter", __dir__)
55
+ autoload :Graph, File.expand_path("bundler/graph", __dir__)
56
+ autoload :Index, File.expand_path("bundler/index", __dir__)
57
+ autoload :Injector, File.expand_path("bundler/injector", __dir__)
58
+ autoload :Installer, File.expand_path("bundler/installer", __dir__)
59
+ autoload :LazySpecification, File.expand_path("bundler/lazy_specification", __dir__)
60
+ autoload :LockfileParser, File.expand_path("bundler/lockfile_parser", __dir__)
61
+ autoload :MatchPlatform, File.expand_path("bundler/match_platform", __dir__)
62
+ autoload :ProcessLock, File.expand_path("bundler/process_lock", __dir__)
63
+ autoload :RemoteSpecification, File.expand_path("bundler/remote_specification", __dir__)
64
+ autoload :Resolver, File.expand_path("bundler/resolver", __dir__)
65
+ autoload :Retry, File.expand_path("bundler/retry", __dir__)
66
+ autoload :RubyDsl, File.expand_path("bundler/ruby_dsl", __dir__)
67
+ autoload :RubyGemsGemInstaller, File.expand_path("bundler/rubygems_gem_installer", __dir__)
68
+ autoload :RubyVersion, File.expand_path("bundler/ruby_version", __dir__)
69
+ autoload :Runtime, File.expand_path("bundler/runtime", __dir__)
70
+ autoload :Settings, File.expand_path("bundler/settings", __dir__)
71
+ autoload :SharedHelpers, File.expand_path("bundler/shared_helpers", __dir__)
72
+ autoload :Source, File.expand_path("bundler/source", __dir__)
73
+ autoload :SourceList, File.expand_path("bundler/source_list", __dir__)
74
+ autoload :SpecSet, File.expand_path("bundler/spec_set", __dir__)
75
+ autoload :StubSpecification, File.expand_path("bundler/stub_specification", __dir__)
76
+ autoload :UI, File.expand_path("bundler/ui", __dir__)
77
+ autoload :URICredentialsFilter, File.expand_path("bundler/uri_credentials_filter", __dir__)
78
+ autoload :VersionRanges, File.expand_path("bundler/version_ranges", __dir__)
63
79
 
64
80
  class << self
65
81
  def configure
@@ -67,11 +83,11 @@ module Bundler
67
83
  end
68
84
 
69
85
  def ui
70
- (defined?(@ui) && @ui) || (self.ui = UI::Silent.new)
86
+ (defined?(@ui) && @ui) || (self.ui = UI::Shell.new)
71
87
  end
72
88
 
73
89
  def ui=(ui)
74
- Bundler.rubygems.ui = ui ? UI::RGProxy.new(ui) : nil
90
+ Bundler.rubygems.ui = UI::RGProxy.new(ui)
75
91
  @ui = ui
76
92
  end
77
93
 
@@ -94,6 +110,33 @@ module Bundler
94
110
  end
95
111
  end
96
112
 
113
+ # Turns on the Bundler runtime. After +Bundler.setup+ call, all +load+ or
114
+ # +require+ of the gems would be allowed only if they are part of
115
+ # the Gemfile or Ruby's standard library. If the versions specified
116
+ # in Gemfile, only those versions would be loaded.
117
+ #
118
+ # Assuming Gemfile
119
+ #
120
+ # gem 'first_gem', '= 1.0'
121
+ # group :test do
122
+ # gem 'second_gem', '= 1.0'
123
+ # end
124
+ #
125
+ # The code using Bundler.setup works as follows:
126
+ #
127
+ # require 'third_gem' # allowed, required from global gems
128
+ # require 'first_gem' # allowed, loads the last installed version
129
+ # Bundler.setup
130
+ # require 'fourth_gem' # fails with LoadError
131
+ # require 'second_gem' # loads exactly version 1.0
132
+ #
133
+ # +Bundler.setup+ can be called only once, all subsequent calls are no-op.
134
+ #
135
+ # If _groups_ list is provided, only gems from specified groups would
136
+ # be allowed (gems specified outside groups belong to special +:default+ group).
137
+ #
138
+ # To require all gems from Gemfile (or only some groups), see Bundler.require.
139
+ #
97
140
  def setup(*groups)
98
141
  # Return if all groups are already loaded
99
142
  return @setup if defined?(@setup) && @setup
@@ -110,6 +153,24 @@ module Bundler
110
153
  end
111
154
  end
112
155
 
156
+ # Setups Bundler environment (see Bundler.setup) if it is not already set,
157
+ # and loads all gems from groups specified. Unlike ::setup, can be called
158
+ # multiple times with different groups (if they were allowed by setup).
159
+ #
160
+ # Assuming Gemfile
161
+ #
162
+ # gem 'first_gem', '= 1.0'
163
+ # group :test do
164
+ # gem 'second_gem', '= 1.0'
165
+ # end
166
+ #
167
+ # The code will work as follows:
168
+ #
169
+ # Bundler.setup # allow all groups
170
+ # Bundler.require(:default) # requires only first_gem
171
+ # # ...later
172
+ # Bundler.require(:test) # requires second_gem
173
+ #
113
174
  def require(*groups)
114
175
  setup(*groups).require(*groups)
115
176
  end
@@ -119,7 +180,7 @@ module Bundler
119
180
  end
120
181
 
121
182
  def environment
122
- SharedHelpers.major_deprecation 3, "Bundler.environment has been removed in favor of Bundler.load"
183
+ SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load", :print_caller_location => true
123
184
  load
124
185
  end
125
186
 
@@ -153,7 +214,7 @@ module Bundler
153
214
  end
154
215
 
155
216
  def ruby_scope
156
- "#{Bundler.rubygems.ruby_engine}/#{Bundler.rubygems.config_map[:ruby_version]}"
217
+ "#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
157
218
  end
158
219
 
159
220
  def user_home
@@ -170,8 +231,7 @@ module Bundler
170
231
  end
171
232
 
172
233
  if warning
173
- Kernel.send(:require, "etc")
174
- user_home = tmp_home_path(Etc.getlogin, warning)
234
+ user_home = tmp_home_path(warning)
175
235
  Bundler.ui.warn "#{warning}\nBundler will use `#{user_home}' as your home directory temporarily.\n"
176
236
  user_home
177
237
  else
@@ -180,37 +240,22 @@ module Bundler
180
240
  end
181
241
  end
182
242
 
183
- def tmp_home_path(login, warning)
184
- login ||= "unknown"
185
- Kernel.send(:require, "tmpdir")
186
- path = Pathname.new(Dir.tmpdir).join("bundler", "home")
187
- SharedHelpers.filesystem_access(path) do |tmp_home_path|
188
- unless tmp_home_path.exist?
189
- tmp_home_path.mkpath
190
- tmp_home_path.chmod(0o777)
191
- end
192
- tmp_home_path.join(login).tap(&:mkpath)
193
- end
194
- rescue RuntimeError => e
195
- raise e.exception("#{warning}\nBundler also failed to create a temporary home directory at `#{path}':\n#{e}")
196
- end
197
-
198
243
  def user_bundle_path(dir = "home")
199
244
  env_var, fallback = case dir
200
245
  when "home"
201
- ["BUNDLE_USER_HOME", Pathname.new(user_home).join(".bundle")]
246
+ ["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
202
247
  when "cache"
203
- ["BUNDLE_USER_CACHE", user_bundle_path.join("cache")]
248
+ ["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
204
249
  when "config"
205
- ["BUNDLE_USER_CONFIG", user_bundle_path.join("config")]
250
+ ["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
206
251
  when "plugin"
207
- ["BUNDLE_USER_PLUGIN", user_bundle_path.join("plugin")]
252
+ ["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
208
253
  else
209
254
  raise BundlerError, "Unknown user path requested: #{dir}"
210
255
  end
211
256
  # `fallback` will already be a Pathname, but Pathname.new() is
212
257
  # idempotent so it's OK
213
- Pathname.new(ENV.fetch(env_var, fallback))
258
+ Pathname.new(ENV.fetch(env_var, &fallback))
214
259
  end
215
260
 
216
261
  def user_cache
@@ -263,7 +308,7 @@ module Bundler
263
308
  message = <<EOF
264
309
  It is a security vulnerability to allow your home directory to be world-writable, and bundler can not continue.
265
310
  You should probably consider fixing this issue by running `chmod o-w ~` on *nix.
266
- Please refer to http://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
311
+ Please refer to https://ruby-doc.org/stdlib-2.1.2/libdoc/fileutils/rdoc/FileUtils.html#method-c-remove_entry_secure for details.
267
312
  EOF
268
313
  File.world_writable?(path) ? Bundler.ui.warn(message) : raise
269
314
  raise PathError, "Please fix the world-writable issue with your #{path} directory"
@@ -280,10 +325,20 @@ EOF
280
325
  ORIGINAL_ENV.clone
281
326
  end
282
327
 
283
- # @deprecated Use `original_env` instead
284
- # @return [Hash] Environment with all bundler-related variables removed
328
+ # @deprecated Use `unbundled_env` instead
285
329
  def clean_env
286
- Bundler::SharedHelpers.major_deprecation(3, "`Bundler.clean_env` has weird edge cases, use `.original_env` instead")
330
+ Bundler::SharedHelpers.major_deprecation(
331
+ 2,
332
+ "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
333
+ "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`",
334
+ :print_caller_location => true
335
+ )
336
+
337
+ unbundled_env
338
+ end
339
+
340
+ # @return [Hash] Environment with all bundler-related variables removed
341
+ def unbundled_env
287
342
  env = original_env
288
343
 
289
344
  if env.key?("BUNDLER_ORIG_MANPATH")
@@ -305,20 +360,70 @@ EOF
305
360
  env
306
361
  end
307
362
 
363
+ # Run block with environment present before Bundler was activated
308
364
  def with_original_env
309
365
  with_env(original_env) { yield }
310
366
  end
311
367
 
368
+ # @deprecated Use `with_unbundled_env` instead
312
369
  def with_clean_env
313
- with_env(clean_env) { yield }
370
+ Bundler::SharedHelpers.major_deprecation(
371
+ 2,
372
+ "`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
373
+ "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`",
374
+ :print_caller_location => true
375
+ )
376
+
377
+ with_env(unbundled_env) { yield }
378
+ end
379
+
380
+ # Run block with all bundler-related variables removed
381
+ def with_unbundled_env
382
+ with_env(unbundled_env) { yield }
314
383
  end
315
384
 
385
+ # Run subcommand with the environment present before Bundler was activated
386
+ def original_system(*args)
387
+ with_original_env { Kernel.system(*args) }
388
+ end
389
+
390
+ # @deprecated Use `unbundled_system` instead
316
391
  def clean_system(*args)
317
- with_clean_env { Kernel.system(*args) }
392
+ Bundler::SharedHelpers.major_deprecation(
393
+ 2,
394
+ "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
395
+ "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`",
396
+ :print_caller_location => true
397
+ )
398
+
399
+ with_env(unbundled_env) { Kernel.system(*args) }
400
+ end
401
+
402
+ # Run subcommand in an environment with all bundler related variables removed
403
+ def unbundled_system(*args)
404
+ with_unbundled_env { Kernel.system(*args) }
318
405
  end
319
406
 
407
+ # Run a `Kernel.exec` to a subcommand with the environment present before Bundler was activated
408
+ def original_exec(*args)
409
+ with_original_env { Kernel.exec(*args) }
410
+ end
411
+
412
+ # @deprecated Use `unbundled_exec` instead
320
413
  def clean_exec(*args)
321
- with_clean_env { Kernel.exec(*args) }
414
+ Bundler::SharedHelpers.major_deprecation(
415
+ 2,
416
+ "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
417
+ "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`",
418
+ :print_caller_location => true
419
+ )
420
+
421
+ with_env(unbundled_env) { Kernel.exec(*args) }
422
+ end
423
+
424
+ # Run a `Kernel.exec` to a subcommand in an environment with all bundler related variables removed
425
+ def unbundled_exec(*args)
426
+ with_env(unbundled_env) { Kernel.exec(*args) }
322
427
  end
323
428
 
324
429
  def local_platform
@@ -343,7 +448,7 @@ EOF
343
448
  # system binaries. If you put '-n foo' in your .gemrc, RubyGems will
344
449
  # install binstubs there instead. Unfortunately, RubyGems doesn't expose
345
450
  # that directory at all, so rather than parse .gemrc ourselves, we allow
346
- # the directory to be set as well, via `bundle config bindir foo`.
451
+ # the directory to be set as well, via `bundle config set bindir foo`.
347
452
  Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
348
453
  end
349
454
 
@@ -509,7 +614,7 @@ EOF
509
614
  private
510
615
 
511
616
  def eval_yaml_gemspec(path, contents)
512
- Kernel.send(:require, "bundler/psyched_yaml")
617
+ require_relative "bundler/psyched_yaml"
513
618
 
514
619
  # If the YAML is invalid, Syck raises an ArgumentError, and Psych
515
620
  # raises a Psych::SyntaxError. See psyched_yaml.rb for more info.
@@ -523,7 +628,7 @@ EOF
523
628
  rescue ScriptError, StandardError => e
524
629
  msg = "There was an error while loading `#{path.basename}`: #{e.message}"
525
630
 
526
- if e.is_a?(LoadError) && RUBY_VERSION >= "1.9"
631
+ if e.is_a?(LoadError)
527
632
  msg += "\nDoes it try to require a relative path? That's been removed in Ruby 1.9"
528
633
  end
529
634
 
@@ -555,6 +660,17 @@ EOF
555
660
  Bundler.rubygems.clear_paths
556
661
  end
557
662
 
663
+ def tmp_home_path(warning)
664
+ Kernel.send(:require, "tmpdir")
665
+ SharedHelpers.filesystem_access(Dir.tmpdir) do
666
+ path = Bundler.tmp
667
+ at_exit { Bundler.rm_rf(path) }
668
+ path
669
+ end
670
+ rescue RuntimeError => e
671
+ raise e.exception("#{warning}\nBundler also failed to create a temporary home directory':\n#{e}")
672
+ end
673
+
558
674
  # @param env [Hash]
559
675
  def with_env(env)
560
676
  backup = ENV.to_hash