bundler 2.1.1 → 2.2.0.rc.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 (194) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1543 -1418
  3. data/README.md +6 -8
  4. data/bundler.gemspec +3 -3
  5. data/exe/bundle +3 -0
  6. data/lib/bundler.rb +21 -7
  7. data/lib/bundler/build_metadata.rb +3 -11
  8. data/lib/bundler/cli.rb +54 -20
  9. data/lib/bundler/cli/add.rb +1 -1
  10. data/lib/bundler/cli/cache.rb +1 -7
  11. data/lib/bundler/cli/clean.rb +1 -1
  12. data/lib/bundler/cli/common.rb +14 -0
  13. data/lib/bundler/cli/console.rb +1 -1
  14. data/lib/bundler/cli/doctor.rb +1 -1
  15. data/lib/bundler/cli/exec.rb +1 -1
  16. data/lib/bundler/cli/fund.rb +36 -0
  17. data/lib/bundler/cli/gem.rb +84 -11
  18. data/lib/bundler/cli/info.rb +15 -4
  19. data/lib/bundler/cli/init.rb +2 -2
  20. data/lib/bundler/cli/inject.rb +1 -1
  21. data/lib/bundler/cli/install.rb +12 -18
  22. data/lib/bundler/cli/issue.rb +2 -2
  23. data/lib/bundler/cli/list.rb +12 -10
  24. data/lib/bundler/cli/outdated.rb +89 -66
  25. data/lib/bundler/cli/plugin.rb +10 -0
  26. data/lib/bundler/cli/pristine.rb +5 -0
  27. data/lib/bundler/cli/show.rb +1 -1
  28. data/lib/bundler/cli/update.rb +2 -0
  29. data/lib/bundler/compact_index_client.rb +1 -1
  30. data/lib/bundler/compact_index_client/cache.rb +1 -1
  31. data/lib/bundler/definition.rb +51 -60
  32. data/lib/bundler/dep_proxy.rb +1 -1
  33. data/lib/bundler/dependency.rb +0 -9
  34. data/lib/bundler/dsl.rb +5 -9
  35. data/lib/bundler/endpoint_specification.rb +1 -1
  36. data/lib/bundler/environment_preserver.rb +26 -2
  37. data/lib/bundler/errors.rb +1 -0
  38. data/lib/bundler/feature_flag.rb +0 -2
  39. data/lib/bundler/fetcher.rb +4 -3
  40. data/lib/bundler/fetcher/base.rb +1 -1
  41. data/lib/bundler/fetcher/compact_index.rb +1 -1
  42. data/lib/bundler/fetcher/downloader.rb +1 -1
  43. data/lib/bundler/fetcher/index.rb +1 -1
  44. data/lib/bundler/friendly_errors.rb +7 -13
  45. data/lib/bundler/gem_helper.rb +33 -19
  46. data/lib/bundler/gem_helpers.rb +6 -1
  47. data/lib/bundler/gem_version_promoter.rb +2 -2
  48. data/lib/bundler/graph.rb +1 -1
  49. data/lib/bundler/index.rb +1 -1
  50. data/lib/bundler/injector.rb +15 -4
  51. data/lib/bundler/inline.rb +2 -2
  52. data/lib/bundler/installer.rb +30 -29
  53. data/lib/bundler/installer/gem_installer.rb +3 -3
  54. data/lib/bundler/installer/parallel_installer.rb +10 -10
  55. data/lib/bundler/installer/standalone.rb +2 -2
  56. data/lib/bundler/lazy_specification.rb +19 -6
  57. data/lib/bundler/lockfile_generator.rb +1 -1
  58. data/lib/bundler/lockfile_parser.rb +1 -1
  59. data/lib/bundler/mirror.rb +2 -2
  60. data/lib/bundler/plugin.rb +30 -5
  61. data/lib/bundler/plugin/index.rb +10 -1
  62. data/lib/bundler/plugin/installer.rb +1 -1
  63. data/lib/bundler/plugin/installer/rubygems.rb +1 -1
  64. data/lib/bundler/plugin/source_list.rb +1 -1
  65. data/lib/bundler/psyched_yaml.rb +0 -15
  66. data/lib/bundler/remote_specification.rb +5 -2
  67. data/lib/bundler/resolver.rb +32 -9
  68. data/lib/bundler/resolver/spec_group.rb +27 -6
  69. data/lib/bundler/retry.rb +1 -1
  70. data/lib/bundler/ruby_version.rb +1 -1
  71. data/lib/bundler/rubygems_ext.rb +53 -9
  72. data/lib/bundler/rubygems_gem_installer.rb +3 -9
  73. data/lib/bundler/rubygems_integration.rb +23 -54
  74. data/lib/bundler/runtime.rb +4 -14
  75. data/lib/bundler/settings.rb +49 -45
  76. data/lib/bundler/shared_helpers.rb +2 -2
  77. data/lib/bundler/similarity_detector.rb +1 -1
  78. data/lib/bundler/source.rb +1 -1
  79. data/lib/bundler/source/git.rb +5 -5
  80. data/lib/bundler/source/git/git_proxy.rb +56 -59
  81. data/lib/bundler/source/path.rb +7 -3
  82. data/lib/bundler/source/path/installer.rb +8 -10
  83. data/lib/bundler/source/rubygems.rb +13 -16
  84. data/lib/bundler/source/rubygems/remote.rb +1 -1
  85. data/lib/bundler/source_list.rb +2 -2
  86. data/lib/bundler/spec_set.rb +1 -1
  87. data/lib/bundler/stub_specification.rb +17 -5
  88. data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  89. data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  90. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  91. data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  92. data/lib/bundler/templates/newgem/bin/console.tt +1 -0
  93. data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  94. data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  95. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  96. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  97. data/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  98. data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  99. data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
  100. data/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  101. data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  102. data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
  103. data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  104. data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  105. data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  106. data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  107. data/lib/bundler/ui/shell.rb +5 -5
  108. data/lib/bundler/uri_credentials_filter.rb +1 -1
  109. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
  110. data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  111. data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  112. data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  113. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  114. data/lib/bundler/vendored_persistent.rb +0 -7
  115. data/lib/bundler/version.rb +1 -1
  116. data/lib/bundler/worker.rb +1 -1
  117. data/lib/bundler/yaml_serializer.rb +1 -1
  118. data/man/bundle-add.1 +1 -1
  119. data/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
  120. data/man/bundle-binstubs.1 +5 -3
  121. data/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
  122. data/man/bundle-cache.1 +1 -1
  123. data/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
  124. data/man/bundle-check.1 +1 -1
  125. data/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
  126. data/man/bundle-clean.1 +1 -1
  127. data/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
  128. data/man/bundle-config.1 +16 -22
  129. data/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
  130. data/man/bundle-doctor.1 +1 -1
  131. data/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
  132. data/man/bundle-exec.1 +1 -1
  133. data/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
  134. data/man/bundle-gem.1 +25 -3
  135. data/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
  136. data/man/bundle-info.1 +1 -1
  137. data/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
  138. data/man/bundle-init.1 +1 -1
  139. data/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
  140. data/man/bundle-inject.1 +1 -1
  141. data/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
  142. data/man/bundle-install.1 +29 -2
  143. data/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
  144. data/man/bundle-list.1 +7 -7
  145. data/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
  146. data/man/bundle-lock.1 +1 -1
  147. data/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
  148. data/man/bundle-open.1 +1 -1
  149. data/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
  150. data/man/bundle-outdated.1 +1 -1
  151. data/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
  152. data/man/bundle-platform.1 +1 -1
  153. data/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
  154. data/man/bundle-pristine.1 +1 -1
  155. data/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
  156. data/man/bundle-remove.1 +1 -1
  157. data/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
  158. data/man/bundle-show.1 +1 -1
  159. data/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
  160. data/man/bundle-update.1 +1 -1
  161. data/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
  162. data/man/bundle-viz.1 +1 -1
  163. data/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
  164. data/man/bundle.1 +1 -1
  165. data/man/{bundle.ronn → bundle.1.ronn} +0 -0
  166. data/man/gemfile.5 +4 -4
  167. data/man/gemfile.5.ronn +4 -4
  168. metadata +39 -58
  169. data/man/bundle-add.1.txt +0 -58
  170. data/man/bundle-binstubs.1.txt +0 -48
  171. data/man/bundle-cache.1.txt +0 -78
  172. data/man/bundle-check.1.txt +0 -33
  173. data/man/bundle-clean.1.txt +0 -26
  174. data/man/bundle-config.1.txt +0 -528
  175. data/man/bundle-doctor.1.txt +0 -44
  176. data/man/bundle-exec.1.txt +0 -178
  177. data/man/bundle-gem.1.txt +0 -91
  178. data/man/bundle-info.1.txt +0 -21
  179. data/man/bundle-init.1.txt +0 -34
  180. data/man/bundle-inject.1.txt +0 -32
  181. data/man/bundle-install.1.txt +0 -401
  182. data/man/bundle-list.1.txt +0 -43
  183. data/man/bundle-lock.1.txt +0 -93
  184. data/man/bundle-open.1.txt +0 -29
  185. data/man/bundle-outdated.1.txt +0 -131
  186. data/man/bundle-platform.1.txt +0 -57
  187. data/man/bundle-pristine.1.txt +0 -44
  188. data/man/bundle-remove.1.txt +0 -34
  189. data/man/bundle-show.1.txt +0 -27
  190. data/man/bundle-update.1.txt +0 -390
  191. data/man/bundle-viz.1.txt +0 -39
  192. data/man/bundle.1.txt +0 -116
  193. data/man/gemfile.5.txt +0 -649
  194. data/man/index.txt +0 -25
