bundler 1.17.0.pre.2 → 2.1.0.pre.2

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 (218) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +769 -570
  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 +121 -68
  8. data/lib/bundler/build_metadata.rb +14 -7
  9. data/lib/bundler/capistrano.rb +4 -4
  10. data/lib/bundler/cli.rb +129 -121
  11. data/lib/bundler/cli/add.rb +27 -16
  12. data/lib/bundler/cli/common.rb +11 -12
  13. data/lib/bundler/cli/config.rb +161 -86
  14. data/lib/bundler/cli/console.rb +1 -1
  15. data/lib/bundler/cli/doctor.rb +4 -4
  16. data/lib/bundler/cli/exec.rb +4 -9
  17. data/lib/bundler/cli/gem.rb +5 -5
  18. data/lib/bundler/cli/info.rb +17 -5
  19. data/lib/bundler/cli/init.rb +1 -1
  20. data/lib/bundler/cli/install.rb +11 -10
  21. data/lib/bundler/cli/issue.rb +3 -3
  22. data/lib/bundler/cli/open.rb +10 -6
  23. data/lib/bundler/cli/outdated.rb +85 -81
  24. data/lib/bundler/cli/package.rb +8 -9
  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 +31 -11
  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 +35 -26
  33. data/lib/bundler/dependency.rb +16 -4
  34. data/lib/bundler/deployment.rb +1 -1
  35. data/lib/bundler/dsl.rb +15 -39
  36. data/lib/bundler/env.rb +8 -13
  37. data/lib/bundler/environment_preserver.rb +0 -1
  38. data/lib/bundler/feature_flag.rb +23 -32
  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 +4 -5
  45. data/lib/bundler/gem_helper.rb +39 -24
  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 +19 -18
  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 +13 -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 +10 -66
  70. data/lib/bundler/rubygems_gem_installer.rb +1 -1
  71. data/lib/bundler/rubygems_integration.rb +144 -395
  72. data/lib/bundler/runtime.rb +2 -9
  73. data/lib/bundler/settings.rb +15 -47
  74. data/lib/bundler/setup.rb +6 -5
  75. data/lib/bundler/shared_helpers.rb +64 -67
  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 +35 -39
  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 +151 -48
  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 +7 -2
  121. data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -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 +1 -1
  125. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
  126. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
  127. data/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
  128. data/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
  129. data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
  130. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  131. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  132. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
  133. data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
  134. data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
  135. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
  136. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  137. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  138. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  139. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  140. data/lib/bundler/vendored_fileutils.rb +1 -6
  141. data/lib/bundler/vendored_molinillo.rb +1 -1
  142. data/lib/bundler/vendored_persistent.rb +7 -5
  143. data/lib/bundler/vendored_thor.rb +2 -2
  144. data/lib/bundler/version.rb +1 -20
  145. data/lib/bundler/version_ranges.rb +51 -5
  146. data/lib/bundler/vlad.rb +2 -2
  147. data/lib/bundler/worker.rb +1 -3
  148. data/lib/bundler/yaml_serializer.rb +2 -3
  149. data/man/bundle-add.1 +10 -2
  150. data/man/bundle-add.1.txt +11 -5
  151. data/man/bundle-add.ronn +7 -1
  152. data/man/bundle-binstubs.1 +2 -2
  153. data/man/bundle-binstubs.1.txt +2 -2
  154. data/man/bundle-binstubs.ronn +1 -1
  155. data/man/bundle-check.1 +1 -1
  156. data/man/bundle-check.1.txt +6 -6
  157. data/man/bundle-clean.1 +1 -1
  158. data/man/bundle-clean.1.txt +1 -1
  159. data/man/bundle-config.1 +52 -36
  160. data/man/bundle-config.1.txt +82 -67
  161. data/man/bundle-config.ronn +56 -40
  162. data/man/bundle-doctor.1 +1 -1
  163. data/man/bundle-doctor.1.txt +1 -1
  164. data/man/bundle-exec.1 +2 -2
  165. data/man/bundle-exec.1.txt +2 -2
  166. data/man/bundle-exec.ronn +1 -1
  167. data/man/bundle-gem.1 +1 -1
  168. data/man/bundle-gem.1.txt +3 -3
  169. data/man/bundle-info.1 +1 -1
  170. data/man/bundle-info.1.txt +1 -1
  171. data/man/bundle-init.1 +2 -2
  172. data/man/bundle-init.1.txt +2 -2
  173. data/man/bundle-init.ronn +1 -1
  174. data/man/bundle-inject.1 +1 -1
  175. data/man/bundle-inject.1.txt +1 -1
  176. data/man/bundle-install.1 +8 -5
  177. data/man/bundle-install.1.txt +56 -51
  178. data/man/bundle-install.ronn +9 -4
  179. data/man/bundle-list.1 +1 -1
  180. data/man/bundle-list.1.txt +1 -1
  181. data/man/bundle-lock.1 +1 -1
  182. data/man/bundle-lock.1.txt +16 -16
  183. data/man/bundle-open.1 +1 -1
  184. data/man/bundle-open.1.txt +1 -1
  185. data/man/bundle-outdated.1 +1 -1
  186. data/man/bundle-outdated.1.txt +1 -1
  187. data/man/bundle-package.1 +1 -1
  188. data/man/bundle-package.1.txt +1 -1
  189. data/man/bundle-platform.1 +1 -1
  190. data/man/bundle-platform.1.txt +1 -1
  191. data/man/bundle-pristine.1 +1 -1
  192. data/man/bundle-pristine.1.txt +1 -1
  193. data/man/bundle-remove.1 +1 -1
  194. data/man/bundle-remove.1.txt +1 -1
  195. data/man/bundle-show.1 +1 -1
  196. data/man/bundle-show.1.txt +1 -1
  197. data/man/bundle-update.1 +4 -4
  198. data/man/bundle-update.1.txt +64 -65
  199. data/man/bundle-update.ronn +3 -3
  200. data/man/bundle-viz.1 +1 -1
  201. data/man/bundle-viz.1.txt +1 -1
  202. data/man/bundle.1 +7 -3
  203. data/man/bundle.1.txt +11 -8
  204. data/man/bundle.ronn +5 -2
  205. data/man/gemfile.5 +17 -20
  206. data/man/gemfile.5.ronn +14 -18
  207. data/man/gemfile.5.txt +108 -112
  208. metadata +17 -104
  209. data/exe/bundle_ruby +0 -60
  210. data/lib/bundler/cli/cache.rb +0 -36
  211. data/lib/bundler/compatibility_guard.rb +0 -14
  212. data/lib/bundler/ssl_certs/.document +0 -1
  213. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  214. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  215. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  216. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  217. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  218. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2018-10-13".freeze
