bundler 1.15.4 → 1.16.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 (251) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +43 -0
  3. data/README.md +12 -7
  4. data/exe/bundle +1 -1
  5. data/exe/bundle_ruby +4 -3
  6. data/lib/bundler.rb +47 -37
  7. data/lib/bundler/build_metadata.rb +38 -0
  8. data/lib/bundler/capistrano.rb +5 -0
  9. data/lib/bundler/cli.rb +155 -67
  10. data/lib/bundler/cli/add.rb +0 -1
  11. data/lib/bundler/cli/binstubs.rb +9 -7
  12. data/lib/bundler/cli/cache.rb +5 -4
  13. data/lib/bundler/cli/check.rb +3 -5
  14. data/lib/bundler/cli/clean.rb +5 -6
  15. data/lib/bundler/cli/common.rb +11 -2
  16. data/lib/bundler/cli/config.rb +2 -1
  17. data/lib/bundler/cli/console.rb +2 -1
  18. data/lib/bundler/cli/doctor.rb +1 -0
  19. data/lib/bundler/cli/exec.rb +2 -1
  20. data/lib/bundler/cli/gem.rb +3 -2
  21. data/lib/bundler/cli/info.rb +0 -1
  22. data/lib/bundler/cli/init.rb +17 -6
  23. data/lib/bundler/cli/inject.rb +1 -0
  24. data/lib/bundler/cli/install.rb +61 -61
  25. data/lib/bundler/cli/issue.rb +1 -1
  26. data/lib/bundler/cli/list.rb +22 -0
  27. data/lib/bundler/cli/lock.rb +0 -1
  28. data/lib/bundler/cli/open.rb +2 -2
  29. data/lib/bundler/cli/outdated.rb +13 -8
  30. data/lib/bundler/cli/package.rb +9 -6
  31. data/lib/bundler/cli/platform.rb +1 -0
  32. data/lib/bundler/cli/plugin.rb +1 -0
  33. data/lib/bundler/cli/pristine.rb +9 -2
  34. data/lib/bundler/cli/show.rb +0 -1
  35. data/lib/bundler/cli/update.rb +31 -5
  36. data/lib/bundler/cli/viz.rb +1 -0
  37. data/lib/bundler/compact_index_client.rb +1 -0
  38. data/lib/bundler/compact_index_client/cache.rb +1 -0
  39. data/lib/bundler/compact_index_client/updater.rb +3 -2
  40. data/lib/bundler/compatibility_guard.rb +14 -0
  41. data/lib/bundler/constants.rb +1 -0
  42. data/lib/bundler/current_ruby.rb +5 -4
  43. data/lib/bundler/definition.rb +140 -95
  44. data/lib/bundler/dep_proxy.rb +2 -0
  45. data/lib/bundler/dependency.rb +6 -7
  46. data/lib/bundler/deployment.rb +1 -1
  47. data/lib/bundler/deprecate.rb +1 -0
  48. data/lib/bundler/dsl.rb +97 -62
  49. data/lib/bundler/endpoint_specification.rb +9 -0
  50. data/lib/bundler/env.rb +63 -27
  51. data/lib/bundler/environment_preserver.rb +26 -6
  52. data/lib/bundler/errors.rb +1 -0
  53. data/lib/bundler/feature_flag.rb +39 -4
  54. data/lib/bundler/fetcher.rb +15 -8
  55. data/lib/bundler/fetcher/base.rb +1 -0
  56. data/lib/bundler/fetcher/compact_index.rb +2 -11
  57. data/lib/bundler/fetcher/dependency.rb +1 -0
  58. data/lib/bundler/fetcher/downloader.rb +1 -0
  59. data/lib/bundler/fetcher/index.rb +1 -0
  60. data/lib/bundler/friendly_errors.rb +2 -1
  61. data/lib/bundler/gem_helper.rb +14 -9
  62. data/lib/bundler/gem_helpers.rb +1 -0
  63. data/lib/bundler/gem_remote_fetcher.rb +1 -0
  64. data/lib/bundler/gem_tasks.rb +1 -0
  65. data/lib/bundler/gem_version_promoter.rb +1 -0
  66. data/lib/bundler/gemdeps.rb +1 -0
  67. data/lib/bundler/graph.rb +1 -0
  68. data/lib/bundler/index.rb +15 -8
  69. data/lib/bundler/injector.rb +25 -22
  70. data/lib/bundler/inline.rb +5 -7
  71. data/lib/bundler/installer.rb +93 -45
  72. data/lib/bundler/installer/gem_installer.rb +2 -0
  73. data/lib/bundler/installer/parallel_installer.rb +73 -42
  74. data/lib/bundler/installer/standalone.rb +1 -0
  75. data/lib/bundler/lazy_specification.rb +2 -1
  76. data/lib/bundler/lockfile_generator.rb +95 -0
  77. data/lib/bundler/lockfile_parser.rb +10 -4
  78. data/lib/bundler/match_platform.rb +1 -0
  79. data/lib/bundler/mirror.rb +6 -3
  80. data/lib/bundler/plugin.rb +1 -0
  81. data/lib/bundler/plugin/api/source.rb +8 -0
  82. data/lib/bundler/plugin/installer.rb +7 -6
  83. data/lib/bundler/plugin/source_list.rb +7 -8
  84. data/lib/bundler/process_lock.rb +24 -0
  85. data/lib/bundler/psyched_yaml.rb +1 -0
  86. data/lib/bundler/remote_specification.rb +1 -0
  87. data/lib/bundler/resolver.rb +138 -191
  88. data/lib/bundler/resolver/spec_group.rb +111 -0
  89. data/lib/bundler/retry.rb +1 -0
  90. data/lib/bundler/ruby_dsl.rb +1 -0
  91. data/lib/bundler/ruby_version.rb +1 -0
  92. data/lib/bundler/rubygems_ext.rb +5 -4
  93. data/lib/bundler/rubygems_gem_installer.rb +23 -0
  94. data/lib/bundler/rubygems_integration.rb +56 -27
  95. data/lib/bundler/runtime.rb +3 -5
  96. data/lib/bundler/settings.rb +177 -76
  97. data/lib/bundler/settings/validator.rb +79 -0
  98. data/lib/bundler/setup.rb +1 -0
  99. data/lib/bundler/shared_helpers.rb +86 -26
  100. data/lib/bundler/similarity_detector.rb +1 -0
  101. data/lib/bundler/source.rb +32 -0
  102. data/lib/bundler/source/gemspec.rb +1 -0
  103. data/lib/bundler/source/git.rb +21 -16
  104. data/lib/bundler/source/git/git_proxy.rb +14 -10
  105. data/lib/bundler/source/metadata.rb +63 -0
  106. data/lib/bundler/source/path.rb +8 -8
  107. data/lib/bundler/source/path/installer.rb +2 -0
  108. data/lib/bundler/source/rubygems.rb +131 -84
  109. data/lib/bundler/source/rubygems/remote.rb +3 -0
  110. data/lib/bundler/source_list.rb +75 -15
  111. data/lib/bundler/spec_set.rb +2 -1
  112. data/lib/bundler/ssl_certs/certificate_manager.rb +2 -1
  113. data/lib/bundler/stub_specification.rb +1 -0
  114. data/lib/bundler/templates/Executable +4 -0
  115. data/lib/bundler/templates/Executable.bundler +105 -0
  116. data/lib/bundler/templates/Gemfile +1 -0
  117. data/lib/bundler/templates/gems.rb +8 -0
  118. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  119. data/lib/bundler/templates/newgem/gitignore.tt +0 -1
  120. data/lib/bundler/templates/newgem/newgem.gemspec.tt +4 -1
  121. data/lib/bundler/templates/newgem/rspec.tt +1 -0
  122. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +0 -2
  123. data/lib/bundler/ui.rb +1 -0
  124. data/lib/bundler/ui/rg_proxy.rb +1 -0
  125. data/lib/bundler/ui/shell.rb +15 -4
  126. data/lib/bundler/ui/silent.rb +1 -0
  127. data/lib/bundler/uri_credentials_filter.rb +1 -0
  128. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
  129. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +2 -0
  130. data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
  131. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
  132. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +1 -0
  133. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -2
  134. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
  135. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -0
  136. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -0
  137. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -0
  138. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -0
  139. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -0
  140. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -0
  141. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -0
  142. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +3 -2
  143. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +69 -6
  144. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +2 -1
  145. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +1 -0
  146. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +3 -1
  147. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +487 -148
  148. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +1 -0
  149. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +8 -4
  150. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  151. data/lib/bundler/vendored_fileutils.rb +9 -0
  152. data/lib/bundler/vendored_molinillo.rb +1 -0
  153. data/lib/bundler/vendored_persistent.rb +34 -0
  154. data/lib/bundler/vendored_thor.rb +1 -0
  155. data/lib/bundler/version.rb +6 -2
  156. data/lib/bundler/version_ranges.rb +1 -0
  157. data/lib/bundler/vlad.rb +5 -0
  158. data/lib/bundler/worker.rb +1 -0
  159. data/lib/bundler/yaml_serializer.rb +3 -3
  160. data/man/bundle-add.1 +43 -0
  161. data/man/bundle-add.1.txt +40 -0
  162. data/man/bundle-binstubs.1 +40 -0
  163. data/man/bundle-binstubs.1.txt +48 -0
  164. data/man/bundle-binstubs.ronn +14 -0
  165. data/man/bundle-check.1 +31 -0
  166. data/man/bundle-check.1.txt +32 -0
  167. data/man/bundle-clean.1 +24 -0
  168. data/man/bundle-clean.1.txt +26 -0
  169. data/man/bundle-config.1 +455 -0
  170. data/man/bundle-config.1.txt +491 -0
  171. data/man/bundle-config.ronn +133 -79
  172. data/man/bundle-exec.1 +165 -0
  173. data/man/bundle-exec.1.txt +178 -0
  174. data/man/bundle-exec.ronn +7 -0
  175. data/man/bundle-gem.1 +80 -0
  176. data/man/bundle-gem.1.txt +91 -0
  177. data/man/bundle-gem.ronn +2 -1
  178. data/man/bundle-info.1 +20 -0
  179. data/man/bundle-info.1.txt +21 -0
  180. data/man/bundle-init.1 +20 -0
  181. data/man/bundle-init.1.txt +24 -0
  182. data/man/bundle-inject.1 +33 -0
  183. data/man/bundle-inject.1.txt +32 -0
  184. data/man/bundle-install.1 +305 -0
  185. data/man/bundle-install.1.txt +385 -0
  186. data/man/bundle-install.ronn +32 -32
  187. data/man/bundle-list.1 +20 -0
  188. data/man/bundle-list.1.txt +21 -0
  189. data/man/bundle-list.ronn +15 -0
  190. data/man/bundle-lock.1 +84 -0
  191. data/man/bundle-lock.1.txt +93 -0
  192. data/man/bundle-open.1 +32 -0
  193. data/man/bundle-open.1.txt +29 -0
  194. data/man/bundle-outdated.1 +151 -0
  195. data/man/bundle-outdated.1.txt +127 -0
  196. data/man/bundle-outdated.ronn +1 -1
  197. data/man/bundle-package.1 +55 -0
  198. data/man/bundle-package.1.txt +79 -0
  199. data/man/bundle-package.ronn +5 -0
  200. data/man/bundle-platform.1 +61 -0
  201. data/man/bundle-platform.1.txt +57 -0
  202. data/man/bundle-pristine.1 +34 -0
  203. data/man/bundle-pristine.1.txt +44 -0
  204. data/man/bundle-pristine.ronn +24 -3
  205. data/man/bundle-show.1 +23 -0
  206. data/man/bundle-show.1.txt +25 -0
  207. data/man/bundle-update.1 +390 -0
  208. data/man/bundle-update.1.txt +386 -0
  209. data/man/bundle-update.ronn +2 -2
  210. data/man/bundle-viz.1 +39 -0
  211. data/man/bundle-viz.1.txt +38 -0
  212. data/man/bundle-viz.ronn +5 -5
  213. data/man/bundle.1 +132 -0
  214. data/man/bundle.1.txt +113 -0
  215. data/man/bundle.ronn +5 -2
  216. data/man/gemfile.5 +679 -0
  217. data/man/gemfile.5.ronn +31 -0
  218. data/man/gemfile.5.txt +636 -0
  219. data/man/index.txt +23 -0
  220. metadata +21 -36
  221. data/.codeclimate.yml +0 -25
  222. data/.gitignore +0 -18
  223. data/.rspec +0 -3
  224. data/.rubocop.yml +0 -131
  225. data/.rubocop_todo.yml +0 -418
  226. data/.travis.yml +0 -122
  227. data/CODE_OF_CONDUCT.md +0 -42
  228. data/CONTRIBUTING.md +0 -17
  229. data/Rakefile +0 -338
  230. data/bin/rake +0 -19
  231. data/bin/rspec +0 -15
  232. data/bin/rubocop +0 -17
  233. data/bin/with_rubygems +0 -39
  234. data/bundler.gemspec +0 -48
  235. data/doc/README.md +0 -30
  236. data/doc/TROUBLESHOOTING.md +0 -64
  237. data/doc/contributing/BUG_TRIAGE.md +0 -36
  238. data/doc/contributing/COMMUNITY.md +0 -13
  239. data/doc/contributing/GETTING_HELP.md +0 -11
  240. data/doc/contributing/HOW_YOU_CAN_HELP.md +0 -27
  241. data/doc/contributing/ISSUES.md +0 -51
  242. data/doc/contributing/README.md +0 -38
  243. data/doc/development/NEW_FEATURES.md +0 -10
  244. data/doc/development/PULL_REQUESTS.md +0 -40
  245. data/doc/development/README.md +0 -19
  246. data/doc/development/RELEASING.md +0 -9
  247. data/doc/development/SETUP.md +0 -27
  248. data/doc/documentation/README.md +0 -29
  249. data/doc/documentation/VISION.md +0 -26
  250. data/doc/documentation/WRITING.md +0 -54
  251. data/task/release.rake +0 -116
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Add
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Binstubs
@@ -11,8 +10,10 @@ module Bundler
11
10
 