@@ -32,7 +32,7 @@ module Bundler
32
32
  end
33
33
  alias_method :attempts, :attempt
34
34
 
35
- private
35
+ private
36
36
 
37
37
  def run(&block)
38
38
  @failed = false
@@ -123,7 +123,7 @@ module Bundler
123
123
  @exact = versions.all? {|v| Gem::Requirement.create(v).exact? }
124
124
  end
125
125
 
126
- private
126
+ private
127
127
 
128
128
  def matches?(requirements, version)
129
129
  # Handles RUBY_PATCHLEVEL of -1 for instances like ruby-head
@@ -47,14 +47,13 @@ module Gem
47
47
  full_require_paths
48
48
  end
49
49
 
50
- if method_defined?(:extension_dir)
51
- alias_method :rg_extension_dir, :extension_dir
52
- def extension_dir
53
- @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name)
54
- File.expand_path(File.join(extensions_dir, source.extension_dir_name))
55
- else
56
- rg_extension_dir
57
- end
50
+ alias_method :rg_extension_dir, :extension_dir
51
+ def extension_dir
52
+ @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name)
53
+ unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
54
+ File.expand_path(File.join(extensions_dir, unique_extension_dir))
55
+ else
56
+ rg_extension_dir
58
57
  end
59
58
  end
