bundler 2.2.21 → 2.2.25

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +63 -0
  3. data/lib/bundler.rb +4 -9
  4. data/lib/bundler/build_metadata.rb +2 -2
  5. data/lib/bundler/cli.rb +7 -0
  6. data/lib/bundler/cli/cache.rb +1 -1
  7. data/lib/bundler/cli/doctor.rb +12 -2
  8. data/lib/bundler/cli/install.rb +5 -18
  9. data/lib/bundler/cli/list.rb +7 -1
  10. data/lib/bundler/cli/lock.rb +5 -1
  11. data/lib/bundler/cli/open.rb +1 -2
  12. data/lib/bundler/cli/update.rb +9 -4
  13. data/lib/bundler/current_ruby.rb +4 -4
  14. data/lib/bundler/definition.rb +48 -93
  15. data/lib/bundler/dsl.rb +23 -21
  16. data/lib/bundler/feature_flag.rb +0 -1
  17. data/lib/bundler/fetcher/downloader.rb +1 -2
  18. data/lib/bundler/index.rb +1 -5
  19. data/lib/bundler/installer.rb +4 -4
  20. data/lib/bundler/installer/gem_installer.rb +3 -16
  21. data/lib/bundler/installer/standalone.rb +1 -1
  22. data/lib/bundler/lockfile_parser.rb +3 -20
  23. data/lib/bundler/man/bundle-add.1 +1 -1
  24. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  25. data/lib/bundler/man/bundle-cache.1 +1 -1
  26. data/lib/bundler/man/bundle-check.1 +1 -1
  27. data/lib/bundler/man/bundle-clean.1 +1 -1
  28. data/lib/bundler/man/bundle-config.1 +1 -4
  29. data/lib/bundler/man/bundle-config.1.ronn +0 -3
  30. data/lib/bundler/man/bundle-doctor.1 +1 -1
  31. data/lib/bundler/man/bundle-exec.1 +1 -1
  32. data/lib/bundler/man/bundle-gem.1 +1 -1
  33. data/lib/bundler/man/bundle-info.1 +1 -1
  34. data/lib/bundler/man/bundle-init.1 +1 -1
  35. data/lib/bundler/man/bundle-inject.1 +1 -1
  36. data/lib/bundler/man/bundle-install.1 +1 -1
  37. data/lib/bundler/man/bundle-list.1 +1 -1
  38. data/lib/bundler/man/bundle-lock.1 +1 -1
  39. data/lib/bundler/man/bundle-open.1 +1 -1
  40. data/lib/bundler/man/bundle-outdated.1 +1 -1
  41. data/lib/bundler/man/bundle-platform.1 +1 -1
  42. data/lib/bundler/man/bundle-pristine.1 +1 -1
  43. data/lib/bundler/man/bundle-remove.1 +1 -1
  44. data/lib/bundler/man/bundle-show.1 +1 -1
  45. data/lib/bundler/man/bundle-update.1 +4 -4
  46. data/lib/bundler/man/bundle-update.1.ronn +3 -3
  47. data/lib/bundler/man/bundle-viz.1 +1 -1
  48. data/lib/bundler/man/bundle.1 +1 -1
  49. data/lib/bundler/man/gemfile.5 +1 -1
  50. data/lib/bundler/plugin.rb +2 -0
  51. data/lib/bundler/plugin/index.rb +4 -1
  52. data/lib/bundler/plugin/installer.rb +1 -1
  53. data/lib/bundler/resolver.rb +1 -1
  54. data/lib/bundler/rubygems_ext.rb +22 -6
  55. data/lib/bundler/rubygems_gem_installer.rb +5 -1
  56. data/lib/bundler/runtime.rb +16 -9
  57. data/lib/bundler/settings.rb +4 -7
  58. data/lib/bundler/setup.rb +2 -2
  59. data/lib/bundler/shared_helpers.rb +0 -7
  60. data/lib/bundler/source/git/git_proxy.rb +1 -2
  61. data/lib/bundler/source/rubygems.rb +5 -14
  62. data/lib/bundler/source_list.rb +50 -20
  63. data/lib/bundler/spec_set.rb +15 -42
  64. data/lib/bundler/templates/Executable.bundler +6 -6
  65. data/lib/bundler/version.rb +1 -1
  66. data/lib/bundler/worker.rb +17 -2
  67. metadata +3 -3