8
- @git_commit_sha = "0f81f1acd".freeze
7
+ @built_at = "2019-09-15".freeze
8
+ @git_commit_sha = "b0dcf5f7b".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -25,17 +25,24 @@ module Bundler
25
25
 
26
26
  # The SHA for the git commit the bundler gem was built from.
27
27
  def self.git_commit_sha
28
- return @git_commit_sha if @git_commit_sha
28
+ return @git_commit_sha if instance_variable_defined? :@git_commit_sha
29
29
 
30
30
  # If Bundler has been installed without its .git directory and without a
31
31
  # commit instance variable then we can't determine its commits SHA.
32
32
  git_dir = File.join(File.expand_path("../../..", __FILE__), ".git")
33
- return "unknown" unless File.directory?(git_dir)
33
+ if File.directory?(git_dir)
34
+ return @git_commit_sha = Dir.chdir(git_dir) { `git rev-parse --short HEAD`.strip.freeze }
35
+ end
34
36
 
35
- # Otherwise shell out to git.
36
- @git_commit_sha = Dir.chdir(File.expand_path("..", __FILE__)) do
37
- `git rev-parse --short HEAD`.strip.freeze
37
+ # If Bundler is a submodule in RubyGems, get the submodule commit
38
+ git_sub_dir = File.join(File.expand_path("../../../..", __FILE__), ".git")
39
+ if File.directory?(git_sub_dir)
40
+ return @git_commit_sha = Dir.chdir(git_sub_dir) do
41
+ `git ls-tree --abbrev=8 HEAD bundler`.split(/\s/).fetch(2, "").strip.freeze
42
+ end
38
43
  end
