bundler 2.5.0 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96c3a9a5a42642d473042853b90ec2e07a4be74e6e1b5aba5bfdc3bcc0ed8776
4
- data.tar.gz: 5ccfc33ca9f1b86f30d896fc89db5e556b1dab1ec84361b1f2aa9bb65ff39769
3
+ metadata.gz: a6a2b30d88cbd8182542e60988d19819d7a99751c256c3cdfb4818dd78686d0f
4
+ data.tar.gz: 90b8f7f6f40ce0167c852dde2b2556e723c57bc1f93b03b175557ff8d8f93db3
5
5
  SHA512:
6
- metadata.gz: f9822abc2d327f47a25c580b932e4cf3108ab8ecc41d8c206db8840c27779ec4943daa0a28c05e36503c1a04f5b3cb82f2b93a5f32538cf52e2a62c8fee5c11c
7
- data.tar.gz: f6f4e921e4c606352f0b2d1e54b2674f999690dda1a8d932b3c78bb0f6561f4527e4bf88fbfadb1061bbeb097014225fae9609262f415d1c3e08d61581e7f387
6
+ metadata.gz: 05f5ae18dc9d8e4cb36ad2cadbd40c381427fd04d6b854e161fecccfae5ed4c9a4b57451a263f8e5698cd86a05798dc324bcc91a207c8ceeb57fb6cd80e88a90
7
+ data.tar.gz: c04850996399dcd36921294ff6949ccfd01a2b2e872285d07e716a069252b009b08a900c04cf9ddfac1147bd60e0d6c5e1c3bda2b340c968bbc69a9dd8a984bb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
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
+
13
+ # 2.5.1 (December 15, 2023)
14
+
15
+ ## Bug fixes:
16
+
17
+ - Fix `ruby` Gemfile DSL with `file:` parameter no longer working [#7288](https://github.com/rubygems/rubygems/pull/7288)
18
+
19
+ ## Performance:
20
+
21
+ - Save array allocation for every dependency in Gemfile [#7270](https://github.com/rubygems/rubygems/pull/7270)
22
+
1
23
  # 2.5.0 (December 15, 2023)
2
24
 
3
25
  ## Breaking changes:
@@ -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 = "58fdbff35a".freeze
7
+ @built_at = "2023-12-21".freeze
8
+ @git_commit_sha = "00351925e4".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -30,6 +30,7 @@ module Bundler
30
30
 
31
31
  def from_api(digest, source_uri, algo = DEFAULT_ALGORITHM)
32
32
  return if Bundler.settings[:disable_checksum_validation]
33
+
33
34
  Checksum.new(algo, to_hexdigest(digest, algo), Source.new(:api, source_uri))
34
35
  end
35
36
 
@@ -41,11 +42,13 @@ module Bundler
41
42
  def to_hexdigest(digest, algo = DEFAULT_ALGORITHM)
42
43
  return digest unless algo == DEFAULT_ALGORITHM
43
44
  return digest if digest.match?(/\A[0-9a-f]{64}\z/i)
45
+
44
46
  if digest.match?(%r{\A[-0-9a-z_+/]{43}={0,2}\z}i)
45
47
  digest = digest.tr("-_", "+/") # fix urlsafe base64
46
- return digest.unpack1("m0").unpack1("H*")
48
+ digest.unpack1("m0").unpack1("H*")
49
+ else
50
+ raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
47
51
  end
48
- raise ArgumentError, "#{digest.inspect} is not a valid SHA256 hex or base64 digest"
49
52
  end
50
53
  end
51
54
 
@@ -63,6 +66,10 @@ module Bundler
63
66
 
64
67
  alias_method :eql?, :==
65
68
 
69
+ def same_source?(other)
70
+ sources.include?(other.sources.first)
71
+ end
72
+
66
73
  def match?(other)
67
74
  other.is_a?(self.class) && other.digest == digest && other.algo == algo
68
75
  end
@@ -81,6 +88,7 @@ module Bundler
81
88
 
82
89
  def merge!(other)
83
90
  return nil unless match?(other)
91
+
84
92
  @sources.concat(other.sources).uniq!
85
93
  self
86
94
  end
@@ -161,26 +169,17 @@ module Bundler
161
169
 
162
170
  def initialize
163
171
  @store = {}
164
- end
165
-
166
- def initialize_copy(other)
167
- @store = {}
168
- other.store.each do |lock_name, checksums|
169
- store[lock_name] = checksums.dup
170
- end
172
+ @store_mutex = Mutex.new
171
173
  end
172
174
 
173
175
  def inspect
174
176
  "#<#{self.class}:#{object_id} size=#{store.size}>"
175
177
  end
176
178
 
177
- def fetch(spec, algo = DEFAULT_ALGORITHM)
178
- store[spec.name_tuple.lock_name]&.fetch(algo, nil)
179
- end
180
-
181
179
  # Replace when the new checksum is from the same source.
182
- # The primary purpose of this registering checksums from gems where there are
180
+ # The primary purpose is registering checksums from gems where there are
183
181
  # duplicates of the same gem (according to full_name) in the index.
182
+ #
184
183
  # In particular, this is when 2 gems have two similar platforms, e.g.
185
184
  # "darwin20" and "darwin-20", both of which resolve to darwin-20.
186
185
  # In the Index, the later gem replaces the former, so we do that here.
@@ -192,19 +191,19 @@ module Bundler
192
191
  return unless checksum
193
192
 
194
193
  lock_name = spec.name_tuple.lock_name
195
- checksums = (store[lock_name] ||= {})
196
- existing = checksums[checksum.algo]
197
-
198
- # we assume only one source because this is used while building the index
199
- if !existing || existing.sources.first == checksum.sources.first
200
- checksums[checksum.algo] = checksum
201
- else
202
- register_checksum(lock_name, checksum)
194
+ @store_mutex.synchronize do
195
+ existing = fetch_checksum(lock_name, checksum.algo)
196
+ if !existing || existing.same_source?(checksum)
197
+ store_checksum(lock_name, checksum)
198
+ else
199
+ merge_checksum(lock_name, checksum, existing)
200
+ end
203
201
  end
204
202
  end
205
203
 
206
204
  def register(spec, checksum)
207
205
  return unless checksum
206
+
208
207
  register_checksum(spec.name_tuple.lock_name, checksum)
209
208
  end
210
209
 
@@ -218,7 +217,8 @@ module Bundler
218
217
 
219
218
  def to_lock(spec)
220
219
  lock_name = spec.name_tuple.lock_name
221
- if checksums = store[lock_name]
220
+ checksums = @store[lock_name]
221
+ if checksums
222
222
  "#{lock_name} #{checksums.values.map(&:to_lock).sort.join(",")}"
223
223
  else
224
224
  lock_name
@@ -228,18 +228,27 @@ module Bundler
228
228
  private
229
229
 
230
230
  def register_checksum(lock_name, checksum)
231
- return unless checksum
232
- checksums = (store[lock_name] ||= {})
233
- existing = checksums[checksum.algo]
234
-
235
- if !existing
236
- checksums[checksum.algo] = checksum
237
- elsif existing.merge!(checksum)
238
- checksum
239
- else
240
- raise ChecksumMismatchError.new(lock_name, existing, checksum)
231
+ @store_mutex.synchronize do
232
+ existing = fetch_checksum(lock_name, checksum.algo)
233
+ if existing
234
+ merge_checksum(lock_name, checksum, existing)
235
+ else
236
+ store_checksum(lock_name, checksum)
237
+ end
241
238
  end
242
239
  end
240
+
241
+ def merge_checksum(lock_name, checksum, existing)
242
+ existing.merge!(checksum) || raise(ChecksumMismatchError.new(lock_name, existing, checksum))
243
+ end
244
+
245
+ def store_checksum(lock_name, checksum)
246
+ (@store[lock_name] ||= {})[checksum.algo] = checksum
247
+ end
248
+
249
+ def fetch_checksum(lock_name, algo)
250
+ @store[lock_name]&.fetch(algo, nil)
251
+ end
243
252
  end
244
253
  end
245
254
  end
@@ -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
 
data/lib/bundler/dsl.rb CHANGED
@@ -20,7 +20,7 @@ module Bundler
20
20
 
21
21
  GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
22
22
 
23
- attr_reader :gemspecs
23
+ attr_reader :gemspecs, :gemfile
24
24
  attr_accessor :dependencies
25
25
 
26
26
  def initialize
@@ -404,13 +404,11 @@ module Bundler
404
404
  end
405
405
 
406
406
  def validate_keys(command, opts, valid_keys)
407
- invalid_keys = opts.keys - valid_keys
408
-
409
- git_source = opts.keys & @git_sources.keys.map(&:to_s)
410
- if opts["branch"] && !(opts["git"] || opts["github"] || git_source.any?)
407
+ if opts["branch"] && !(opts["git"] || opts["github"] || (opts.keys & @git_sources.keys.map(&:to_s)).any?)
411
408
  raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
412
409
  end
413
410
 
411
+ invalid_keys = opts.keys - valid_keys
414
412
  return true unless invalid_keys.any?
415
413
 
416
414
  message = String.new
@@ -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
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -20,7 +20,7 @@ autoload :OpenSSL, 'openssl'
20
20
  #
21
21
  # Example:
22
22
  #
23
- # require 'bundler/vendor/net-http/lib/net/http/persistent'
23
+ # require 'bundler/vendor/net-http-persistent/lib/net/http/persistent'
24
24
  #
25
25
  # uri = Bundler::URI 'http://example.com/awesome/web/service'
26
26
  #
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -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
 
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -0,0 +1 @@
1
+ # Vendored files do not need to be documented
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.5.0".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
data/lib/bundler.rb CHANGED
@@ -100,9 +100,7 @@ module Bundler
100
100
  end
101
101
 
102
102
  def create_bundle_path
103
- SharedHelpers.filesystem_access(bundle_path.to_s) do |p|
104
- mkdir_p(p)
105
- end unless bundle_path.exist?
103
+ mkdir_p(bundle_path) unless bundle_path.exist?
106
104
 
107
105
  @bundle_path = bundle_path.realpath
108
106
  rescue Errno::EEXIST
@@ -119,7 +117,7 @@ module Bundler
119
117
  @bin_path ||= begin
120
118
  path = settings[:bin] || "bin"
121
119
  path = Pathname.new(path).expand_path(root).expand_path
122
- SharedHelpers.filesystem_access(path) {|p| FileUtils.mkdir_p(p) }
120
+ mkdir_p(path)
123
121
  path
124
122
  end
125
123
  end
@@ -483,7 +481,7 @@ module Bundler
483
481
  configured_bundle_path.use_system_gems?
484
482
  end
485
483
 
486
- def mkdir_p(path, options = {})
484
+ def mkdir_p(path)
487
485
  SharedHelpers.filesystem_access(path, :write) do |p|
488
486
  FileUtils.mkdir_p(p)
489
487
  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.5.0
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
@@ -273,18 +273,22 @@ files:
273
273
  - lib/bundler/uri_credentials_filter.rb
274
274
  - lib/bundler/uri_normalizer.rb
275
275
  - lib/bundler/vendor/.document
276
+ - lib/bundler/vendor/connection_pool/.document
276
277
  - lib/bundler/vendor/connection_pool/LICENSE
277
278
  - lib/bundler/vendor/connection_pool/lib/connection_pool.rb
278
279
  - lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb
279
280
  - lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb
280
281
  - lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb
282
+ - lib/bundler/vendor/fileutils/.document
281
283
  - lib/bundler/vendor/fileutils/LICENSE.txt
282
284
  - lib/bundler/vendor/fileutils/lib/fileutils.rb
285
+ - lib/bundler/vendor/net-http-persistent/.document
283
286
  - lib/bundler/vendor/net-http-persistent/README.rdoc
284
287
  - lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb
285
288
  - lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb
286
289
  - lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb
287
290
  - lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb
291
+ - lib/bundler/vendor/pub_grub/.document
288
292
  - lib/bundler/vendor/pub_grub/LICENSE.txt
289
293
  - lib/bundler/vendor/pub_grub/lib/pub_grub.rb
290
294
  - lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb
@@ -302,6 +306,7 @@ files:
302
306
  - lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb
303
307
  - lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb
304
308
  - lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb
309
+ - lib/bundler/vendor/thor/.document
305
310
  - lib/bundler/vendor/thor/LICENSE.md
306
311
  - lib/bundler/vendor/thor/lib/thor.rb
307
312
  - lib/bundler/vendor/thor/lib/thor/actions.rb
@@ -333,14 +338,15 @@ files:
333
338
  - lib/bundler/vendor/thor/lib/thor/shell/color.rb
334
339
  - lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb
335
340
  - lib/bundler/vendor/thor/lib/thor/shell/html.rb
336
- - lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb
337
341
  - lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb
338
342
  - lib/bundler/vendor/thor/lib/thor/shell/terminal.rb
339
343
  - lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb
340
344
  - lib/bundler/vendor/thor/lib/thor/util.rb
341
345
  - lib/bundler/vendor/thor/lib/thor/version.rb
346
+ - lib/bundler/vendor/tsort/.document
342
347
  - lib/bundler/vendor/tsort/LICENSE.txt
343
348
  - lib/bundler/vendor/tsort/lib/tsort.rb
349
+ - lib/bundler/vendor/uri/.document
344
350
  - lib/bundler/vendor/uri/LICENSE.txt
345
351
  - lib/bundler/vendor/uri/lib/uri.rb
346
352
  - lib/bundler/vendor/uri/lib/uri/common.rb
@@ -392,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
392
398
  - !ruby/object:Gem::Version
393
399
  version: 3.2.3
394
400
  requirements: []
395
- rubygems_version: 3.5.0
401
+ rubygems_version: 3.5.2
396
402
  signing_key:
397
403
  specification_version: 4
398
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