60
59
 
@@ -86,7 +85,7 @@ module Gem
86
85
  dependencies - development_dependencies
87
86
  end
88
87
 
89
- private
88
+ private
90
89
 
91
90
  def dependencies_to_gemfile(dependencies, group = nil)
92
91
  gemfile = String.new
@@ -130,6 +129,35 @@ module Gem
130
129
  end
131
130
  end
132
131
 
132
+ # comparison is done order independently since rubygems 3.2.0.rc.2
133
+ unless Gem::Requirement.new("> 1", "< 2") == Gem::Requirement.new("< 2", "> 1")
134
+ class Requirement
135
+ module OrderIndependentComparison
136
+ def ==(other)
137
+ if _requirements_sorted? && other._requirements_sorted?
138
+ super
139
+ else
140
+ _with_sorted_requirements == other._with_sorted_requirements
141
+ end
142
+ end
143
+
144
+ protected
145
+
146
+ def _requirements_sorted?
147
+ return @_are_requirements_sorted if defined?(@_are_requirements_sorted)
148
+ strings = as_list
149
+ @_are_requirements_sorted = strings == strings.sort
150
+ end
151
+
152
+ def _with_sorted_requirements
153
+ @_with_sorted_requirements ||= _requirements_sorted? ? self : self.class.new(as_list.sort)
154
+ end
155
+ end
156
+
157
+ prepend OrderIndependentComparison
158
+ end
159
+ end
160
+
133
161
  class Platform