44
+
45
+ @git_commit_sha ||= "unknown"
39
46
  end
40
47
 
41
48
  # Whether this is an official release build of Bundler.
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/shared_helpers"
3
+ require_relative "shared_helpers"
4
4
  Bundler::SharedHelpers.major_deprecation 2,
5
- "The Bundler task for Capistrano. Please use http://github.com/capistrano/bundler"
5
+ "The Bundler task for Capistrano. Please use https://github.com/capistrano/bundler"
6
6
 
7
7
  # Capistrano task for Bundler.
8
8
  #
9
9
  # Add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and
10
10
  # Bundler will be activated after each new deployment.
11
- require "bundler/deployment"
11
+ require_relative "deployment"
12
12
  require "capistrano/version"
13
13
 
14
14
  if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0")
15
- raise "For Capistrano 3.x integration, please use http://github.com/capistrano/bundler"
15
+ raise "For Capistrano 3.x integration, please use https://github.com/capistrano/bundler"
16
16
  end
17
17
 
18
18
  Capistrano::Configuration.instance(:must_exist).load do
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler"
4
- require "bundler/vendored_thor"
3
+ require_relative "vendored_thor"
5
4
 
6
5
  module Bundler
7
6
  class CLI < Thor
8
- require "bundler/cli/common"
7
+ require_relative "cli/common"
9
8
 
10
9
  package_name "Bundler"
11
10
 
@@ -16,7 +15,7 @@ module Bundler
16
15
 
17
16
  def self.start(*)
18
17
  super
19
- rescue Exception => e
18
+ rescue Exception => e # rubocop:disable Lint/RescueException
20
19
  Bundler.ui = UI::Shell.new
21
20
  raise e
22
21
  ensure
@@ -61,11 +60,6 @@ module Bundler
61
60
  end
62
61
  end
63
62
 
64
- def self.deprecated_option(*args, &blk)
65
- return if Bundler.feature_flag.forget_cli_options?
66
- method_option(*args, &blk)
67
- end
68
-
69
63
  check_unknown_options!(:except => [:config, :exec])
70
64
  stop_on_unknown_option! :exec
71
65
 
@@ -75,7 +69,7 @@ module Bundler
75
69
  Bundler.ui.info "\n"
76
70
 
77
71
  primary_commands = ["install", "update",
78
- Bundler.feature_flag.cache_command_is_package? ? "cache" : "package",
72
+ Bundler.feature_flag.bundler_3_mode? ? "cache" : "package",
79
73
  "exec", "config", "help"]
80
74
 
81
75
  list = self.class.printable_commands(true)
@@ -142,9 +136,9 @@ module Bundler
142
136
  Gemfile to a gem with a gemspec, the --gemspec option will automatically add each
143
137
  dependency listed in the gemspec file to the newly created Gemfile.
144
138
  D
145
- deprecated_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
139
+ method_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
146
140
  def init
147
- require "bundler/cli/init"
141
+ require_relative "cli/init"
148
142
  Init.new(options.dup).run
149
143
  end
150
144
 
@@ -162,7 +156,9 @@ module Bundler
162
156
  "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
163
157
  map "c" => "check"
164
158
  def check
165
- require "bundler/cli/check"
159
+ remembered_flag_deprecation("path")
160
+
161
+ require_relative "cli/check"
166
162
  Check.new(options).run
167
163
  end
168
164
 
@@ -173,7 +169,7 @@ module Bundler
173
169
  method_option "install", :type => :boolean, :banner =>
174
170
  "Runs 'bundle install' after removing the gems from the Gemfile"
175
171
  def remove(*gems)
176
- require "bundler/cli/remove"
172
+ require_relative "cli/remove"
177
173
  Remove.new(gems, options).run
178
174
  end
179
175
 
@@ -188,13 +184,13 @@ module Bundler
188
184
 
189
185
  If the bundle has already been installed, bundler will tell you so and then exit.
190
186
  D
