bundler 2.5.23 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -0
  3. data/bundler.gemspec +2 -2
  4. data/lib/bundler/build_metadata.rb +2 -2
  5. data/lib/bundler/cli/console.rb +0 -4
  6. data/lib/bundler/cli/doctor.rb +4 -4
  7. data/lib/bundler/cli/exec.rb +1 -0
  8. data/lib/bundler/cli/gem.rb +1 -1
  9. data/lib/bundler/cli/info.rb +2 -2
  10. data/lib/bundler/cli/inject.rb +1 -1
  11. data/lib/bundler/cli/install.rb +4 -0
  12. data/lib/bundler/cli/lock.rb +20 -1
  13. data/lib/bundler/cli/pristine.rb +1 -1
  14. data/lib/bundler/cli/show.rb +2 -2
  15. data/lib/bundler/cli.rb +22 -53
  16. data/lib/bundler/compact_index_client/cache_file.rb +0 -5
  17. data/lib/bundler/compact_index_client/updater.rb +0 -11
  18. data/lib/bundler/definition.rb +134 -61
  19. data/lib/bundler/dependency.rb +1 -1
  20. data/lib/bundler/dsl.rb +2 -13
  21. data/lib/bundler/endpoint_specification.rb +10 -1
  22. data/lib/bundler/errors.rb +10 -0
  23. data/lib/bundler/feature_flag.rb +1 -0
  24. data/lib/bundler/fetcher/compact_index.rb +1 -1
  25. data/lib/bundler/fetcher.rb +10 -3
  26. data/lib/bundler/gem_helpers.rb +21 -5
  27. data/lib/bundler/injector.rb +2 -2
  28. data/lib/bundler/installer/standalone.rb +2 -2
  29. data/lib/bundler/installer.rb +4 -38
  30. data/lib/bundler/lazy_specification.rb +65 -24
  31. data/lib/bundler/lockfile_parser.rb +9 -1
  32. data/lib/bundler/man/bundle-add.1 +13 -10
  33. data/lib/bundler/man/bundle-add.1.ronn +12 -9
  34. data/lib/bundler/man/bundle-binstubs.1 +7 -4
  35. data/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  36. data/lib/bundler/man/bundle-cache.1 +30 -2
  37. data/lib/bundler/man/bundle-cache.1.ronn +31 -2
  38. data/lib/bundler/man/bundle-check.1 +3 -3
  39. data/lib/bundler/man/bundle-check.1.ronn +4 -2
  40. data/lib/bundler/man/bundle-clean.1 +1 -1
  41. data/lib/bundler/man/bundle-config.1 +3 -1
  42. data/lib/bundler/man/bundle-config.1.ronn +2 -0
  43. data/lib/bundler/man/bundle-console.1 +2 -4
  44. data/lib/bundler/man/bundle-console.1.ronn +2 -7
  45. data/lib/bundler/man/bundle-doctor.1 +2 -2
  46. data/lib/bundler/man/bundle-doctor.1.ronn +1 -1
  47. data/lib/bundler/man/bundle-env.1 +9 -0
  48. data/lib/bundler/man/bundle-env.1.ronn +10 -0
  49. data/lib/bundler/man/bundle-exec.1 +5 -2
  50. data/lib/bundler/man/bundle-exec.1.ronn +4 -1
  51. data/lib/bundler/man/bundle-fund.1 +22 -0
  52. data/lib/bundler/man/bundle-fund.1.ronn +25 -0
  53. data/lib/bundler/man/bundle-gem.1 +17 -5
  54. data/lib/bundler/man/bundle-gem.1.ronn +27 -6
  55. data/lib/bundler/man/bundle-help.1 +1 -1
  56. data/lib/bundler/man/bundle-info.1 +5 -2
  57. data/lib/bundler/man/bundle-info.1.ronn +6 -2
  58. data/lib/bundler/man/bundle-init.1 +3 -3
  59. data/lib/bundler/man/bundle-init.1.ronn +3 -2
  60. data/lib/bundler/man/bundle-inject.1 +10 -2
  61. data/lib/bundler/man/bundle-inject.1.ronn +9 -1
  62. data/lib/bundler/man/bundle-install.1 +14 -11
  63. data/lib/bundler/man/bundle-install.1.ronn +21 -16
  64. data/lib/bundler/man/bundle-issue.1 +45 -0
  65. data/lib/bundler/man/bundle-issue.1.ronn +37 -0
  66. data/lib/bundler/man/bundle-licenses.1 +9 -0
  67. data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  68. data/lib/bundler/man/bundle-list.1 +1 -1
  69. data/lib/bundler/man/bundle-list.1.ronn +4 -1
  70. data/lib/bundler/man/bundle-lock.1 +21 -6
  71. data/lib/bundler/man/bundle-lock.1.ronn +25 -4
  72. data/lib/bundler/man/bundle-open.1 +2 -2
  73. data/lib/bundler/man/bundle-open.1.ronn +2 -1
  74. data/lib/bundler/man/bundle-outdated.1 +8 -5
  75. data/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  76. data/lib/bundler/man/bundle-platform.1 +1 -1
  77. data/lib/bundler/man/bundle-plugin.1 +1 -1
  78. data/lib/bundler/man/bundle-pristine.1 +1 -1
  79. data/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  80. data/lib/bundler/man/bundle-remove.1 +1 -1
  81. data/lib/bundler/man/bundle-remove.1.ronn +1 -1
  82. data/lib/bundler/man/bundle-show.1 +5 -2
  83. data/lib/bundler/man/bundle-show.1.ronn +4 -0
  84. data/lib/bundler/man/bundle-update.1 +13 -7
  85. data/lib/bundler/man/bundle-update.1.ronn +14 -6
  86. data/lib/bundler/man/bundle-version.1 +1 -1
  87. data/lib/bundler/man/bundle-viz.1 +4 -4
  88. data/lib/bundler/man/bundle-viz.1.ronn +7 -3
  89. data/lib/bundler/man/bundle.1 +1 -1
  90. data/lib/bundler/man/gemfile.5 +1 -1
  91. data/lib/bundler/man/index.txt +4 -0
  92. data/lib/bundler/materialization.rb +59 -0
  93. data/lib/bundler/plugin/events.rb +24 -0
  94. data/lib/bundler/plugin/installer.rb +1 -1
  95. data/lib/bundler/process_lock.rb +1 -1
  96. data/lib/bundler/remote_specification.rb +6 -1
  97. data/lib/bundler/resolver/base.rb +2 -6
  98. data/lib/bundler/resolver/candidate.rb +2 -2
  99. data/lib/bundler/resolver/spec_group.rb +4 -3
  100. data/lib/bundler/resolver.rb +5 -5
  101. data/lib/bundler/rubygems_ext.rb +17 -28
  102. data/lib/bundler/rubygems_gem_installer.rb +0 -1
  103. data/lib/bundler/rubygems_integration.rb +21 -11
  104. data/lib/bundler/runtime.rb +27 -7
  105. data/lib/bundler/self_manager.rb +2 -3
  106. data/lib/bundler/settings.rb +1 -0
  107. data/lib/bundler/shared_helpers.rb +2 -2
  108. data/lib/bundler/source/git/git_proxy.rb +0 -6
  109. data/lib/bundler/source/git.rb +56 -31
  110. data/lib/bundler/source/path.rb +2 -2
  111. data/lib/bundler/source_list.rb +1 -1
  112. data/lib/bundler/spec_set.rb +81 -56
  113. data/lib/bundler/stub_specification.rb +8 -0
  114. data/lib/bundler/templates/newgem/README.md.tt +1 -1
  115. data/lib/bundler/uri_credentials_filter.rb +1 -1
  116. data/lib/bundler/vendor/fileutils/COPYING +56 -0
  117. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  118. data/lib/bundler/vendor/securerandom/COPYING +56 -0
  119. data/lib/bundler/vendor/securerandom/lib/securerandom.rb +5 -5
  120. data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  121. data/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  122. data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  123. data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  124. data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  125. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  126. data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  127. data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  128. data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  129. data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  130. data/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  131. data/lib/bundler/vendor/uri/COPYING +56 -0
  132. data/lib/bundler/vendor/uri/lib/uri/common.rb +37 -16
  133. data/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  134. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  135. data/lib/bundler/vendor/uri/lib/uri/generic.rb +16 -26
  136. data/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  137. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +10 -3
  138. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  139. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  140. data/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  141. data/lib/bundler/vendored_securerandom.rb +0 -2
  142. data/lib/bundler/version.rb +1 -1
  143. data/lib/bundler.rb +37 -13
  144. metadata +18 -12
  145. data/lib/bundler/vendor/fileutils/LICENSE.txt +0 -22
  146. data/lib/bundler/vendor/securerandom/LICENSE.txt +0 -22
  147. data/lib/bundler/vendor/securerandom/lib/random/formatter.rb +0 -373
  148. data/lib/bundler/vendor/uri/LICENSE.txt +0 -22
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ #
5
+ # This class materializes a set of resolved specifications (`LazySpecification`)
6
+ # for a given gem into the most appropriate real specifications
7
+ # (`StubSepecification`, `EndpointSpecification`, etc), given a dependency and a
8
+ # target platform.
9
+ #
10
+ class Materialization
11
+ def initialize(dep, platform, candidates:)
12
+ @dep = dep
13
+ @platform = platform
14
+ @candidates = candidates
15
+ end
16
+
17
+ def complete?
18
+ specs.any?
19
+ end
20
+
21
+ def specs
22
+ @specs ||= if @candidates.nil?
23
+ []
24
+ elsif platform
25
+ GemHelpers.select_best_platform_match(@candidates, platform, force_ruby: dep.force_ruby_platform)
26
+ else
27
+ GemHelpers.select_best_local_platform_match(@candidates, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
28
+ end
29
+ end
30
+
31
+ def dependencies
32
+ specs.first.runtime_dependencies.map {|d| [d, platform] }
33
+ end
34
+
35
+ def materialized_spec
36
+ specs.reject(&:missing?).first&.materialization
37
+ end
38
+
39
+ def completely_missing_specs
40
+ return [] unless specs.all?(&:missing?)
41
+
42
+ specs
43
+ end
44
+
45
+ def partially_missing_specs
46
+ specs.select(&:missing?)
47
+ end
48
+
49
+ def incomplete_specs
50
+ return [] if complete?
51
+
52
+ @candidates || LazySpecification.new(dep.name, nil, nil)
53
+ end
54
+
55
+ private
56
+
57
+ attr_reader :dep, :platform
58
+ end
59
+ end
@@ -56,6 +56,30 @@ module Bundler
56
56
  # Includes an Array of Bundler::Dependency objects
57
57
  # GEM_AFTER_INSTALL_ALL = "after-install-all"
58
58
  define :GEM_AFTER_INSTALL_ALL, "after-install-all"
59
+
60
+ # @!parse
61
+ # A hook called before each individual gem is required
62
+ # Includes a Bundler::Dependency.
63
+ # GEM_BEFORE_REQUIRE = "before-require"
64
+ define :GEM_BEFORE_REQUIRE, "before-require"
65
+
66
+ # @!parse
67
+ # A hook called after each individual gem is required
68
+ # Includes a Bundler::Dependency.
69
+ # GEM_AFTER_REQUIRE = "after-require"
70
+ define :GEM_AFTER_REQUIRE, "after-require"
71
+
72
+ # @!parse
73
+ # A hook called before any gems require
74
+ # Includes an Array of Bundler::Dependency objects.
75
+ # GEM_BEFORE_REQUIRE_ALL = "before-require-all"
76
+ define :GEM_BEFORE_REQUIRE_ALL, "before-require-all"
77
+
78
+ # @!parse
79
+ # A hook called after all gems required
80
+ # Includes an Array of Bundler::Dependency objects.
81
+ # GEM_AFTER_REQUIRE_ALL = "after-require-all"
82
+ define :GEM_AFTER_REQUIRE_ALL, "after-require-all"
59
83
  end
60
84
  end
61
85
  end
@@ -34,7 +34,7 @@ module Bundler
34
34
  # @return [Hash] map of names to their specs they are installed with
35
35
  def install_definition(definition)
36
36
  def definition.lock(*); end
37
- definition.resolve_remotely!
37
+ definition.remotely!
38
38
  specs = definition.specs
39
39
 
40
40
  install_from_specs specs
@@ -6,7 +6,7 @@ module Bundler
6
6
  lock_file_path = File.join(bundle_path, "bundler.lock")
7
7
  base_lock_file_path = lock_file_path.delete_suffix(".lock")
8
8
 
9
- require "fileutils" if Bundler.rubygems.provides?("< 3.5.23")
9
+ require "fileutils" if Bundler.rubygems.provides?("< 3.6.0")
10
10
 
11
11
  begin
12
12
  SharedHelpers.filesystem_access(lock_file_path, :write) do
@@ -12,7 +12,7 @@ module Bundler
12
12
 
13
13
  attr_reader :name, :version, :platform
14
14
  attr_writer :dependencies
15
- attr_accessor :source, :remote
15
+ attr_accessor :source, :remote, :locked_platform
16
16
 
17
17
  def initialize(name, version, platform, spec_fetcher)
18
18
  @name = name
@@ -21,6 +21,11 @@ module Bundler
21
21
  @platform = Gem::Platform.new(platform)
22
22
  @spec_fetcher = spec_fetcher
23
23
  @dependencies = nil
24
+ @locked_platform = nil
25
+ end
26
+
27
+ def insecurely_materialized?
28
+ @locked_platform.to_s != @platform.to_s
24
29
  end
25
30
 
26
31
  # Needed before installs, since the arch matters then and quick
@@ -16,7 +16,7 @@ module Bundler
16
16
  hash[name] = Package.new(name, platforms, **options)
17
17
  end
18
18
 
19
- @requirements = dependencies.map do |dep|
19
+ @requirements = dependencies.filter_map do |dep|
20
20
  dep_platforms = dep.gem_platforms(platforms)
21
21
 
22
22
  # Dependencies scoped to external platforms are ignored
@@ -27,11 +27,7 @@ module Bundler
27
27
  @packages[name] = Package.new(name, dep_platforms, **options.merge(dependency: dep))
28
28
 
29
29
  dep
30
- end.compact
31
- end
32
-
33
- def specs_compatible_with(result)
34
- @base.specs_compatible_with(result)
30
+ end
35
31
  end
36
32
 
37
33
  def [](name)
@@ -34,10 +34,10 @@ module Bundler
34
34
  @spec_group.dependencies
35
35
  end
36
36
 
37
- def to_specs(package)
37
+ def to_specs(package, most_specific_locked_platform)
38
38
  return [] if package.meta?
39
39
 
40
- @spec_group.to_specs(package.force_ruby_platform?)
40
+ @spec_group.to_specs(package.force_ruby_platform?, most_specific_locked_platform)
41
41
  end
42
42
 
43
43
  def prerelease?
@@ -25,10 +25,11 @@ module Bundler
25
25
  @source ||= exemplary_spec.source
26
26
  end
27
27
 
28
- def to_specs(force_ruby_platform)
28
+ def to_specs(force_ruby_platform, most_specific_locked_platform)
29
29
  @specs.map do |s|
30
30
  lazy_spec = LazySpecification.from_spec(s)
31
31
  lazy_spec.force_ruby_platform = force_ruby_platform
32
+ lazy_spec.most_specific_locked_platform = most_specific_locked_platform
32
33
  lazy_spec
33
34
  end
34
35
  end
@@ -38,9 +39,9 @@ module Bundler
38
39
  end
39
40
 
40
41
  def dependencies
41
- @dependencies ||= @specs.map do |spec|
42
+ @dependencies ||= @specs.flat_map do |spec|
42
43
  __dependencies(spec) + metadata_dependencies(spec)
43
- end.flatten.uniq.sort
44
+ end.uniq.sort
44
45
  end
45
46
 
46
47
  def ==(other)
@@ -15,10 +15,11 @@ module Bundler
15
15
 
16
16
  include GemHelpers
17
17
 
18
- def initialize(base, gem_version_promoter)
18
+ def initialize(base, gem_version_promoter, most_specific_locked_platform = nil)
19
19
  @source_requirements = base.source_requirements
20
20
  @base = base
21
21
  @gem_version_promoter = gem_version_promoter
22
+ @most_specific_locked_platform = most_specific_locked_platform
22
23
  end
23
24
 
24
25
  def start
@@ -79,8 +80,7 @@ module Bundler
79
80
  def solve_versions(root:, logger:)
80
81
  solver = PubGrub::VersionSolver.new(source: self, root: root, logger: logger)
81
82
  result = solver.solve
82
- resolved_specs = result.map {|package, version| version.to_specs(package) }.flatten
83
- resolved_specs |= @base.specs_compatible_with(SpecSet.new(resolved_specs))
83
+ result.flat_map {|package, version| version.to_specs(package, @most_specific_locked_platform) }
84
84
  rescue PubGrub::SolveFailure => e
85
85
  incompatibility = e.incompatibility
86
86
 
@@ -417,7 +417,7 @@ module Bundler
417
417
  end
418
418
 
419
419
  def prepare_dependencies(requirements, packages)
420
- to_dependency_hash(requirements, packages).map do |dep_package, dep_constraint|
420
+ to_dependency_hash(requirements, packages).filter_map do |dep_package, dep_constraint|
421
421
  name = dep_package.name
422
422
 
423
423
  next [dep_package, dep_constraint] if name == "bundler"
@@ -443,7 +443,7 @@ module Bundler
443
443
  next unless dep_package.current_platform?
444
444
 
445
445
  raise_not_found!(dep_package)
446
- end.compact.to_h
446
+ end.to_h
447
447
  end
448
448
 
449
449
  def select_sorted_versions(package, range)
@@ -79,14 +79,18 @@ module Gem
79
79
  include ::Bundler::MatchMetadata
80
80
  include ::Bundler::MatchPlatform
81
81
 
82
- attr_accessor :remote, :location, :relative_loaded_from
82
+ attr_accessor :remote, :relative_loaded_from
83
83
 
84
- remove_method :source
85
- attr_writer :source
86
- def source
87
- (defined?(@source) && @source) || Gem::Source::Installed.new
84
+ module AllowSettingSource
85
+ attr_writer :source
86
+
87
+ def source
88
+ (defined?(@source) && @source) || super
89
+ end
88
90
  end
89
91
 
92
+ prepend AllowSettingSource
93
+
90
94
  alias_method :rg_full_gem_path, :full_gem_path
91
95
  alias_method :rg_loaded_from, :loaded_from
92
96
 
@@ -122,7 +126,9 @@ module Gem
122
126
  end
123
127
  end
124
128
 
125
- remove_method :gem_dir
129
+ # Can be removed once RubyGems 3.5.21 support is dropped
130
+ remove_method :gem_dir if method_defined?(:gem_dir, false)
131
+
126
132
  def gem_dir
127
133
  full_gem_path
128
134
  end
@@ -144,6 +150,10 @@ module Gem
144
150
  end
145
151
  end
146
152
 
153
+ def insecurely_materialized?
154
+ false
155
+ end
156
+
147
157
  def groups
148
158
  @groups ||= []
149
159
  end
@@ -278,23 +288,6 @@ module Gem
278
288
  end
279
289
  end
280
290
 
281
- # Requirements using lambda operator differentiate trailing zeros since rubygems 3.2.6
282
- if Gem::Requirement.new("~> 2.0").hash == Gem::Requirement.new("~> 2.0.0").hash
283
- class Requirement
284
- module CorrectHashForLambdaOperator
285
- def hash
286
- if requirements.any? {|r| r.first == "~>" }
287
- requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash
288
- else
289
- super
290
- end
291
- end
292
- end
293
-
294
- prepend CorrectHashForLambdaOperator
295
- end
296
- end
297
-
298
291
  require "rubygems/platform"
299
292
 
300
293
  class Platform
@@ -344,10 +337,6 @@ module Gem
344
337
  without_gnu_nor_abi_modifiers
345
338
  end
346
339
  end
347
-
348
- if RUBY_ENGINE == "truffleruby" && !defined?(REUSE_AS_BINARY_ON_TRUFFLERUBY)
349
- REUSE_AS_BINARY_ON_TRUFFLERUBY = %w[libv8 libv8-node sorbet-static].freeze
350
- end
351
340
  end
352
341
 
353
342
  Platform.singleton_class.module_eval do
@@ -453,7 +442,7 @@ module Gem
453
442
  end
454
443
  end
455
444
 
456
- unless Gem.rubygems_version >= Gem::Version.new("3.5.23")
445
+ if Gem.rubygems_version < Gem::Version.new("3.6.0")
457
446
  class Package; end
458
447
  require "rubygems/package/tar_reader"
459
448
  require "rubygems/package/tar_reader/entry"
@@ -147,7 +147,6 @@ module Bundler
147
147
  SharedHelpers.filesystem_access(extension_dir, :create) do
148
148
  FileUtils.mkdir_p extension_dir
149
149
  end
150
- require "shellwords" unless Bundler.rubygems.provides?(">= 3.2.25")
151
150
  end
152
151
 
153
152
  def strict_rm_rf(dir)
@@ -20,10 +20,6 @@ module Bundler
20
20
  Gem::Requirement.new(req_str).satisfied_by?(version)
21
21
  end
22
22
 
23
- def supports_bundler_trampolining?
24
- provides?(">= 3.3.0.a")
25
- end
26
-
27
23
  def build_args
28
24
  require "rubygems/command"
29
25
  Gem::Command.build_args
@@ -34,6 +30,10 @@ module Bundler
34
30
  Gem::Command.build_args = args
35
31
  end
36
32
 
33
+ def set_target_rbconfig(path)
34
+ Gem.set_target_rbconfig(path)
35
+ end
36
+
37
37
  def loaded_specs(name)
38
38
  Gem.loaded_specs[name]
39
39
  end
@@ -134,6 +134,18 @@ module Bundler
134
134
  loaded_gem_paths.flatten
135
135
  end
136
136
 
137
+ def load_plugins
138
+ Gem.load_plugins
139
+ end
140
+
141
+ def load_plugin_files(plugin_files)
142
+ Gem.load_plugin_files(plugin_files)
143
+ end
144
+
145
+ def load_env_plugins
146
+ Gem.load_env_plugins
147
+ end
148
+
137
149
  def ui=(obj)
138
150
  Gem::DefaultUserInteraction.ui = obj
139
151
  end
@@ -304,11 +316,7 @@ module Bundler
304
316
  @replaced_methods.each do |(sym, klass), method|
305
317
  redefine_method(klass, sym, method)
306
318
  end
307
- if Binding.public_method_defined?(:source_location)
308
- post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
309
- else
310
- post_reset_hooks.reject! {|proc| proc.binding.eval("__FILE__") == __FILE__ }
311
- end
319
+ post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ }
312
320
  @replaced_methods.clear