12
11
  def run
13
12
  Bundler.definition.validate_runtime!
14
- Bundler.settings[:bin] = options["path"] if options["path"]
15
- Bundler.settings[:bin] = nil if options["path"] && options["path"].empty?
13
+ path_option = options["path"]
14
+ path_option = nil if path_option && path_option.empty?
15
+ Bundler.settings.set_command_option :bin, path_option if options["path"]
16
+ Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
16
17
  installer = Installer.new(Bundler.root, Bundler.definition)
17
18
 
18
19
  if gems.empty?
@@ -28,10 +29,11 @@ module Bundler
28
29
  )
29
30
  end
30
31
 
31
- if spec.name == "bundler"
32
- Bundler.ui.warn "Sorry, Bundler can only be run via Rubygems."
33
- elsif options[:standalone]
34
- installer.generate_standalone_bundler_executable_stubs(spec)
32
+ if options[:standalone]
33
+ next Bundler.ui.warn("Sorry, Bundler can only be run via RubyGems.") if gem_name == "bundler"
34
+ Bundler.settings.temporary(:path => (Bundler.settings[:path] || Bundler.root)) do
35
+ installer.generate_standalone_bundler_executable_stubs(spec)
36
+ end
35
37
  else
36
38
  installer.generate_bundler_executable_stubs(spec, :force => options[:force], :binstubs_cmd => true)
