bundler 2.5.1 → 2.5.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c7f621c84657b3f3fd279d8a48af66bdbade71a8459089ef0ea88aeb0738963
4
- data.tar.gz: a4d4671ac30378b6a175ac0293926de0378f3befd00f674920b1900921fcd3c3
3
+ metadata.gz: a6a2b30d88cbd8182542e60988d19819d7a99751c256c3cdfb4818dd78686d0f
4
+ data.tar.gz: 90b8f7f6f40ce0167c852dde2b2556e723c57bc1f93b03b175557ff8d8f93db3
5
5
  SHA512:
6
- metadata.gz: a7b9404efdc5425a84c5cb0352bdc1197ec1659a428f04533dca5572d1b253761f85df3b8837a583d98866e9f49c9edff057eda6804400b747edae9dfb8b24f3
7
- data.tar.gz: 8893ef747d56291328bfec9bd51a58802d60b51f4077b999971fe76b169d00f636ad853bd0f7238b7c3770aa2e912462f7dc086189e792bb796c18891f07f4c2
6
+ metadata.gz: 05f5ae18dc9d8e4cb36ad2cadbd40c381427fd04d6b854e161fecccfae5ed4c9a4b57451a263f8e5698cd86a05798dc324bcc91a207c8ceeb57fb6cd80e88a90
7
+ data.tar.gz: c04850996399dcd36921294ff6949ccfd01a2b2e872285d07e716a069252b009b08a900c04cf9ddfac1147bd60e0d6c5e1c3bda2b340c968bbc69a9dd8a984bb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 2.5.2 (December 21, 2023)
2
+
3
+ ## Enhancements:
4
+
5
+ - Avoid vendored thor gem polluting the global namespace [#7305](https://github.com/rubygems/rubygems/pull/7305)
6
+
7
+ ## Bug fixes:
8
+
9
+ - Fix `bundle update --bundler` when latest version does not support current ruby [#7310](https://github.com/rubygems/rubygems/pull/7310)
10
+ - Fix incorrect lockfiles being generated in some situations [#7307](https://github.com/rubygems/rubygems/pull/7307)
11
+ - Fix incorrect re-resolve messages [#7306](https://github.com/rubygems/rubygems/pull/7306)
12
+
1
13
  # 2.5.1 (December 15, 2023)
2
14
 
3
15
  ## Bug fixes:
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2023-12-15".freeze
8
- @git_commit_sha = "c944d05909".freeze
7
+ @built_at = "2023-12-21".freeze
8
+ @git_commit_sha = "00351925e4".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -496,7 +496,15 @@ module Bundler
496
496
  private :sources
497
497
 
498
498
  def nothing_changed?
499
- !@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@missing_lockfile_dep && !@unlocking_bundler && !@invalid_lockfile_dep
499
+ !@source_changes &&
500
+ !@dependency_changes &&
501
+ !@new_platform &&
502
+ !@path_changes &&
503
+ !@local_changes &&
504
+ !@missing_lockfile_dep &&
505
+ !@unlocking_bundler &&
506
+ !@locked_spec_with_missing_deps &&
507
+ !@locked_spec_with_invalid_deps
500
508
  end
501
509
 
502
510
  def no_resolve_needed?
@@ -653,7 +661,8 @@ module Bundler
653
661
  [@local_changes, "the gemspecs for git local gems changed"],
654
662
  [@missing_lockfile_dep, "your lock file is missing \"#{@missing_lockfile_dep}\""],
655
663
  [@unlocking_bundler, "an update to the version of Bundler itself was requested"],
656
- [@invalid_lockfile_dep, "your lock file has an invalid dependency \"#{@invalid_lockfile_dep}\""],
664
+ [@locked_spec_with_missing_deps, "your lock file includes \"#{@locked_spec_with_missing_deps}\" but not some of its dependencies"],
665
+ [@locked_spec_with_invalid_deps, "your lockfile does not satisfy dependencies of \"#{@locked_spec_with_invalid_deps}\""],
657
666
  ].select(&:first).map(&:last).join(", ")
658
667
  end
659
668
 
@@ -708,26 +717,25 @@ module Bundler
708
717
  end
709
718
 
710
719
  def check_lockfile
711
- @invalid_lockfile_dep = nil
712
720
  @missing_lockfile_dep = nil
713
721
 
714
- locked_names = @locked_specs.map(&:name)
722
+ @locked_spec_with_invalid_deps = nil
723
+ @locked_spec_with_missing_deps = nil
724
+
715
725
  missing = []
716
726
  invalid = []
717
727
 
718
728
  @locked_specs.each do |s|
719
- s.dependencies.each do |dep|
720
- next if dep.name == "bundler"
729
+ validation = @locked_specs.validate_deps(s)
721
730
 
722
- missing << s unless locked_names.include?(dep.name)
723
- invalid << s if @locked_specs.none? {|spec| dep.matches_spec?(spec) }
724
- end
731
+ missing << s if validation == :missing
732
+ invalid << s if validation == :invalid
725
733
  end
726
734
 
727
735
  if missing.any?
728
736
  @locked_specs.delete(missing)
729
737
 
730
- @missing_lockfile_dep = missing.first.name
738
+ @locked_spec_with_missing_deps = missing.first.name
731
739
  elsif !@dependency_changes
732
740
  @missing_lockfile_dep = current_dependencies.find do |d|
733
741
  @locked_specs[d.name].empty? && d.name != "bundler"
@@ -737,7 +745,7 @@ module Bundler
737
745
  if invalid.any?
738
746
  @locked_specs.delete(invalid)
739
747
 
740
- @invalid_lockfile_dep = invalid.first.name
748
+ @locked_spec_with_invalid_deps = invalid.first.name
741
749
  end
742
750
  end
743
751
 
@@ -10,6 +10,8 @@ module Bundler
10
10
  attr_reader :name, :version, :platform
11
11
  attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version
12
12
 
13
+ alias_method :runtime_dependencies, :dependencies
14
+
13
15
  def self.from_spec(s)
14
16
  lazy_spec = new(s.name, s.version, s.platform, s.source)
15
17
  lazy_spec.dependencies = s.dependencies
@@ -88,6 +88,10 @@ module Bundler
88
88
  end
89
89
  end
90
90
 
91
+ def runtime_dependencies
92
+ dependencies.select(&:runtime?)
93
+ end
94
+
91
95
  def git_version
92
96
  return unless loaded_from && source.is_a?(Bundler::Source::Git)
93
97
  " #{source.revision[0..6]}"
@@ -121,7 +121,7 @@ module Bundler
121
121
  source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
122
122
  source.remote!
123
123
  source.add_dependency_names("bundler")
124
- source.specs
124
+ source.specs.select(&:matches_current_metadata?)
125
125
  end
126
126
  end
127
127
 
@@ -37,7 +37,7 @@ module Bundler
37
37
 
38
38
  specs_for_dep.first.dependencies.each do |d|
39
39
  next if d.type == :development
40
- incomplete = true if d.name != "bundler" && lookup[d.name].empty?
40
+ incomplete = true if d.name != "bundler" && lookup[d.name].nil?
41
41
  deps << [d, dep[1]]
42
42
  end
43
43
  else
@@ -45,7 +45,7 @@ module Bundler
45
45
  end
46
46
 
47
47
  if incomplete && check
48
- @incomplete_specs += lookup[name].any? ? lookup[name] : [LazySpecification.new(name, nil, nil)]
48
+ @incomplete_specs += lookup[name] || [LazySpecification.new(name, nil, nil)]
49
49
  end
50
50
  end
51
51
 
@@ -64,7 +64,9 @@ module Bundler
64
64
  valid_platform = lookup.all? do |_, specs|
65
65
  spec = specs.first
66
66
  matching_specs = spec.source.specs.search([spec.name, spec.version])
67
- platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find(&:matches_current_metadata?)
67
+ platform_spec = GemHelpers.select_best_platform_match(matching_specs, platform).find do |s|
68
+ s.matches_current_metadata? && valid_dependencies?(s)
69
+ end
68
70
 
69
71
  if platform_spec
70
72
  new_specs << LazySpecification.from_spec(platform_spec)
@@ -90,9 +92,20 @@ module Bundler
90
92
  platforms
91
93
  end
92
94
 
95
+ def validate_deps(s)
96
+ s.runtime_dependencies.each do |dep|
97
+ next if dep.name == "bundler"
98
+
99
+ return :missing unless names.include?(dep.name)
100
+ return :invalid if none? {|spec| dep.matches_spec?(spec) }
101
+ end
102
+
103
+ :valid
104
+ end
105
+
93
106
  def [](key)
94
107
  key = key.name if key.respond_to?(:name)
95
- lookup[key].reverse
108
+ lookup[key]&.reverse || []
96
109
  end
97
110
 
98
111
  def []=(key, value)
@@ -167,7 +180,7 @@ module Bundler
167
180
  end
168
181
 
169
182
  def what_required(spec)
170
- unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
183
+ unless req = find {|s| s.runtime_dependencies.any? {|d| d.name == spec.name } }
171
184
  return [spec]
172
185
  end
173
186
  what_required(req) << spec
@@ -193,8 +206,16 @@ module Bundler
193
206
  sorted.each(&b)
194
207
  end
195
208
 
209
+ def names
210
+ lookup.keys
211
+ end
212
+
196
213
  private
197
214
 
215
+ def valid_dependencies?(s)
216
+ validate_deps(s) == :valid
217
+ end
218
+
198
219
  def sorted
199
220
  rake = @specs.find {|s| s.name == "rake" }
200
221
  begin
@@ -213,8 +234,9 @@ module Bundler
213
234
 
214
235
  def lookup
215
236
  @lookup ||= begin
216
- lookup = Hash.new {|h, k| h[k] = [] }
237
+ lookup = {}
217
238
  @specs.each do |s|
239
+ lookup[s.name] ||= []
218
240
  lookup[s.name] << s
219
241
  end
220
242
  lookup
@@ -228,6 +250,8 @@ module Bundler
228
250
 
229
251
  def specs_for_dependency(dep, platform)
230
252
  specs_for_name = lookup[dep.name]
253
+ return [] unless specs_for_name
254
+
231
255
  matching_specs = if dep.force_ruby_platform
232
256
  GemHelpers.force_ruby_platform(specs_for_name)
233
257
  else
@@ -240,7 +264,11 @@ module Bundler
240
264
  def tsort_each_child(s)
241
265
  s.dependencies.sort_by(&:name).each do |d|
242
266
  next if d.type == :development
243
- lookup[d.name].each {|s2| yield s2 }
267
+
268
+ specs_for_name = lookup[d.name]
269
+ next unless specs_for_name
270
+
271
+ specs_for_name.each {|s2| yield s2 }
244
272
  end
245
273
  end
246
274
  end
@@ -1,5 +1,4 @@
1
1
  require_relative "basic"
2
- require_relative "lcs_diff"
3
2
 
4
3
  class Bundler::Thor
5
4
  module Shell
@@ -7,8 +6,6 @@ class Bundler::Thor
7
6
  # Bundler::Thor::Shell::Basic to see all available methods.
8
7
  #
9
8
  class Color < Basic
10
- include LCSDiff
11
-
12
9
  # Embed in a String to clear all previous ANSI sequences.
13
10
  CLEAR = "\e[0m"
14
11
  # The start of an ANSI bold sequence.
@@ -1,5 +1,4 @@
1
1
  require_relative "basic"
2
- require_relative "lcs_diff"
3
2
 
4
3
  class Bundler::Thor
5
4
  module Shell
@@ -7,8 +6,6 @@ class Bundler::Thor
7
6
  # Bundler::Thor::Shell::Basic to see all available methods.
8
7
  #
9
8
  class HTML < Basic
10
- include LCSDiff
11
-
12
9
  # The start of an HTML bold sequence.
13
10
  BOLD = "font-weight: bold"
14
11
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.5.1".freeze
4
+ VERSION = "2.5.2".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
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.5.1
4
+ version: 2.5.2
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: 2023-12-15 00:00:00.000000000 Z
25
+ date: 2023-12-21 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
@@ -338,7 +338,6 @@ files:
338
338
  - lib/bundler/vendor/thor/lib/thor/shell/color.rb
339
339
  - lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb
340
340
  - lib/bundler/vendor/thor/lib/thor/shell/html.rb
341
- - lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb
342
341
  - lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb
343
342
  - lib/bundler/vendor/thor/lib/thor/shell/terminal.rb
344
343
  - lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb
@@ -399,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
399
398
  - !ruby/object:Gem::Version
400
399
  version: 3.2.3
401
400
  requirements: []
402
- rubygems_version: 3.5.1
401
+ rubygems_version: 3.5.2
403
402
  signing_key:
404
403
  specification_version: 4
405
404
  summary: The best way to manage your application's dependencies
@@ -1,49 +0,0 @@
1
- module LCSDiff
2
- protected
3
-
4
- # Overwrite show_diff to show diff with colors if Diff::LCS is
5
- # available.
6
- def show_diff(destination, content) #:nodoc:
7
- if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
8
- actual = File.binread(destination).to_s.split("\n")
9
- content = content.to_s.split("\n")
10
-
11
- Diff::LCS.sdiff(actual, content).each do |diff|
12
- output_diff_line(diff)
13
- end
14
- else
15
- super
16
- end
17
- end
18
-
19
- private
20
-
21
- def output_diff_line(diff) #:nodoc:
22
- case diff.action
23
- when "-"
24
- say "- #{diff.old_element.chomp}", :red, true
25
- when "+"
26
- say "+ #{diff.new_element.chomp}", :green, true
27
- when "!"
28
- say "- #{diff.old_element.chomp}", :red, true
29
- say "+ #{diff.new_element.chomp}", :green, true
30
- else
31
- say " #{diff.old_element.chomp}", nil, true
32
- end
33
- end
34
-
35
- # Check if Diff::LCS is loaded. If it is, use it to create pretty output
36
- # for diff.
37
- def diff_lcs_loaded? #:nodoc:
38
- return true if defined?(Diff::LCS)
39
- return @diff_lcs_loaded unless @diff_lcs_loaded.nil?
40
-
41
- @diff_lcs_loaded = begin
42
- require "diff/lcs"
43
- true
44
- rescue LoadError
45
- false
46
- end
47
- end
48
-
49
- end