313
321
  end
314
322
 
@@ -385,7 +393,9 @@ module Bundler
385
393
  def download_gem(spec, uri, cache_dir, fetcher)
386
394
  require "rubygems/remote_fetcher"
387
395
  uri = Bundler.settings.mirror_for(uri)
388
- Bundler::Retry.new("download gem from #{uri}").attempts do
396
+ redacted_uri = Gem::Uri.redact(uri)
397
+
398
+ Bundler::Retry.new("download gem from #{redacted_uri}").attempts do
389
399
  gem_file_name = spec.file_name
390
400
  local_gem_path = File.join cache_dir, gem_file_name
391
401
  return if File.exist? local_gem_path
@@ -407,7 +417,7 @@ module Bundler
407
417
  end
408
418
  end
409
419
  rescue Gem::RemoteFetcher::FetchError => e
410
- raise Bundler::HTTPError, "Could not download gem from #{uri} due to underlying error <#{e.message}>"
420
+ raise Bundler::HTTPError, "Could not download gem from #{redacted_uri} due to underlying error <#{e.message}>"
411
421
  end
412
422
 
413
423
  def build(spec, skip_validation = false)
@@ -41,12 +41,17 @@ module Bundler
41
41
  groups.map!(&:to_sym)
42
42
  groups = [:default] if groups.empty?