37
39
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Cache
4
5
  attr_reader :options
@@ -10,9 +11,9 @@ module Bundler
10
11
  Bundler.definition.validate_runtime!
11
12
  Bundler.definition.resolve_with_cache!
12
13
  setup_cache_all
13
- Bundler.settings[:cache_all_platforms] = options["all-platforms"] if options.key?("all-platforms")
14
+ Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
14
15
  Bundler.load.cache
15
- Bundler.settings[:no_prune] = true if options["no-prune"]
16
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
16
17
  Bundler.load.lock
17
18
  rescue GemNotFound => e
18
19
  Bundler.ui.error(e.message)
@@ -23,9 +24,9 @@ module Bundler
23
24
  private
24
25
 
25
26
  def setup_cache_all
26
- Bundler.settings[:cache_all] = options[:all] if options.key?("all")
27
+ Bundler.settings.set_command_option_if_given :cache_all, options[:all]
27
28
 
28
- if Bundler.definition.has_local_dependencies? && !Bundler.settings[:cache_all]
29
+ if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
29
30
  Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
30
31
  "to package them as well, please pass the --all flag. This will be the default " \
31
32
  "on Bundler 2.0."
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Check
4
5
  attr_reader :options
@@ -8,10 +9,7 @@ module Bundler
8
9
  end