191
- deprecated_option "binstubs", :type => :string, :lazy_default => "bin", :banner =>
187
+ method_option "binstubs", :type => :string, :lazy_default => "bin", :banner =>
192
188
  "Generate bin stubs for bundled gems to ./bin"
193
- deprecated_option "clean", :type => :boolean, :banner =>
189
+ method_option "clean", :type => :boolean, :banner =>
194
190
  "Run bundle clean automatically after install"
195
- deprecated_option "deployment", :type => :boolean, :banner =>
191
+ method_option "deployment", :type => :boolean, :banner =>
196
192
  "Install using defaults tuned for deployment environments"
197
- deprecated_option "frozen", :type => :boolean, :banner =>
193
+ method_option "frozen", :type => :boolean, :banner =>
198
194
  "Do not allow the Gemfile.lock to be updated after this install"
199
195
  method_option "full-index", :type => :boolean, :banner =>
200
196
  "Fall back to using the single-file index of all gems"
@@ -204,33 +200,38 @@ module Bundler
204
200
  "Specify the number of jobs to run in parallel"
205
201
  method_option "local", :type => :boolean, :banner =>
206
202
  "Do not attempt to fetch gems remotely and use the gem cache instead"
207
- deprecated_option "no-cache", :type => :boolean, :banner =>
203
+ method_option "no-cache", :type => :boolean, :banner =>
208
204
  "Don't update the existing gem cache."
209
205
  method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
210
206
  "Force downloading every gem."
211
- deprecated_option "no-prune", :type => :boolean, :banner =>
207
+ method_option "no-prune", :type => :boolean, :banner =>
212
208
  "Don't remove stale gems from the cache."
213
- deprecated_option "path", :type => :string, :banner =>
214
- "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine"
209
+ method_option "path", :type => :string, :banner =>
210
+ "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
215
211
  method_option "quiet", :type => :boolean, :banner =>
216
212
  "Only output warnings and errors."
217
- deprecated_option "shebang", :type => :string, :banner =>
213
+ method_option "shebang", :type => :string, :banner =>
218
214
  "Specify a different shebang executable name than the default (usually 'ruby')"
219
215
  method_option "standalone", :type => :array, :lazy_default => [], :banner =>
220
216
  "Make a bundle that can work without the Bundler runtime"
221
- deprecated_option "system", :type => :boolean, :banner =>
217
+ method_option "system", :type => :boolean, :banner =>
222
218
  "Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
223
219
  method_option "trust-policy", :alias => "P", :type => :string, :banner =>
224
220
  "Gem trust policy (like gem install -P). Must be one of " +
225
221
  Bundler.rubygems.security_policy_keys.join("|")
226
- deprecated_option "without", :type => :array, :banner =>
222
+ method_option "without", :type => :array, :banner =>
227
223
  "Exclude gems that are part of the specified named group."
228
- deprecated_option "with", :type => :array, :banner =>
224
+ method_option "with", :type => :array, :banner =>
229
225
  "Include gems that are part of the specified named group."
230
226
  map "i" => "install"
231
227
  def install
232
228
  SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
233
- require "bundler/cli/install"
229
+
230
+ %w[clean deployment frozen no-cache no-prune path shebang system without with].each do |option|
231
+ remembered_flag_deprecation(option)
232
+ end
233
+
234
+ require_relative "cli/install"
234
235
  Bundler.settings.temporary(:no_install => false) do
235
236
  Install.new(options.dup).run
236
237
  end
@@ -276,60 +277,63 @@ module Bundler
276
277
  "Update everything."
277
278
  def update(*gems)
278
279
  SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
279
- require "bundler/cli/update"
280
- Update.new(options, gems).run
280
+ require_relative "cli/update"
281
+ Bundler.settings.temporary(:no_install => false) do
282
+ Update.new(options, gems).run
283
+ end
281
284
  end
282
285
 