134
162
  JAVA = Gem::Platform.new("java") unless defined?(JAVA)
135
163
  MSWIN = Gem::Platform.new("mswin32") unless defined?(MSWIN)
@@ -145,6 +173,22 @@ module Gem
145
173
  undef_method :eql? if method_defined? :eql?
146
174
  alias_method :eql?, :==
147
175
  end
176
+
177
+ require "rubygems/util"
178
+
179
+ Util.singleton_class.module_eval do
180
+ if Util.singleton_methods.include?(:glob_files_in_dir) # since 3.0.0.beta.2
181
+ remove_method :glob_files_in_dir
182
+ end
183
+
184
+ def glob_files_in_dir(glob, base_path)
185
+ if RUBY_VERSION >= "2.5"
186
+ Dir.glob(glob, :base => base_path).map! {|f| File.expand_path(f, base_path) }
187
+ else
188
+ Dir.glob(File.join(base_path.to_s.gsub(/[\[\]]/, '\\\\\\&'), glob)).map! {|f| File.expand_path(f) }
189
+ end
190
+ end
191
+ end
148
192
  end
149
193
 
150
194
  module Gem
@@ -4,12 +4,6 @@ require "rubygems/installer"
4
4
 
5
5
  module Bundler
6
6
  class RubyGemsGemInstaller < Gem::Installer
7
- unless respond_to?(:at)
8
- def self.at(*args)
9
- new(*args)
10
- end
11
- end
12
-
13
7
  def check_executable_overwrite(filename)
14
8
  # Bundler needs to install gems regardless of binstub overwriting
15
9
  end
@@ -20,7 +14,7 @@ module Bundler
20
14
 
21
15
  def build_extensions
22
16
  extension_cache_path = options[:bundler_extension_cache_path]
23
- return super unless extension_cache_path && extension_dir = Bundler.rubygems.spec_extension_dir(spec)
17
+ return super unless extension_cache_path && extension_dir = spec.extension_dir
24
18
 
25
19
  extension_dir = Pathname.new(extension_dir)
26
20
  build_complete = SharedHelpers.filesystem_access(extension_cache_path.join("gem.build_complete"), :read, &:file?)
@@ -40,7 +34,7 @@ module Bundler
40
34
  end
41
35
  end
42
36
 
43
- private
37
+ private
44
38
 
45
39
  def validate_bundler_checksum(checksum)
46
40
  return true if Bundler.settings[:disable_checksum_validation]
@@ -66,7 +60,7 @@ module Bundler
66
60
 
67
61
  If you wish to continue installing the downloaded gem, and are certain it does not pose a \
68
62
  security issue despite the mismatching checksum, do the following:
69
- 1. run `bundle config set disable_checksum_validation true` to turn off checksum verification
63
+ 1. run `bundle config set --local disable_checksum_validation true` to turn off checksum verification
70
64
  2. run `bundle install`
71
65
 