9
10
 
10
11
  def run
11
- if options[:path]
12
- Bundler.settings[:path] = File.expand_path(options[:path])
13
- Bundler.settings[:disable_shared_gems] = true
14
- end
12
+ Bundler.settings.set_command_option_if_given :path, options[:path]
15
13
 
16
14
  begin
17
15
  definition = Bundler.definition
@@ -28,7 +26,7 @@ module Bundler
28
26
  not_installed.each {|s| Bundler.ui.error " * #{s.name} (#{s.version})" }
29
27
  Bundler.ui.warn "Install missing gems with `bundle install`"
30
28
  exit 1
31
- elsif !Bundler.default_lockfile.file? && Bundler.settings[:frozen]
29
+ elsif !Bundler.default_lockfile.file? && Bundler.frozen?
32
30
  Bundler.ui.error "This bundle has been frozen, but there is no #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} present"
33
31
  exit 1
34
32
  else
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Clean
4
5
  attr_reader :options
@@ -15,12 +16,10 @@ module Bundler
15
16
  protected
16
17
 
17
18
  def require_path_or_force
18
- if !Bundler.settings[:path] && !options[:force]
19
- Bundler.ui.error "Cleaning all the gems on your system is dangerous! " \
20
- "If you're sure you want to remove every system gem not in this " \
21
- "bundle, run `bundle clean --force`."
22
- exit 1
23
- end
19
+ return unless Bundler.use_system_gems? && !options[:force]
20
+ raise InvalidOption, "Cleaning all the gems on your system is dangerous! " \
21
+ "If you're sure you want to remove every system gem not in this " \
22
+ "bundle, run `bundle clean --force`."
24
23
  end