283
- desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
284
- long_desc <<-D
285
- Show lists the names and versions of all gems that are required by your Gemfile.
286
- Calling show with [GEM] will list the exact location of that gem on your machine.
287
- D
288
- method_option "paths", :type => :boolean,
289
- :banner => "List the paths of all gems that are required by your Gemfile."
290
- method_option "outdated", :type => :boolean,
291
- :banner => "Show verbose output including whether gems are outdated."
292
- def show(gem_name = nil)
293
- if ARGV[0] == "show"
294
- rest = ARGV[1..-1]
295
-
296
- new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
297
-
298
- new_arguments = rest.map do |arg|
299
- next arg if arg != "--paths"
300
- next "--path" if new_command == "info"
286
+ unless Bundler.feature_flag.bundler_3_mode?
287
+ desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
288
+ long_desc <<-D
289
+ Show lists the names and versions of all gems that are required by your Gemfile.
290
+ Calling show with [GEM] will list the exact location of that gem on your machine.
291
+ D
292
+ method_option "paths", :type => :boolean,
293
+ :banner => "List the paths of all gems that are required by your Gemfile."
294
+ method_option "outdated", :type => :boolean,
295
+ :banner => "Show verbose output including whether gems are outdated."
296
+ def show(gem_name = nil)
297
+ if ARGV[0] == "show"
298
+ rest = ARGV[1..-1]
299
+
300
+ if flag = rest.find{|arg| ["--verbose", "--outdated"].include?(arg) }
301
+ Bundler::SharedHelpers.major_deprecation(2, "the `#{flag}` flag to `bundle show` was undocumented and will be removed without replacement")
302
+ else
303
+ new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
304
+
305
+ new_arguments = rest.map do |arg|
306
+ next arg if arg != "--paths"
307
+ next "--path" if new_command == "info"
308
+ end
309
+
310
+ old_argv = ARGV.join(" ")
311
+ new_argv = [new_command, *new_arguments.compact].join(" ")
312
+
313
+ Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
314
+ end
301
315
  end
302
-
303
- old_argv = ARGV.join(" ")
304
- new_argv = [new_command, *new_arguments.compact].join(" ")
305
-
306
- Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
307
- end
308
- require "bundler/cli/show"
309
- Show.new(options, gem_name).run
310
- end
311
- # TODO: 2.0 remove `bundle show`
312
-
313
- if Bundler.feature_flag.list_command?
314
- desc "list", "List all gems in the bundle"
315
- method_option "name-only", :type => :boolean, :banner => "print only the gem names"
316
- method_option "only-group", :type => :string, :banner => "print gems from a particular group"
317
- method_option "without-group", :type => :string, :banner => "print all gems expect from a group"
318
- method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
319
- def list
320
- require "bundler/cli/list"
321
- List.new(options).run
316
+ require_relative "cli/show"
317
+ Show.new(options, gem_name).run
322
318
  end
319
+ end
323
320
 
324
- map %w[ls] => "list"
325
- else
326
- map %w[list] => "show"
321
+ desc "list", "List all gems in the bundle"
322
+ method_option "name-only", :type => :boolean, :banner => "print only the gem names"
323
+ method_option "only-group", :type => :string, :banner => "print gems from a particular group"
324
+ method_option "without-group", :type => :string, :banner => "print all gems except from a group"
325
+ method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
326
+ def list
327
+ require_relative "cli/list"
328
+ List.new(options).run
327
329
  end
328
330
 
331
+ map %w[ls] => "list"
332
+
329
333
  desc "info GEM [OPTIONS]", "Show information for the given gem"
330
334
  method_option "path", :type => :boolean, :banner => "Print full path to gem"
331
335
  def info(gem_name)
332
- require "bundler/cli/info"
336
+ require_relative "cli/info"
333
337
  Info.new(options, gem_name).run
334
338
  end
335
339
 
@@ -350,7 +354,7 @@ module Bundler
350
354
  method_option "all", :type => :boolean, :banner =>
351
355
  "Install binstubs for all gems"
352
356
  def binstubs(*gems)
353
- require "bundler/cli/binstubs"
357
+ require_relative "cli/binstubs"
354
358
  Binstubs.new(options, gems).run
355
359
  end
356
360
 
@@ -361,12 +365,14 @@ module Bundler
361
365
  method_option "version", :aliases => "-v", :type => :string
362
366
  method_option "group", :aliases => "-g", :type => :string