72
66
  (More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rubygems" unless defined?(Gem)
4
+
3
5
  module Bundler
4
6
  class RubygemsIntegration
5
7
  if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
@@ -100,11 +102,6 @@ module Bundler
100
102
  end.flatten(1)
101
103
  end
102
104
 
103
- def spec_extension_dir(spec)
104
- return unless spec.respond_to?(:extension_dir)
105
- spec.extension_dir
106
- end
107
-
108
105
  def stub_set_spec(stub, spec)
109
106
  stub.instance_variable_set(:@spec, spec)
110
107
  end
@@ -139,14 +136,10 @@ module Bundler
139
136
  end
140
137
 
141
138
  def inflate(obj)
142
- require "rubygems/util"
143
-
144
139
  Gem::Util.inflate(obj)
145
140
  end
146
141
 
147
142
  def correct_for_windows_path(path)
148
- require "rubygems/util"
149
-
150
143
  if Gem::Util.respond_to?(:correct_for_windows_path)
151
144
  Gem::Util.correct_for_windows_path(path)
152
145
  elsif path[0].chr == "/" && path[1].chr =~ /[a-z]/i && path[2].chr == ":"
@@ -221,11 +214,6 @@ module Bundler
221
214
  Gem.bin_path(gem, bin, ver)
222
215
  end
223
216
 
224
- def preserve_paths
225
- # this is a no-op outside of RubyGems 1.8
226
- yield
227
- end
228
-
229
217
  def loaded_gem_paths
230
218
  loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
231
219
  loaded_gem_paths.flatten
@@ -263,8 +251,6 @@ module Bundler
263
251
  require "rubygems/security"
264
252
  require_relative "psyched_yaml"
265
253
  gem_from_path(path, security_policies[policy]).spec
266
- rescue Gem::Package::FormatError
267
- raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
268
254
  rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
269
255
  if e.is_a?(Gem::Security::Exception) ||
270
256
  e.message =~ /unknown trust policy|unsigned gem/i ||
@@ -327,8 +313,13 @@ module Bundler
327
313
  end
328
314
 
329
315
  message = if spec.nil?
316
+ target_file = begin
317
+ Bundler.default_gemfile.basename
318
+ rescue GemfileNotFound
319
+ "inline Gemfile"
320
+ end
330
321
  "#{dep.name} is not part of the bundle." \
331
- " Add it to your #{Bundler.default_gemfile.basename}."
322
+ " Add it to your #{target_file}."
332
323
  else
333
324
  "can't activate #{dep}, already activated #{spec.full_name}. " \
334
325
  "Make sure all dependencies are added to Gemfile."
@@ -344,7 +335,7 @@ module Bundler
344
335
  raise e
345
336
  end
346
337
 
347
- # backwards compatibility shim, see https://github.com/bundler/bundler/issues/5102
338
+ # backwards compatibility shim, see https://github.com/rubygems/bundler/issues/5102
348
339
  kernel_class.send(:public, :gem) if Bundler.feature_flag.setup_makes_kernel_gem_public?
349
340
  end
350
341
  end
@@ -420,6 +411,17 @@ module Bundler
420
411
  # Replace or hook into RubyGems to provide a bundlerized view
421
412
  # of the world.
422
413
  def replace_entrypoints(specs)
414
+ specs_by_name = add_default_gems_to(specs)
415
+
416
+ replace_gem(specs, specs_by_name)
417
+ stub_rubygems(specs)
418
+ replace_bin_path(specs_by_name)
419
+
420
+ Gem.clear_paths
421
+ end
422
+
423
+ # Add default gems not already present in specs, and return them as a hash.
424
+ def add_default_gems_to(specs)
423
425
  specs_by_name = specs.reduce({}) do |h, s|
424
426
  h[s.name] = s
425
427
  h
@@ -434,40 +436,7 @@ module Bundler
434
436
  specs_by_name[default_spec_name] = default_spec
435
437
  end
436
438
 
437
- replace_gem(specs, specs_by_name)
438
- stub_rubygems(specs)
439
- replace_bin_path(specs_by_name)
440
-
441
- Gem.clear_paths
442
- end
443
-
444
- # This backports base_dir which replaces installation path
445
- # RubyGems 1.8+
446
- def backport_base_dir
447
- redefine_method(Gem::Specification, :base_dir) do
448
- return Gem.dir unless loaded_from
449
- File.dirname File.dirname loaded_from
450
- end
451
- end
452
-
453
- def backport_cache_file
454
- redefine_method(Gem::Specification, :cache_dir) do
455
- @cache_dir ||= File.join base_dir, "cache"
456
- end
457
-
458
- redefine_method(Gem::Specification, :cache_file) do
459
- @cache_file ||= File.join cache_dir, "#{full_name}.gem"
460
- end
461
- end
462
-
463
- def backport_spec_file
464
- redefine_method(Gem::Specification, :spec_dir) do
465
- @spec_dir ||= File.join base_dir, "specifications"
466
- end
467
-
468
- redefine_method(Gem::Specification, :spec_file) do
469
- @spec_file ||= File.join spec_dir, "#{full_name}.gemspec"
470
- end
439
+ specs_by_name
471
440
  end
472
441
 
473
442
  def undo_replacements
@@ -600,10 +569,10 @@ module Bundler
600
569
 
601
570
  def backport_ext_builder_monitor
602
571
  # So we can avoid requiring "rubygems/ext" in its entirety
603
- Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
572
+ Gem.module_eval <<-RUBY, __FILE__, __LINE__ + 1
604
573
  module Ext
605
574
  end
606
- RB
575
+ RUBY
607
576
 
608
577
  require "rubygems/ext/builder"
609
578
 
@@ -43,14 +43,6 @@ module Bundler
43
43
  self
44
44
  end
45
45
 
46
- REQUIRE_ERRORS = [
47
- /^no such file to load -- (.+)$/i,
48
- /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
49
- /^Missing API definition file in (.+)$/i,
50
- /^cannot load such file -- (.+)$/i,
51
- /^dlopen\([^)]*\): Library not loaded: (.+)$/i,
52
- ].freeze
53
-
54
46
  def require(*groups)