25
24
  end
26
25
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  module CLI::Common
4
5
  def self.output_post_install_messages(messages)
@@ -14,12 +15,12 @@ module Bundler
14
15
  end
15
16
 
16
17
  def self.output_without_groups_message
17
- return unless Bundler.settings.without.any?
18
+ return if Bundler.settings[:without].empty?
18
19
  Bundler.ui.confirm without_groups_message
19
20
  end
20
21
 
21
22
  def self.without_groups_message
22
- groups = Bundler.settings.without
23
+ groups = Bundler.settings[:without]
23
24
  group_list = [groups[0...-1].join(", "), groups[-1..-1]].
24
25
  reject {|s| s.to_s.empty? }.join(" and ")
25
26
  group_str = (groups.size == 1) ? "group" : "groups"
@@ -89,5 +90,13 @@ module Bundler
89
90
  def self.patch_level_options(options)
90
91
  [:major, :minor, :patch].select {|v| options.keys.include?(v.to_s) }
91
92
  end
93
+
94
+ def self.clean_after_install?
95
+ clean = Bundler.settings[:clean]
96
+ return clean unless clean.nil?
97
+ clean ||= Bundler.feature_flag.auto_clean_without_path? && Bundler.settings[:path].nil?
98
+ clean &&= !Bundler.use_system_gems?
99
+ clean
100
+ end
92
101
  end
93
102
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Config
4
5
  attr_reader :name, :options, :scope, :thor
@@ -112,7 +113,7 @@ module Bundler
112
113
  end
113
114
 
114
115
  def valid_scope?(scope)
115
- %w(delete local global).include?(scope)
116
+ %w[delete local global].include?(scope)
116
117
  end
117
118
  end
118
119
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Console
4
5
  attr_reader :options, :group
@@ -8,7 +9,7 @@ module Bundler
8
9
  end
9
10
 
10
11
  def run
11
- Bundler::SharedHelpers.major_deprecation "bundle console will be replaced " \
12
+ Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
12
13
  "by `bin/console` generated by `bundle gem <name>`"
13
14
 
14
15
  group ? Bundler.require(:default, *(group.split.map!(&:to_sym))) : Bundler.require
@@ -62,6 +62,7 @@ module Bundler
62
62
 
63
63
  def run
64
64
  Bundler.ui.level = "error" if options[:quiet]
65
+ Bundler.settings.validate!
65
66
  check!
66
67
 
67
68
  definition = Bundler.definition
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "bundler/current_ruby"
3
4
 
4
5
  module Bundler
5
6
  class CLI::Exec
6
7
  attr_reader :options, :args, :cmd
7
8
 