43
43
 
44
- @definition.dependencies.each do |dep|
45
- # Skip the dependency if it is not in any of the requested groups, or
46
- # not for the current platform, or doesn't match the gem constraints.
47
- next unless (dep.groups & groups).any? && dep.should_include?
44
+ dependencies = @definition.dependencies.select do |dep|
45
+ # Select the dependency if it is in any of the requested groups, and
46
+ # for the current platform, and matches the gem constraints.
47
+ (dep.groups & groups).any? && dep.should_include?
48
+ end
49
+
50
+ Plugin.hook(Plugin::Events::GEM_BEFORE_REQUIRE_ALL, dependencies)
48
51
 
52
+ dependencies.each do |dep|
49
53
  required_file = nil
54
+ Plugin.hook(Plugin::Events::GEM_BEFORE_REQUIRE, dep)
50
55
 
51
56
  begin
52
57
  # Loop through all the specified autorequires for the
@@ -76,7 +81,13 @@ module Bundler
76
81
  end
77
82
  end
78
83
  end
84
+
85
+ Plugin.hook(Plugin::Events::GEM_AFTER_REQUIRE, dep)
79
86
  end
87
+
88
+ Plugin.hook(Plugin::Events::GEM_AFTER_REQUIRE_ALL, dependencies)
89
+
90
+ dependencies
80
91
  end