363
367
  method_option "source", :aliases => "-s", :type => :string
368
+ method_option "git", :type => :string
369
+ method_option "branch", :type => :string
364
370
  method_option "skip-install", :type => :boolean, :banner =>
365
371
  "Adds gem to the Gemfile but does not install it"
366
372
  method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
367
373
  method_option "strict", :type => :boolean, :banner => "Adds strict declaration of version to gem"
368
374
  def add(*gems)
369
- require "bundler/cli/add"
375
+ require_relative "cli/add"
370
376
  Add.new(options.dup, gems).run
371
377
  end
372
378
 
@@ -386,9 +392,10 @@ module Bundler
386
392
  "Do not attempt to fetch gems remotely and use the gem cache instead"
387
393
  method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
388
394
  method_option "source", :type => :array, :banner => "Check against a specific source"
389
- method_option "strict", :type => :boolean, :banner =>
395
+ strict_is_update = Bundler.feature_flag.forget_cli_options?
396
+ method_option "filter-strict", :type => :boolean, :aliases => strict_is_update ? [] : %w[--strict], :banner =>
390
397
  "Only list newer versions allowed by your Gemfile requirements"
391
- method_option "update-strict", :type => :boolean, :banner =>
398
+ method_option "update-strict", :type => :boolean, :aliases => strict_is_update ? %w[--strict] : [], :banner =>
392
399
  "Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
393
400
  method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
394
401
  method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
@@ -401,28 +408,12 @@ module Bundler
401
408
  method_option "only-explicit", :type => :boolean, :banner =>
402
409
  "Only list gems specified in your Gemfile, not their dependencies"
403
410
  def outdated(*gems)
404
- require "bundler/cli/outdated"
411
+ require_relative "cli/outdated"
405
412
  Outdated.new(options, gems).run
406
413
  end
407
414
 
408
- if Bundler.feature_flag.cache_command_is_package?
409
- map %w[cache] => :package
410
- else
411
- desc "cache [OPTIONS]", "Cache all the gems to vendor/cache", :hide => true
412
- unless Bundler.feature_flag.cache_command_is_package?
413
- method_option "all", :type => :boolean,
414
- :banner => "Include all sources (including path and git)."
415
- end
416
- method_option "all-platforms", :type => :boolean, :banner => "Include gems for all platforms present in the lockfile, not only the current one"
417
- method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
418
- def cache
419
- require "bundler/cli/cache"
420
- Cache.new(options).run
421
- end
422
- end
423
-
424
- desc "#{Bundler.feature_flag.cache_command_is_package? ? :cache : :package} [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
425
- unless Bundler.feature_flag.cache_command_is_package?
415
+ desc "#{Bundler.feature_flag.bundler_3_mode? ? :cache : :package} [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
416
+ unless Bundler.feature_flag.cache_all?
426
417
  method_option "all", :type => :boolean,
427
418
  :banner => "Include all sources (including path and git)."
428
419
  end
@@ -433,7 +424,7 @@ module Bundler
433
424
  method_option "no-install", :type => :boolean, :banner => "Don't install the gems, only the package."
434
425
  method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
435
426
  method_option "path", :type => :string, :banner =>
436
- "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine"
427
+ "Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
437
428
  method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors."
438
429
  method_option "frozen", :type => :boolean, :banner =>
439
430
  "Do not allow the Gemfile.lock to be updated after this package operation's install"
@@ -444,10 +435,10 @@ module Bundler
444
435
  bundle without having to download any additional gems.
445
436
  D
446
437
  def package
447
- require "bundler/cli/package"
438
+ require_relative "cli/package"
448
439
  Package.new(options).run
449
440
  end
450
- map %w[pack] => :package
441
+ map %w[cache pack] => :package
451
442
 
452
443
  desc "exec [OPTIONS]", "Run the command in context of the bundle"
453
444
  method_option :keep_file_descriptors, :type => :boolean, :default => false
@@ -459,7 +450,7 @@ module Bundler
459
450
  D
460
451
  map "e" => "exec"
461
452
  def exec(*args)
462
- require "bundler/cli/exec"
453
+ require_relative "cli/exec"
463
454
  Exec.new(options, args).run
