bundler 2.0.2 → 2.1.0.pre.1

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 (210) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +687 -574
  3. data/LICENSE.md +18 -19
  4. data/README.md +8 -7
  5. data/bundler.gemspec +5 -23
  6. data/exe/bundle +19 -3
  7. data/lib/bundler.rb +121 -68
  8. data/lib/bundler/build_metadata.rb +3 -3
  9. data/lib/bundler/capistrano.rb +5 -5
  10. data/lib/bundler/cli.rb +130 -124
  11. data/lib/bundler/cli/add.rb +27 -16
  12. data/lib/bundler/cli/common.rb +10 -11
  13. data/lib/bundler/cli/config.rb +161 -86
  14. data/lib/bundler/cli/console.rb +2 -2
  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 +3 -3
  21. data/lib/bundler/cli/issue.rb +1 -1
  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 +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 +8 -7
  32. data/lib/bundler/definition.rb +33 -26
  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 +6 -5
  37. data/lib/bundler/environment_preserver.rb +0 -1
  38. data/lib/bundler/feature_flag.rb +0 -12
  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 +3 -0
  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 +8 -8
  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 +3 -1
  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 -4
  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 +29 -18
  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 +10 -2
  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 +2 -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 -65
  70. data/lib/bundler/rubygems_gem_installer.rb +1 -1
  71. data/lib/bundler/rubygems_integration.rb +135 -403
  72. data/lib/bundler/runtime.rb +2 -9
  73. data/lib/bundler/settings.rb +15 -48
  74. data/lib/bundler/setup.rb +6 -5
  75. data/lib/bundler/shared_helpers.rb +53 -68
  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 +7 -2
  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 +1 -6
  86. data/lib/bundler/stub_specification.rb +18 -30
  87. data/lib/bundler/templates/Executable.bundler +22 -13
  88. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
  89. data/lib/bundler/templates/newgem/Gemfile.tt +8 -0
  90. data/lib/bundler/templates/newgem/README.md.tt +4 -3
  91. data/lib/bundler/templates/newgem/newgem.gemspec.tt +2 -18
  92. data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
  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 +1 -1
  102. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
  103. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  104. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  105. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  106. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  107. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  108. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
  109. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  110. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  111. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
  112. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
  113. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
  114. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
  115. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
  116. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
  117. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
  118. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
  119. data/lib/bundler/vendor/thor/lib/thor.rb +1 -1
  120. data/lib/bundler/vendor/thor/lib/thor/actions.rb +7 -7
  121. data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
  122. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
  123. data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
  124. data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
  125. data/lib/bundler/vendor/thor/lib/thor/base.rb +13 -13
  126. data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
  127. data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
  128. data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
  129. data/lib/bundler/vendor/thor/lib/thor/runner.rb +4 -4
  130. data/lib/bundler/vendor/thor/lib/thor/shell.rb +3 -3
  131. data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
  132. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  133. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  134. data/lib/bundler/vendored_fileutils.rb +1 -6
  135. data/lib/bundler/vendored_molinillo.rb +1 -1
  136. data/lib/bundler/vendored_persistent.rb +7 -5
  137. data/lib/bundler/vendored_thor.rb +2 -2
  138. data/lib/bundler/version.rb +1 -20
  139. data/lib/bundler/version_ranges.rb +51 -5
  140. data/lib/bundler/vlad.rb +3 -3
  141. data/lib/bundler/worker.rb +1 -3
  142. data/lib/bundler/yaml_serializer.rb +2 -3
  143. data/man/bundle-add.1 +10 -2
  144. data/man/bundle-add.1.txt +11 -5
  145. data/man/bundle-add.ronn +7 -1
  146. data/man/bundle-binstubs.1 +2 -2
  147. data/man/bundle-binstubs.1.txt +2 -2
  148. data/man/bundle-binstubs.ronn +1 -1
  149. data/man/bundle-check.1 +1 -1
  150. data/man/bundle-check.1.txt +6 -6
  151. data/man/bundle-clean.1 +1 -1
  152. data/man/bundle-clean.1.txt +1 -1
  153. data/man/bundle-config.1 +35 -35
  154. data/man/bundle-config.1.txt +65 -66
  155. data/man/bundle-config.ronn +41 -39
  156. data/man/bundle-doctor.1 +1 -1
  157. data/man/bundle-doctor.1.txt +1 -1
  158. data/man/bundle-exec.1 +1 -1
  159. data/man/bundle-exec.1.txt +1 -1
  160. data/man/bundle-gem.1 +1 -1
  161. data/man/bundle-gem.1.txt +3 -3
  162. data/man/bundle-info.1 +1 -1
  163. data/man/bundle-info.1.txt +1 -1
  164. data/man/bundle-init.1 +1 -1
  165. data/man/bundle-init.1.txt +1 -1
  166. data/man/bundle-inject.1 +1 -1
  167. data/man/bundle-inject.1.txt +1 -1
  168. data/man/bundle-install.1 +8 -5
  169. data/man/bundle-install.1.txt +56 -51
  170. data/man/bundle-install.ronn +9 -4
  171. data/man/bundle-list.1 +1 -1
  172. data/man/bundle-list.1.txt +1 -1
  173. data/man/bundle-lock.1 +1 -1
  174. data/man/bundle-lock.1.txt +16 -16
  175. data/man/bundle-open.1 +1 -1
  176. data/man/bundle-open.1.txt +1 -1
  177. data/man/bundle-outdated.1 +1 -1
  178. data/man/bundle-outdated.1.txt +1 -1
  179. data/man/bundle-package.1 +1 -1
  180. data/man/bundle-package.1.txt +1 -1
  181. data/man/bundle-platform.1 +1 -1
  182. data/man/bundle-platform.1.txt +1 -1
  183. data/man/bundle-pristine.1 +1 -1
  184. data/man/bundle-pristine.1.txt +1 -1
  185. data/man/bundle-remove.1 +1 -1
  186. data/man/bundle-remove.1.txt +1 -1
  187. data/man/bundle-show.1 +1 -1
  188. data/man/bundle-show.1.txt +1 -1
  189. data/man/bundle-update.1 +4 -4
  190. data/man/bundle-update.1.txt +64 -65
  191. data/man/bundle-update.ronn +3 -3
  192. data/man/bundle-viz.1 +1 -1
  193. data/man/bundle-viz.1.txt +1 -1
  194. data/man/bundle.1 +2 -2
  195. data/man/bundle.1.txt +7 -7
  196. data/man/bundle.ronn +1 -1
  197. data/man/gemfile.5 +12 -15
  198. data/man/gemfile.5.ronn +9 -13
  199. data/man/gemfile.5.txt +103 -107
  200. metadata +11 -112
  201. data/exe/bundle_ruby +0 -60
  202. data/lib/bundler/cli/cache.rb +0 -36
  203. data/lib/bundler/compatibility_guard.rb +0 -13
  204. data/lib/bundler/ssl_certs/.document +0 -1
  205. data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
  206. data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
  207. data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
  208. data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
  209. data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
  210. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "bundler/shared_helpers"