81
92
 
82
93
  def self.definition_method(meth)
@@ -125,7 +136,16 @@ module Bundler
125
136
  specs_to_cache.each do |spec|
126
137
  next if spec.name == "bundler"
127
138
  next if spec.source.is_a?(Source::Gemspec)
128
- spec.source.cache(spec, custom_path) if spec.source.respond_to?(:cache)
139
+ if spec.source.respond_to?(:migrate_cache)
140
+ spec.source.migrate_cache(custom_path, local: local)
141
+ elsif spec.source.respond_to?(:cache)
142
+ spec.source.cache(spec, custom_path)
143
+ end
144
+ end
145
+
146
+ Dir[cache_path.join("*/.git")].each do |git_dir|
147
+ FileUtils.rm_rf(git_dir)
148
+ FileUtils.touch(File.expand_path("../.bundlecache", git_dir))
129
149
  end
130
150
 
131
151
  prune_cache(cache_path) unless Bundler.settings[:no_prune]
@@ -252,10 +272,10 @@ module Bundler
252
272
 
253
273
  def setup_manpath
254
274
  # Add man/ subdirectories from activated bundles to MANPATH for man(1)
255
- manuals = $LOAD_PATH.map do |path|
275
+ manuals = $LOAD_PATH.filter_map do |path|
256
276
  man_subdir = path.sub(/lib$/, "man")