@@ -11,15 +11,14 @@ module Bundler
11
11
  @specs = specs
12
12
  end
13
13
 
14
- def for(dependencies, skip = [], check = false, match_current_platform = false, raise_on_missing = true)
14
+ def for(dependencies, check = false, match_current_platform = false)
15
15
  handled = []
16
16
  deps = dependencies.dup
17
17
  specs = []
18
- skip += ["bundler"]
19
18
 
20
19
  loop do
21
20
  break unless dep = deps.shift
22
- next if handled.include?(dep) || skip.include?(dep.name)
21
+ next if handled.any?{|d| d.name == dep.name && (match_current_platform || d.__platform == dep.__platform) } || dep.name == "bundler"
23
22
 
24
23
  handled << dep
25
24
 
@@ -34,11 +33,6 @@ module Bundler
34
33
  end
35
34
  elsif check
36
35
  return false
37
- elsif raise_on_missing
38
- others = lookup[dep.name] if match_current_platform
39
- message = "Unable to find a spec satisfying #{dep} in the set. Perhaps the lockfile is corrupted?"
40
- message += " Found #{others.join(", ")} that did not match the current platform." if others && !others.empty?
41
- raise GemNotFound, message
42
36
  end
43
37
  end
44
38
 
@@ -46,11 +40,7 @@ module Bundler
46
40
  specs << spec
47
41
  end
48
42
 
49
- check ? true : SpecSet.new(specs)
50
- end
51
-
52
- def valid_for?(deps)
53
- self.for(deps, [], true)
43
+ check ? true : specs
54
44
  end
55
45
 
56
46
  def [](key)
@@ -76,52 +66,35 @@ module Bundler
76
66
  lookup.dup
77
67
  end
78
68
 
79
- def materialize(deps, missing_specs = nil)
80
- materialized = self.for(deps, [], false, true, !missing_specs).to_a
81
-
82
- materialized.group_by(&:source).each do |source, specs|
83
- next unless specs.any?{|s| s.is_a?(LazySpecification) }
84
-
85
- source.local!
86
- names = -> { specs.map(&:name).uniq }
87
- source.double_check_for(names)
88
- end
69
+ def materialize(deps)
70
+ materialized = self.for(deps, false, true)
89
71
 
90
72
  materialized.map! do |s|
91
73
  next s unless s.is_a?(LazySpecification)
92
- spec = s.__materialize__
93
- unless spec
94
- unless missing_specs
95
- raise GemNotFound, "Could not find #{s.full_name} in any of the sources"
96
- end
97
- missing_specs << s
98
- end
99
- spec
74
+ s.source.local!
75
+ s.__materialize__ || s
100
76
  end
101
- SpecSet.new(missing_specs ? materialized.compact : materialized)
77
+ SpecSet.new(materialized)
102
78
  end
103
79
 
104
80
  # Materialize for all the specs in the spec set, regardless of what platform they're for
105
81
  # This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
106
82
  # @return [Array<Gem::Specification>]
107
83
  def materialized_for_all_platforms
108
- @specs.group_by(&:source).each do |source, specs|
109
- next unless specs.any?{|s| s.is_a?(LazySpecification) }
110
-
111
- source.local!
112
- source.remote!
113
- names = -> { specs.map(&:name).uniq }
114
- source.double_check_for(names)
115
- end
116
-
117
84
  @specs.map do |s|
118
85
  next s unless s.is_a?(LazySpecification)
86
+ s.source.local!
87
+ s.source.remote!
119
88
  spec = s.__materialize__
120
89
  raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
121
90
  spec
122
91
  end
123
92
  end
124
93
 
94
+ def missing_specs
95
+ @specs.select {|s| s.is_a?(LazySpecification) }
96
+ end
97
+
125
98
  def merge(set)
126
99
  arr = sorted.dup
127
100
  set.each do |set_spec|