8
- RESERVED_SIGNALS = %w(SEGV BUS ILL FPE VTALRM KILL STOP).freeze
9
+ RESERVED_SIGNALS = %w[SEGV BUS ILL FPE VTALRM KILL STOP].freeze
9
10
 
10
11
  def initialize(options, args)
11
12
  @options = options
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "pathname"
3
4
 
4
5
  module Bundler
@@ -71,10 +72,10 @@ module Bundler
71
72
  "bin/setup.tt" => "bin/setup"
72
73
  }
73
74
 
74
- executables = %w(
75
+ executables = %w[
75
76
  bin/console
76
77
  bin/setup
77
- )
78
+ ]
78
79
 
79
80
  templates.merge!("gitignore.tt" => ".gitignore") if Bundler.git_present?
80
81
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Info
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Init
4
5
  attr_reader :options
@@ -7,8 +8,8 @@ module Bundler
7
8
  end
8
9
 
9
10
  def run
10
- if File.exist?("Gemfile")
11
- Bundler.ui.error "Gemfile already exists at #{SharedHelpers.pwd}/Gemfile"
11
+ if File.exist?(gemfile)
12
+ Bundler.ui.error "#{gemfile} already exists at #{File.expand_path(gemfile)}"
12
13
  exit 1
13
14
  end
14
15
 
@@ -21,14 +22,24 @@ module Bundler
21
22
 
22
23
  spec = Bundler.load_gemspec_uncached(gemspec)
23
24
 
24
- puts "Writing new Gemfile to #{SharedHelpers.pwd}/Gemfile"
25
- File.open("Gemfile", "wb") do |file|
25
+ File.open(gemfile, "wb") do |file|
26
26
  file << "# Generated from #{gemspec}\n"
27
27
  file << spec.to_gemfile
28
28
  end
29
29
  else
30
- puts "Writing new Gemfile to #{SharedHelpers.pwd}/Gemfile"
31
- FileUtils.cp(File.expand_path("../../templates/Gemfile", __FILE__), "Gemfile")
30
+ FileUtils.cp(File.expand_path("../../templates/#{gemfile}", __FILE__), gemfile)
31
+ end
32
+
33
+ puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
34
+ end
35
+
36
+ private
37
+
38
+ def gemfile
39
+ @gemfile ||= begin
40
+ Bundler.default_gemfile
41
+ rescue GemfileNotFound
42
+ Bundler.feature_flag.init_gems_rb? ? "gems.rb" : "Gemfile"
32
43
  end
33
44
  end
34
45
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Bundler
3
4
  class CLI::Inject
4
5
  attr_reader :options, :name, :version, :group, :source, :gems
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "bundler/cli/common"
3
2
 
4
3
  module Bundler
5
4
  class CLI::Install
@@ -13,17 +12,9 @@ module Bundler
13
12
 
14
13
  warn_if_root
15
14
 
16
- [:with, :without].each do |option|
17
- if options[option]
18
- options[option] = options[option].join(":").tr(" ", ":").split(":")
19
- end
20
- end
21
-
22
- check_for_group_conflicts
23
-
24
15
  normalize_groups
25
16
 
26
- ENV["RB_USER_INSTALL"] = "1" if Bundler::FREEBSD
17
+ Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Bundler::FREEBSD
27
18
 
28
19
  # Disable color in deployment mode
29
20
  Bundler.ui.shell = Thor::Shell::Basic.new if options[:deployment]
@@ -32,22 +23,28 @@ module Bundler
32
23
 
33
24
  check_trust_policy
34
25
 
35
- if options[:deployment] || options[:frozen]
26
+ if options[:deployment] || options[:frozen] || Bundler.frozen?
36
27
  unless Bundler.default_lockfile.exist?
37
- flag = options[:deployment] ? "--deployment" : "--frozen"
38
- raise ProductionError, "The #{flag} flag requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
28
+ flag = "--deployment flag" if options[:deployment]
29
+ flag ||= "--frozen flag" if options[:frozen]
30
+ flag ||= "deployment setting"
31
+ raise ProductionError, "The #{flag} requires a #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}. Please make " \
39
32
  "sure you have checked your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} into version control " \
40
33
  "before deploying."
41
34
  end
42
35
 
43
36
  options[:local] = true if Bundler.app_cache.exist?
44
37
 