257
277
  man_subdir unless Dir[man_subdir + "/man?/"].empty?
258
- end.compact
278
+ end
259
279
 
260
280
  return if manuals.empty?
261
281
  Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
@@ -84,8 +84,8 @@ module Bundler
84
84
  require "shellwords"
85
85
  cmd = [*Shellwords.shellsplit(bundler_spec_original_cmd), *ARGV]
86
86
  else
87
- cmd = [$PROGRAM_NAME, *ARGV]
88
- cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME)
87
+ cmd = [Process.argv0, *ARGV]
88
+ cmd.unshift(Gem.ruby) unless File.executable?(Process.argv0)
89
89
  end
90
90
 
91
91
  Bundler.with_original_env do
@@ -106,7 +106,6 @@ module Bundler
106
106
 
107
107
  def autoswitching_applies?
108
108
  ENV["BUNDLER_VERSION"].nil? &&
109
- Bundler.rubygems.supports_bundler_trampolining? &&
110
109
  ruby_can_restart_with_same_arguments? &&
111
110
  SharedHelpers.in_bundle? &&
112
111
  lockfile_version
@@ -32,6 +32,7 @@ module Bundler
32
32
  ignore_messages
33
33
  init_gems_rb
34
34
  inline
35
+ lockfile_checksums
35
36
  no_install