464
455
  end
465
456
 
@@ -475,22 +466,19 @@ module Bundler
475
466
  will show the current value, as well as any superceded values and
476
467
  where they were specified.
477
468
  D
478
- method_option "parseable", :type => :boolean, :banner => "Use minimal formatting for more parseable output"
479
- def config(*args)
480
- require "bundler/cli/config"
481
- Config.new(options, args, self).run
482
- end
469
+ require_relative "cli/config"
470
+ subcommand "config", Config
483
471
 
484
472
  desc "open GEM", "Opens the source directory of the given bundled gem"
485
473
  def open(name)
486
- require "bundler/cli/open"
474
+ require_relative "cli/open"
487
475
  Open.new(options, name).run
488
476
  end
489
477
 
490
- if Bundler.feature_flag.console_command?
478
+ unless Bundler.feature_flag.bundler_3_mode?
491
479
  desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
492
480
  def console(group = nil)
493
- require "bundler/cli/console"
481
+ require_relative "cli/console"
494
482
  Console.new(options, group).run
495
483
  end
496
484
  end
@@ -524,7 +512,7 @@ module Bundler
524
512
  end
525
513
  end
526
514
 
527
- if Bundler.feature_flag.viz_command?
515
+ unless Bundler.feature_flag.bundler_3_mode?
528
516
  desc "viz [OPTIONS]", "Generates a visual dependency graph", :hide => true
529
517
  long_desc <<-D
530
518
  Viz generates a PNG file of the current Gemfile as a dependency graph.
@@ -538,7 +526,7 @@ module Bundler
538
526
  method_option :without, :type => :array, :default => [], :aliases => "-W", :banner => "GROUP[ GROUP...]", :desc => "Exclude gems that are part of the specified named group."
539
527
  def viz
540
528
  SharedHelpers.major_deprecation 2, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
541
- require "bundler/cli/viz"
529
+ require_relative "cli/viz"
542
530
  Viz.new(options.dup).run
543
531
  end
544
532
  end
@@ -547,14 +535,15 @@ module Bundler
547
535
 
548
536
  desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
549
537
  method_option :exe, :type => :boolean, :default => false, :aliases => ["--bin", "-b"], :desc => "Generate a binary executable for your library."
550
- method_option :coc, :type => :boolean, :desc => "Generate a code of conduct file. Set a default with `bundle config gem.coc true`."
538
+ method_option :coc, :type => :boolean, :desc => "Generate a code of conduct file. Set a default with `bundle config set gem.coc true`."
551
539
  method_option :edit, :type => :string, :aliases => "-e", :required => false, :banner => "EDITOR",