45
- Bundler.settings[:frozen] = "1"
38
+ if Bundler.feature_flag.deployment_means_frozen?
39
+ Bundler.settings.set_command_option :deployment, true
40
+ else
41
+ Bundler.settings.set_command_option :frozen, true
42
+ end
46
43
  end
47
44
 
48
45
  # When install is called with --no-deployment, disable deployment mode
49
46
  if options[:deployment] == false
50
- Bundler.settings.delete(:frozen)
47
+ Bundler.settings.set_command_option :frozen, nil
51
48
  options[:system] = true
52
49
  end
53
50
 
@@ -56,7 +53,7 @@ module Bundler
56
53
  Bundler::Fetcher.disable_endpoint = options["full-index"]
57
54
 
58
55
  if options["binstubs"]
59
- Bundler::SharedHelpers.major_deprecation \
56
+ Bundler::SharedHelpers.major_deprecation 2,
60
57
  "The --binstubs option will be removed in favor of `bundle binstubs`"
61
58
  end
62
59
 
@@ -66,24 +63,24 @@ module Bundler
66
63
  definition.validate_runtime!
67
64
 
68
65
  installer = Installer.install(Bundler.root, definition, options)
69
- Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.settings[:frozen]
66
+ Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen?
70
67
 
71
68
  Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
72
69
  Bundler::CLI::Common.output_without_groups_message
73
70
 
74
- if Bundler.settings[:path]
75
- absolute_path = File.expand_path(Bundler.settings[:path])
76
- relative_path = absolute_path.sub(File.expand_path(".") + File::SEPARATOR, "." + File::SEPARATOR)
77
- Bundler.ui.confirm "Bundled gems are installed into #{relative_path}."
78
- else
71
+ if Bundler.use_system_gems?
79
72
  Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
73
+ else
74
+ absolute_path = File.expand_path(Bundler.configured_bundle_path.base_path)
75
+ relative_path = absolute_path.sub(File.expand_path(".") + File::SEPARATOR, "." + File::SEPARATOR)
76
+ Bundler.ui.confirm "Bundled gems are installed into `#{relative_path}`"
80
77
  end
81
78
 
82
79
  Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
83
80
 
84
81
  warn_ambiguous_gems
85
82
 
86
- if Bundler.settings[:clean] && Bundler.settings[:path]
83
+ if CLI::Common.clean_after_install?
87
84
  require "bundler/cli/clean"
88
85
  Bundler::CLI::Clean.new(options).run
89
86
  end
@@ -124,15 +121,11 @@ module Bundler
124
121
  "#{count} #{count == 1 ? "gem" : "gems"} now installed"
125
122
  end
126
123
 
127
- def check_for_group_conflicts
128
- if options[:without] && options[:with]
129
- conflicting_groups = options[:without] & options[:with]
130
- unless conflicting_groups.empty?
131
- Bundler.ui.error "You can't list a group in both, --with and --without." \
132
- " The offending groups are: #{conflicting_groups.join(", ")}."
133
- exit 1
134
- end
135
- end
124
+ def check_for_group_conflicts_in_cli_options
125
+ conflicting_groups = Array(options[:without]) & Array(options[:with])
126
+ return if conflicting_groups.empty?
127
+ raise InvalidOption, "You can't list a group in both with and without." \
128
+ " The offending groups are: #{conflicting_groups.join(", ")}."
136
129
  end
137
130
 
138
131
  def check_for_options_conflicts
@@ -145,28 +138,29 @@ module Bundler
145
138
  end
146
139
 
147
140
  def check_trust_policy
148
- if options["trust-policy"]
149
- unless Bundler.rubygems.security_policies.keys.include?(options["trust-policy"])
150
- Bundler.ui.error "Rubygems doesn't know about trust policy '#{options["trust-policy"]}'. " \
151
- "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
152
- exit 1
153
- end
154
- Bundler.settings["trust-policy"] = options["trust-policy"]
155
- else
156
- Bundler.settings["trust-policy"] = nil if Bundler.settings["trust-policy"]
141
+ trust_policy = options["trust-policy"]
142
+ unless Bundler.rubygems.security_policies.keys.unshift(nil).include?(trust_policy)
143
+ raise InvalidOption, "RubyGems doesn't know about trust policy '#{trust_policy}'. " \
144
+ "The known policies are: #{Bundler.rubygems.security_policies.keys.join(", ")}."
157
145
  end