4
- Bundler::SharedHelpers.major_deprecation 3,
5
- "The Bundler task for Capistrano. Please use http://github.com/capistrano/bundler"
3
+ require_relative "shared_helpers"
4
+ Bundler::SharedHelpers.major_deprecation 2,
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
- SharedHelpers.major_deprecation(3, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
233
- require "bundler/cli/install"
228
+ SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
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
@@ -275,63 +276,64 @@ module Bundler
275
276
  method_option "all", :type => :boolean, :banner =>
276
277
  "Update everything."
277
278
  def update(*gems)
278
- SharedHelpers.major_deprecation(3, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
279
- require "bundler/cli/update"
279
+ SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
280
+ require_relative "cli/update"
280
281
  Bundler.settings.temporary(:no_install => false) do
281
282
  Update.new(options, gems).run
282
283
  end
283
284
  end
284
285
 
285
- desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
286
- long_desc <<-D
287
- Show lists the names and versions of all gems that are required by your Gemfile.
288
- Calling show with [GEM] will list the exact location of that gem on your machine.
289
- D
290
- method_option "paths", :type => :boolean,
291
- :banner => "List the paths of all gems that are required by your Gemfile."
292
- method_option "outdated", :type => :boolean,
293
- :banner => "Show verbose output including whether gems are outdated."
294
- def show(gem_name = nil)
295
- if ARGV[0] == "show"
296
- rest = ARGV[1..-1]
297
-
298
- new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
299
-
300
- new_arguments = rest.map do |arg|
301
- next arg if arg != "--paths"
302
- 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
303
315
  end
304
-
305
- old_argv = ARGV.join(" ")
306
- new_argv = [new_command, *new_arguments.compact].join(" ")
307
-
308
- Bundler::SharedHelpers.major_deprecation(3, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
309
- end
310
- require "bundler/cli/show"
311
- Show.new(options, gem_name).run
312
- end
313
- # TODO: 2.0 remove `bundle show`
314
-
315
- if Bundler.feature_flag.list_command?
316
- desc "list", "List all gems in the bundle"
317
- method_option "name-only", :type => :boolean, :banner => "print only the gem names"
318
- method_option "only-group", :type => :string, :banner => "print gems from a particular group"
319
- method_option "without-group", :type => :string, :banner => "print all gems expect from a group"
320
- method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
321
- def list
322
- require "bundler/cli/list"
323
- List.new(options).run
316
+ require_relative "cli/show"
317
+ Show.new(options, gem_name).run
324
318
  end
319
+ end
325
320
 
326
- map %w[ls] => "list"
327
- else
328
- 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
329
329
  end
330
330
 
331
+ map %w[ls] => "list"
332
+
331
333
  desc "info GEM [OPTIONS]", "Show information for the given gem"
332
334
  method_option "path", :type => :boolean, :banner => "Print full path to gem"
333
335
  def info(gem_name)
334
- require "bundler/cli/info"
336
+ require_relative "cli/info"
335
337
  Info.new(options, gem_name).run
336
338
  end
337
339
 
@@ -352,7 +354,7 @@ module Bundler
352
354
  method_option "all", :type => :boolean, :banner =>
353
355
  "Install binstubs for all gems"
354
356
  def binstubs(*gems)
355
- require "bundler/cli/binstubs"
357
+ require_relative "cli/binstubs"
356
358
  Binstubs.new(options, gems).run
357
359
  end
358
360
 
@@ -363,12 +365,14 @@ module Bundler
363
365
  method_option "version", :aliases => "-v", :type => :string
364
366
  method_option "group", :aliases => "-g", :type => :string
365
367
  method_option "source", :aliases => "-s", :type => :string
368
+ method_option "git", :type => :string
369
+ method_option "branch", :type => :string
366
370
  method_option "skip-install", :type => :boolean, :banner =>
367
371
  "Adds gem to the Gemfile but does not install it"
368
372
  method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
369
373
  method_option "strict", :type => :boolean, :banner => "Adds strict declaration of version to gem"
370
374
  def add(*gems)
371
- require "bundler/cli/add"
375
+ require_relative "cli/add"
372
376
  Add.new(options.dup, gems).run
373
377
  end
374
378
 
@@ -388,9 +392,10 @@ module Bundler
388
392
  "Do not attempt to fetch gems remotely and use the gem cache instead"
389
393
  method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
390
394
  method_option "source", :type => :array, :banner => "Check against a specific source"
391
- 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 =>
392
397
  "Only list newer versions allowed by your Gemfile requirements"
393
- method_option "update-strict", :type => :boolean, :banner =>
398
+ method_option "update-strict", :type => :boolean, :aliases => strict_is_update ? %w[--strict] : [], :banner =>
394
399
  "Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
395
400
  method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
396
401
  method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
@@ -403,28 +408,12 @@ module Bundler
403
408
  method_option "only-explicit", :type => :boolean, :banner =>
404
409
  "Only list gems specified in your Gemfile, not their dependencies"
405
410
  def outdated(*gems)
406
- require "bundler/cli/outdated"
411
+ require_relative "cli/outdated"
407
412
  Outdated.new(options, gems).run
408
413
  end
409
414
 
410
- if Bundler.feature_flag.cache_command_is_package?
411
- map %w[cache] => :package
412
- else
413
- desc "cache [OPTIONS]", "Cache all the gems to vendor/cache", :hide => true
414
- unless Bundler.feature_flag.cache_command_is_package?
415
- method_option "all", :type => :boolean,
416
- :banner => "Include all sources (including path and git)."
417
- end
418
- method_option "all-platforms", :type => :boolean, :banner => "Include gems for all platforms present in the lockfile, not only the current one"
419
- method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
420
- def cache
421
- require "bundler/cli/cache"
422
- Cache.new(options).run
423
- end
424
- end
425
-
426
- desc "#{Bundler.feature_flag.cache_command_is_package? ? :cache : :package} [OPTIONS]", "Locks and then caches all of the gems into vendor/cache"
427
- 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?
428
417
  method_option "all", :type => :boolean,
429
418
  :banner => "Include all sources (including path and git)."
430
419
  end
@@ -435,7 +424,7 @@ module Bundler
435
424
  method_option "no-install", :type => :boolean, :banner => "Don't install the gems, only the package."
436
425
  method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
437
426
  method_option "path", :type => :string, :banner =>
438
- "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?}"
439
428
  method_option "quiet", :type => :boolean, :banner => "Only output warnings and errors."
440
429
  method_option "frozen", :type => :boolean, :banner =>
441
430
  "Do not allow the Gemfile.lock to be updated after this package operation's install"
@@ -446,10 +435,10 @@ module Bundler
446
435
  bundle without having to download any additional gems.
447
436
  D
448
437
  def package
449
- require "bundler/cli/package"
438
+ require_relative "cli/package"
450
439
  Package.new(options).run
451
440
  end
452
- map %w[pack] => :package
441
+ map %w[cache pack] => :package
453
442
 
454
443
  desc "exec [OPTIONS]", "Run the command in context of the bundle"
455
444
  method_option :keep_file_descriptors, :type => :boolean, :default => false
@@ -461,7 +450,7 @@ module Bundler
461
450
  D
462
451
  map "e" => "exec"
463
452
  def exec(*args)
464
- require "bundler/cli/exec"
453
+ require_relative "cli/exec"
465
454
  Exec.new(options, args).run
466
455
  end
467
456
 
@@ -477,22 +466,19 @@ module Bundler
477
466
  will show the current value, as well as any superceded values and
478
467
  where they were specified.
479
468
  D
480
- method_option "parseable", :type => :boolean, :banner => "Use minimal formatting for more parseable output"
481
- def config(*args)
482
- require "bundler/cli/config"
483
- Config.new(options, args, self).run
484
- end
469
+ require_relative "cli/config"
470
+ subcommand "config", Config
485
471
 
486
472
  desc "open GEM", "Opens the source directory of the given bundled gem"
487
473
  def open(name)
488
- require "bundler/cli/open"
474
+ require_relative "cli/open"
489
475
  Open.new(options, name).run
490
476
  end
491
477
 
492
- if Bundler.feature_flag.console_command?
478
+ unless Bundler.feature_flag.bundler_3_mode?
493
479
  desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
494
480
  def console(group = nil)
495
- require "bundler/cli/console"
481
+ require_relative "cli/console"
496
482
  Console.new(options, group).run
497
483
  end
498
484
  end
@@ -526,7 +512,7 @@ module Bundler
526
512
  end
527
513
  end
528
514
 
529
- if Bundler.feature_flag.viz_command?
515
+ unless Bundler.feature_flag.bundler_3_mode?
530
516
  desc "viz [OPTIONS]", "Generates a visual dependency graph", :hide => true
531
517
  long_desc <<-D
532
518
  Viz generates a PNG file of the current Gemfile as a dependency graph.
@@ -539,8 +525,8 @@ module Bundler
539
525
  method_option :version, :type => :boolean, :default => false, :aliases => "-v", :desc => "Set to show each gem version."
540
526
  method_option :without, :type => :array, :default => [], :aliases => "-W", :banner => "GROUP[ GROUP...]", :desc => "Exclude gems that are part of the specified named group."
541
527
  def viz
542
- SharedHelpers.major_deprecation 3, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
543
- require "bundler/cli/viz"
528
+ SharedHelpers.major_deprecation 2, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
529
+ require_relative "cli/viz"
544
530
  Viz.new(options.dup).run
545
531
  end
546
532
  end
@@ -549,14 +535,15 @@ module Bundler
549
535
 
550
536
  desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
551
537
  method_option :exe, :type => :boolean, :default => false, :aliases => ["--bin", "-b"], :desc => "Generate a binary executable for your library."
552
- 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`."
553
539
  method_option :edit, :type => :string, :aliases => "-e", :required => false, :banner => "EDITOR",
554
540
  :lazy_default => [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
555
541
  :desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
556
542
  method_option :ext, :type => :boolean, :default => false, :desc => "Generate the boilerplate for C extension code"
557
- 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`."
558
545
  method_option :test, :type => :string, :lazy_default => "rspec", :aliases => "-t", :banner => "rspec",
559
- :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`."
560
547
  def gem(name)
561
548
  end
562
549
 
@@ -564,7 +551,7 @@ module Bundler
564
551
  def gem_command.run(instance, args = [])
565
552
  arity = 1 # name
566
553
 
567
- require "bundler/cli/gem"
554
+ require_relative "cli/gem"
568
555
  cmd_args = args + [instance]
569
556
  cmd_args.unshift(instance.options)
570
557
 
@@ -592,7 +579,7 @@ module Bundler
592
579
  method_option "force", :type => :boolean, :default => false, :banner =>
593
580
  "Forces clean even if --path is not set"
594
581
  def clean
595
- require "bundler/cli/clean"
582
+ require_relative "cli/clean"
596
583
  Clean.new(options.dup).run
597
584
  end
598
585
 
@@ -600,7 +587,7 @@ module Bundler
600
587
  method_option "ruby", :type => :boolean, :default => false, :banner =>
601
588
  "only display ruby related platform information"
602
589
  def platform
603
- require "bundler/cli/platform"
590
+ require_relative "cli/platform"
604
591
  Platform.new(options).run
605
592
  end
606
593
 
@@ -610,8 +597,8 @@ module Bundler
610
597
  method_option "group", :type => :string, :banner =>
611
598
  "Install gem into a bundler group"
612
599
  def inject(name, version)
613
- SharedHelpers.major_deprecation 3, "The `inject` command has been replaced by the `add` command"
614
- require "bundler/cli/inject"
600
+ SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
601
+ require_relative "cli/inject"
615
602
  Inject.new(options.dup, name, version).run
616
603
  end
617
604
 
@@ -622,6 +609,8 @@ module Bundler
622
609
  "do not attempt to fetch remote gemspecs and use the local gem cache only"
623
610
  method_option "print", :type => :boolean, :default => false, :banner =>
624
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"
625
614
  method_option "lockfile", :type => :string, :default => nil, :banner =>
626
615
  "the path the lockfile should be written to"
627
616
  method_option "full-index", :type => :boolean, :default => false, :banner =>
@@ -641,7 +630,7 @@ module Bundler
641
630
  method_option "conservative", :type => :boolean, :banner =>
642
631
  "If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
643
632
  def lock
644
- require "bundler/cli/lock"
633
+ require_relative "cli/lock"
645
634
  Lock.new(options).run
646
635
  end
647
636
 
@@ -661,13 +650,13 @@ module Bundler
661
650
  method_option "quiet", :type => :boolean, :banner =>
662
651
  "Only output warnings and errors."
663
652
  def doctor
664
- require "bundler/cli/doctor"
653
+ require_relative "cli/doctor"
665
654
  Doctor.new(options).run
666
655
  end
667
656
 
668
657
  desc "issue", "Learn how to report an issue in Bundler"
669
658
  def issue
670
- require "bundler/cli/issue"
659
+ require_relative "cli/issue"
671
660
  Issue.new.run
672
661
  end
673
662
 
@@ -678,12 +667,12 @@ module Bundler
678
667
  checkout --force`.
679
668
  D
680
669
  def pristine(*gems)
681
- require "bundler/cli/pristine"
670
+ require_relative "cli/pristine"
682
671
  Pristine.new(gems).run
683
672
  end
684
673
 
685
674
  if Bundler.feature_flag.plugins?
686
- require "bundler/cli/plugin"
675
+ require_relative "cli/plugin"
687
676
  desc "plugin", "Manage the bundler plugins"
688
677
  subcommand "plugin", Plugin
689
678
  end
@@ -716,7 +705,7 @@ module Bundler
716
705
 
717
706
  # Automatically invoke `bundle install` and resume if
718
707
  # Bundler.settings[:auto_install] exists. This is set through config cmd
719
- # `bundle config auto_install 1`.
708
+ # `bundle config set auto_install 1`.
720
709
  #
721
710
  # Note that this method `nil`s out the global Definition object, so it
722
711
  # should be called first, before you instantiate anything like an
@@ -788,5 +777,22 @@ module Bundler
788
777
  rescue RuntimeError
789
778
  nil
790
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
791
797
  end
792
798
  end