55
47
  groups.map!(&:to_sym)
56
48
  groups = [:default] if groups.empty?
@@ -79,16 +71,14 @@ module Bundler
79
71
  end
80
72
  end
81
73
  rescue LoadError => e
82
- REQUIRE_ERRORS.find {|r| r =~ e.message }
83
- raise if dep.autorequire || $1 != required_file
74
+ raise if dep.autorequire || e.path != required_file
84
75
 
85
76
  if dep.autorequire.nil? && dep.name.include?("-")
86
77
  begin
87
78
  namespaced_file = dep.name.tr("-", "/")
88
79
  Kernel.require namespaced_file
89
80
  rescue LoadError => e
90
- REQUIRE_ERRORS.find {|r| r =~ e.message }
91
- raise if $1 != namespaced_file
81
+ raise if e.path != namespaced_file
92
82
  end
93
83
  end
94
84
  end
@@ -165,7 +155,7 @@ module Bundler
165
155
  spec_cache_paths = []
166
156
  spec_gemspec_paths = []
167
157
  spec_extension_paths = []
168
- specs.each do |spec|
158
+ Bundler.rubygems.add_default_gems_to(specs).values.each do |spec|
169
159
  spec_gem_paths << spec.full_gem_path
170
160
  # need to check here in case gems are nested like for the rails git repo
171
161
  md = %r{(.+bundler/gems/.+-[a-f0-9]{7,12})}.match(spec.full_gem_path)
@@ -213,7 +203,7 @@ module Bundler
213
203
  output
214
204
  end
215
205
 
216
- private
206
+ private
217
207
 
218
208
  def prune_gem_cache(resolve, cache_path)
219
209
  cached = Dir["#{cache_path}/*.gem"]
@@ -12,7 +12,6 @@ module Bundler
12
12
  allow_offline_install
13
13
  auto_clean_without_path
14
14
  auto_install
15
- auto_config_jobs
16
15
  cache_all