36
37
  no_prune
37
38
  path_relative_to_cwd
@@ -162,10 +162,10 @@ module Bundler
162
162
  extra_deps = new_deps - old_deps
163
163
  return if extra_deps.empty?
164
164
 
165
- Bundler.ui.debug "#{spec.full_name} from #{spec.remote} has either corrupted API or lockfile dependencies" \
165
+ Bundler.ui.debug "#{spec.full_name} from #{spec.remote} has corrupted API dependencies" \
166
166
  " (was expecting #{old_deps.map(&:to_s)}, but the real spec has #{new_deps.map(&:to_s)})"
167
167
  raise APIResponseMismatchError,
168
- "Downloading #{spec.full_name} revealed dependencies not in the API or the lockfile (#{extra_deps.join(", ")})." \
168
+ "Downloading #{spec.full_name} revealed dependencies not in the API (#{extra_deps.join(", ")})." \
169
169
  "\nRunning `bundle update #{spec.name}` should fix the problem."
170
170
  end
171
171
 
@@ -84,12 +84,6 @@ module Bundler
84
84
  end
85
85
  end
86
86
 
87
- def not_a_repository?
88
- _, status = git_null("rev-parse", "--resolve-git-dir", path.to_s, dir: path)
89
-
90
- !status.success?
91
- end
92
-
93
87
  def contains?(commit)
94
88
  allowed_with_path do
95
89
  result, status = git_null("branch", "--contains", commit, dir: path)