146
+ Bundler.settings.set_command_option_if_given :"trust-policy", trust_policy
158
147
  end
159
148
 
160
149
  def normalize_groups
161
- Bundler.settings.with = [] if options[:with] && options[:with].empty?
162
- Bundler.settings.without = [] if options[:without] && options[:without].empty?
150
+ options[:with] &&= options[:with].join(":").tr(" ", ":").split(":")
151
+ options[:without] &&= options[:without].join(":").tr(" ", ":").split(":")
152
+
153
+ check_for_group_conflicts_in_cli_options
163
154
 
164
- with = options.fetch("with", [])
165
- with |= Bundler.settings.with.map(&:to_s)
155
+ Bundler.settings.set_command_option :with, nil if options[:with] == []
156
+ Bundler.settings.set_command_option :without, nil if options[:without] == []
157
+
158
+ with = options.fetch(:with, [])
159
+ with |= Bundler.settings[:with].map(&:to_s)
166
160
  with -= options[:without] if options[:without]
167
161
 
168
- without = options.fetch("without", [])
169
- without |= Bundler.settings.without.map(&:to_s)
162
+ without = options.fetch(:without, [])
163
+ without |= Bundler.settings[:without].map(&:to_s)
170
164
  without -= options[:with] if options[:with]
171
165
 
172
166
  options[:with] = with
@@ -174,28 +168,34 @@ module Bundler
174
168
  end
175
169
 
176
170
  def normalize_settings
177
- Bundler.settings[:path] = nil if options[:system]
178
- Bundler.settings[:path] = "vendor/bundle" if options[:deployment]
179
- Bundler.settings[:path] = options["path"] if options["path"]
180
- Bundler.settings[:path] ||= "bundle" if options["standalone"]
171
+ Bundler.settings.set_command_option :path, nil if options[:system]
172
+ Bundler.settings.set_command_option :path, "vendor/bundle" if options[:deployment]
173
+ Bundler.settings.set_command_option_if_given :path, options["path"]
174
+ Bundler.settings.set_command_option :path, "bundle" if options["standalone"] && Bundler.settings[:path].nil?
181
175
 
182
- Bundler.settings[:bin] = options["binstubs"] if options["binstubs"]
183
- Bundler.settings[:bin] = nil if options["binstubs"] && options["binstubs"].empty?
176
+ bin_option = options["binstubs"]
177
+ bin_option = nil if bin_option && bin_option.empty?
178
+ Bundler.settings.set_command_option :bin, bin_option if options["binstubs"]
184
179
 
185
- Bundler.settings[:shebang] = options["shebang"] if options["shebang"]
180
+ Bundler.settings.set_command_option_if_given :shebang, options["shebang"]
186
181
 
187
- Bundler.settings[:jobs] = options["jobs"] if options["jobs"]
182
+ Bundler.settings.set_command_option_if_given :jobs, options["jobs"]
188
183
 
189
- Bundler.settings[:no_prune] = true if options["no-prune"]
184
+ Bundler.settings.set_command_option_if_given :no_prune, options["no-prune"]
190
185
 
191
- Bundler.settings[:no_install] = true if options["no-install"]
186
+ Bundler.settings.set_command_option_if_given :no_install, options["no-install"]
192
187
 
193
- Bundler.settings[:clean] = options["clean"] if options["clean"]
188
+ Bundler.settings.set_command_option_if_given :clean, options["clean"]
194
189
 
195
- Bundler.settings.without = options[:without]
196
- Bundler.settings.with = options[:with]
190
+ unless Bundler.settings[:without] == options[:without] && Bundler.settings[:with] == options[:with]
191
+ # need to nil them out first to get around validation for backwards compatibility
192
+ Bundler.settings.set_command_option :without, nil
193
+ Bundler.settings.set_command_option :with, nil
194
+ Bundler.settings.set_command_option :without, options[:without] - options[:with]
195
+ Bundler.settings.set_command_option :with, options[:with]
196
+ end
197
197
 
198
- Bundler.settings[:disable_shared_gems] = Bundler.settings[:path] ? true : nil
198
+ options[:force] = options[:redownload]
199
199
  end
200
200
 
201
201
  def warn_ambiguous_gems