17
16
  cache_all_platforms
18
17
  default_install_uses_path
@@ -22,7 +21,6 @@ module Bundler
22
21
  disable_exec_load
23
22
  disable_local_branch_check
24
23
  disable_multisource
25
- disable_platform_warnings
26
24
  disable_shared_gems
27
25
  disable_version_check
28
26
  force_ruby_platform
@@ -44,7 +42,6 @@ module Bundler
44
42
  setup_makes_kernel_gem_public
45
43
  silence_deprecations
46
44
  silence_root_warning
47
- skip_default_git_sources
48
45
  specific_platform
49
46
  suppress_install_using_messages
50
47
  unlock_source_unlocks_spec
@@ -66,30 +63,25 @@ module Bundler
66
63
  ].freeze
67
64
 
68
65
  DEFAULT_CONFIG = {
69
- :silence_deprecations => false,
70
- :disable_version_check => true,
71
- :prefer_patch => false,
72
- :redirect => 5,
73
- :retry => 3,
74
- :timeout => 10,
66
+ "BUNDLE_SILENCE_DEPRECATIONS" => false,
67
+ "BUNDLE_DISABLE_VERSION_CHECK" => true,
68
+ "BUNDLE_PREFER_PATCH" => false,
69
+ "BUNDLE_REDIRECT" => 5,
70
+ "BUNDLE_RETRY" => 3,
71
+ "BUNDLE_TIMEOUT" => 10,
75
72
  }.freeze
76
73
 
77
74
  def initialize(root = nil)
78
75
  @root = root
79
76
  @local_config = load_config(local_config_file)
77
+ @env_config = ENV.to_h.select {|key, _value| key =~ /\ABUNDLE_.+/ }
80
78
  @global_config = load_config(global_config_file)
81
79
  @temporary = {}
82
80
  end
83
81
 
84
82
  def [](name)
85
83
  key = key_for(name)
86
- value = @temporary.fetch(key) do
87
- @local_config.fetch(key) do
88
- ENV.fetch(key) do
89
- @global_config.fetch(key) do
90
- DEFAULT_CONFIG.fetch(name) do
91
- nil
92
- end end end end end
84
+ value = configs.values.map {|config| config[key] }.compact.first
93
85
 
94
86
  converted_value(value, name)
95
87
  end
@@ -132,9 +124,7 @@ module Bundler
132
124
  end
133
125
 
134
126
  def all
135
- env_keys = ENV.keys.grep(/\ABUNDLE_.+/)
136
-
137
- keys = @temporary.keys | @global_config.keys | @local_config.keys | env_keys
127
+ keys = @temporary.keys | @global_config.keys | @local_config.keys | @env_config.keys
138
128
 
139
129
  keys.map do |key|
140
130
  key.sub(/^BUNDLE_/, "").gsub(/__/, ".").downcase
@@ -171,13 +161,11 @@ module Bundler
171
161
 
172
162
  def locations(key)
173
163
  key = key_for(key)
174
- locations = {}
175
- locations[:temporary] = @temporary[key] if @temporary.key?(key)
176
- locations[:local] = @local_config[key] if @local_config.key?(key)
177
- locations[:env] = ENV[key] if ENV[key]
178
- locations[:global] = @global_config[key] if @global_config.key?(key)
179
- locations[:default] = DEFAULT_CONFIG[key] if DEFAULT_CONFIG.key?(key)
180
- locations
164
+ configs.keys.inject({}) do |partial_locations, level|
165
+ value_on_level = configs[level][key]
166
+ partial_locations[level] = value_on_level unless value_on_level.nil?
167
+ partial_locations
168
+ end
181
169
  end
182
170
 
183
171
  def pretty_values_for(exposed_key)
@@ -185,20 +173,20 @@ module Bundler
185
173
 
186
174
  locations = []
187
175
 