@@ -199,7 +172,7 @@ module Bundler
199
172
  def spec_for_dependency(dep, match_current_platform)
200
173
  specs_for_platforms = lookup[dep.name]
201
174
  if match_current_platform
202
- GemHelpers.select_best_platform_match(specs_for_platforms, Bundler.local_platform)
175
+ GemHelpers.select_best_platform_match(specs_for_platforms.select{|s| Gem::Platform.match_spec?(s) }, Bundler.local_platform)
203
176
  else
204
177
  GemHelpers.select_best_platform_match(specs_for_platforms, dep.__platform)
205
178
  end
@@ -60,16 +60,16 @@ m = Module.new do
60
60
  Regexp.last_match(1)
61
61
  end
62
62
 
63
- def bundler_version
64
- @bundler_version ||=
63
+ def bundler_requirement
64
+ @bundler_requirement ||=
65
65
  env_var_version || cli_arg_version ||
66
- lockfile_version
66
+ bundler_requirement_for(lockfile_version)
67
67
  end
68
68
 
69
- def bundler_requirement
70
- return "#{Gem::Requirement.default}.a" unless bundler_version
69
+ def bundler_requirement_for(version)
70
+ return "#{Gem::Requirement.default}.a" unless version
71
71
 
72
- bundler_gem_version = Gem::Version.new(bundler_version)
72
+ bundler_gem_version = Gem::Version.new(version)
73
73
 
74
74
  requirement = bundler_gem_version.approximate_recommendation
75
75
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.2.21".freeze
4
+ VERSION = "2.2.25".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -26,7 +26,7 @@ module Bundler
26
26
  @func = func
27
27
  @size = size
28
28
  @threads = nil
29
- SharedHelpers.trap("INT") { abort_threads }
29
+ @previous_interrupt_handler = nil
30
30
  end
31
31
 
32
32
  # Enqueue a request to be executed in the worker pool
@@ -68,13 +68,16 @@ module Bundler
68
68
  # so as worker threads after retrieving it, shut themselves down
69
69
  def stop_threads
70
70
  return unless @threads
71
+
71
72
  @threads.each { @request_queue.enq POISON }
72
73
  @threads.each(&:join)
74
+
75
+ remove_interrupt_handler
76
+
73
77
  @threads = nil
74
78
  end
75
79
 
76
80
  def abort_threads
77
- return unless @threads
78
81
  Bundler.ui.debug("\n#{caller.join("\n")}")
79
82
  @threads.each(&:exit)
80
83
  exit 1
@@ -94,11 +97,23 @@ module Bundler
94
97
  end
95
98
  end.compact
96
99
 
100
+ add_interrupt_handler unless @threads.empty?
101
+
97
102
  return if creation_errors.empty?
98
103
 
99
104
  message = "Failed to create threads for the #{name} worker: #{creation_errors.map(&:to_s).uniq.join(", ")}"
100
105
  raise ThreadCreationError, message if @threads.empty?
101
106
  Bundler.ui.info message
102
107
  end
108
+
109
+ def add_interrupt_handler
110
+ @previous_interrupt_handler = trap("INT") { abort_threads }
111
+ end
112
+
113
+ def remove_interrupt_handler
114
+ return unless @previous_interrupt_handler
115
+
116
+ trap "INT", @previous_interrupt_handler
117
+ end
103
118
  end
104
119
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.21
4
+ version: 2.2.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Arko
@@ -22,7 +22,7 @@ authors:
22
22
  autorequire:
23
23
  bindir: exe
24
24
  cert_chain: []
25
- date: 2021-06-23 00:00:00.000000000 Z
25
+ date: 2021-07-30 00:00:00.000000000 Z
26
26
  dependencies: []
27
27
  description: Bundler manages an application's dependencies through its entire life,
28
28
  across many machines, systematically and repeatably
@@ -354,7 +354,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
354
  - !ruby/object:Gem::Version
355
355
  version: 2.5.2
356
356
  requirements: []
357
- rubygems_version: 3.2.21
357
+ rubygems_version: 3.2.25
358
358
  signing_key:
359
359
  specification_version: 4
360
360
  summary: The best way to manage your application's dependencies