552
540
  :lazy_default => [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
553
541
  :desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
554
542
  method_option :ext, :type => :boolean, :default => false, :desc => "Generate the boilerplate for C extension code"
555
- method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config gem.mit true`."
543
+ method_option :git, :type => :boolean, :default => true, :desc => "Initialize a git repo inside your library."
544
+ method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set gem.mit true`."
556
545
  method_option :test, :type => :string, :lazy_default => "rspec", :aliases => "-t", :banner => "rspec",
557
- :desc => "Generate a test directory for your library, either rspec or minitest. Set a default with `bundle config gem.test rspec`."
546
+ :desc => "Generate a test directory for your library, either rspec or minitest. Set a default with `bundle config set gem.test rspec`."
558
547
  def gem(name)
559
548
  end
560
549
 
@@ -562,7 +551,7 @@ module Bundler
562
551
  def gem_command.run(instance, args = [])
563
552
  arity = 1 # name
564
553
 
565
- require "bundler/cli/gem"
554
+ require_relative "cli/gem"
566
555
  cmd_args = args + [instance]
567
556
  cmd_args.unshift(instance.options)
568
557
 
@@ -590,7 +579,7 @@ module Bundler
590
579
  method_option "force", :type => :boolean, :default => false, :banner =>
591
580
  "Forces clean even if --path is not set"
592
581
  def clean
593
- require "bundler/cli/clean"
582
+ require_relative "cli/clean"
594
583
  Clean.new(options.dup).run
595
584
  end
596
585
 
@@ -598,7 +587,7 @@ module Bundler
598
587
  method_option "ruby", :type => :boolean, :default => false, :banner =>
599
588
  "only display ruby related platform information"
600
589
  def platform
601
- require "bundler/cli/platform"
590
+ require_relative "cli/platform"
602
591
  Platform.new(options).run
603
592
  end
604
593
 
@@ -609,7 +598,7 @@ module Bundler
609
598
  "Install gem into a bundler group"
610
599
  def inject(name, version)
611
600
  SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
612
- require "bundler/cli/inject"
601
+ require_relative "cli/inject"
613
602
  Inject.new(options.dup, name, version).run
614
603
  end
615
604
 
@@ -620,6 +609,8 @@ module Bundler
620
609
  "do not attempt to fetch remote gemspecs and use the local gem cache only"
621
610
  method_option "print", :type => :boolean, :default => false, :banner =>
622
611
  "print the lockfile to STDOUT instead of writing to the file system"
612
+ method_option "gemfile", :type => :string, :banner =>
613
+ "Use the specified gemfile instead of Gemfile"
623
614
  method_option "lockfile", :type => :string, :default => nil, :banner =>
624
615
  "the path the lockfile should be written to"
625
616
  method_option "full-index", :type => :boolean, :default => false, :banner =>
@@ -639,7 +630,7 @@ module Bundler
639
630
  method_option "conservative", :type => :boolean, :banner =>
640
631
  "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
641
632
  def lock
642
- require "bundler/cli/lock"
633
+ require_relative "cli/lock"
643
634
  Lock.new(options).run
644
635
  end
645
636
 
@@ -659,13 +650,13 @@ module Bundler
659
650
  method_option "quiet", :type => :boolean, :banner =>
660
651
  "Only output warnings and errors."
661
652
  def doctor
662
- require "bundler/cli/doctor"
653
+ require_relative "cli/doctor"
663
654
  Doctor.new(options).run
664
655
  end
665
656
 
666
657
  desc "issue", "Learn how to report an issue in Bundler"
667
658
  def issue
668
- require "bundler/cli/issue"
659
+ require_relative "cli/issue"
669
660
  Issue.new.run
670
661
  end
671
662
 
@@ -676,12 +667,12 @@ module Bundler
676
667
  checkout --force`.
677
668
  D
678
669
  def pristine(*gems)
679
- require "bundler/cli/pristine"
670
+ require_relative "cli/pristine"
680
671
  Pristine.new(gems).run
681
672
  end
682
673
 
683
674
  if Bundler.feature_flag.plugins?
684
- require "bundler/cli/plugin"
675
+ require_relative "cli/plugin"
685
676
  desc "plugin", "Manage the bundler plugins"
686
677
  subcommand "plugin", Plugin
687
678
  end
@@ -714,7 +705,7 @@ module Bundler
714
705
 
715
706
  # Automatically invoke `bundle install` and resume if
716
707
  # Bundler.settings[:auto_install] exists. This is set through config cmd
717
- # `bundle config auto_install 1`.
708
+ # `bundle config set auto_install 1`.
718
709
  #
719
710
  # Note that this method `nil`s out the global Definition object, so it
720
711
  # should be called first, before you instantiate anything like an
@@ -786,5 +777,22 @@ module Bundler
786
777
  rescue RuntimeError
787
778
  nil
788
779
  end
780
+
781
+ def remembered_flag_deprecation(name)
782
+ option = current_command.options[name]
783
+ flag_name = option.switch_name
784
+
785
+ name_index = ARGV.find {|arg| flag_name == arg }
786
+ return unless name_index
787
+
788
+ value = options[name]
789
+ value = value.join(" ").to_s if option.type == :array
790
+
791
+ Bundler::SharedHelpers.major_deprecation 2,\
792
+ "The `#{flag_name}` flag is deprecated because it relies on being " \
793
+ "remembered accross bundler invokations, which bundler will no longer " \
794
+ "do in future versions. Instead please use `bundle config set #{name} " \
795
+ "'#{value}'`, and stop using this flag"
796
+ end
789
797
  end
790
798
  end