188
- if @temporary.key?(key)
189
- locations << "Set for the current command: #{converted_value(@temporary[key], exposed_key).inspect}"
176
+ if value = @temporary[key]
177
+ locations << "Set for the current command: #{converted_value(value, exposed_key).inspect}"
190
178
  end
191
179
 
192
- if @local_config.key?(key)
193
- locations << "Set for your local app (#{local_config_file}): #{converted_value(@local_config[key], exposed_key).inspect}"
180
+ if value = @local_config[key]
181
+ locations << "Set for your local app (#{local_config_file}): #{converted_value(value, exposed_key).inspect}"
194
182
  end
195
183
 
196
- if value = ENV[key]
184
+ if value = @env_config[key]
197
185
  locations << "Set via #{key}: #{converted_value(value, exposed_key).inspect}"
198
186
  end
199
187
 
200
- if @global_config.key?(key)
201
- locations << "Set for the current user (#{global_config_file}): #{converted_value(@global_config[key], exposed_key).inspect}"
188
+ if value = @global_config[key]
189
+ locations << "Set for the current user (#{global_config_file}): #{converted_value(value, exposed_key).inspect}"
202
190
  end
203
191
 
204
192
  return ["You have not configured a value for `#{exposed_key}`"] if locations.empty?
@@ -207,17 +195,19 @@ module Bundler
207
195
 
208
196
  # for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
209
197
  def path
210
- key = key_for(:path)
211
- path = ENV[key] || @global_config[key]
212
- if path && !@temporary.key?(key) && !@local_config.key?(key)
213
- return Path.new(path, false, false)
198
+ configs.each do |_level, settings|
199
+ path = value_for("path", settings)
200
+ path_system = value_for("path.system", settings)
201
+ disabled_shared_gems = value_for("disable_shared_gems", settings)
202
+ next if path.nil? && path_system.nil? && disabled_shared_gems.nil?
203
+ system_path = path_system || (disabled_shared_gems == false)
204
+ return Path.new(path, system_path)
214
205
  end
215
206
 
216
- system_path = self["path.system"] || (self[:disable_shared_gems] == false)
217
- Path.new(self[:path], system_path, Bundler.feature_flag.default_install_uses_path?)
207
+ Path.new(nil, false)
218
208
  end
219
209
 
220
- Path = Struct.new(:explicit_path, :system_path, :default_install_uses_path) do
210
+ Path = Struct.new(:explicit_path, :system_path) do
221
211
  def path
222
212
  path = base_path
223
213
  path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
@@ -227,7 +217,7 @@ module Bundler
227
217
  def use_system_gems?
228
218
  return true if system_path
229
219
  return false if explicit_path
230
- !default_install_uses_path
220
+ !Bundler.feature_flag.default_install_uses_path?
231
221
  end
232
222
 
233
223
  def base_path
@@ -280,9 +270,9 @@ module Bundler
280
270
 
281
271
  def validate!
282
272
  all.each do |raw_key|
283
- [@local_config, ENV, @global_config].each do |settings|
284
- value = converted_value(settings[key_for(raw_key)], raw_key)
285
- Validator.validate!(raw_key, value, settings.to_hash.dup)
273
+ [@local_config, @env_config, @global_config].each do |settings|
274
+ value = value_for(raw_key, settings)
275
+ Validator.validate!(raw_key, value, settings.dup)
286
276
  end
287
277
  end
288
278
  end
@@ -293,7 +283,21 @@ module Bundler
293
283
  "BUNDLE_#{key}"
294
284
  end
295
285
 
296
- private
286
+ private
287
+
288
+ def configs
289
+ {
290
+ :temporary => @temporary,
291
+ :local => @local_config,
292
+ :env => @env_config,
293
+ :global => @global_config,
294
+ :default => DEFAULT_CONFIG,
295
+ }
296
+ end
297
+
298
+ def value_for(name, config)
299
+ converted_value(config[key_for(name)], name)
300
+ end
297
301
 
298
302
  def parent_setting_for(name)
299
303
  split_specific_setting_for(name)[0]