Merge pull request #16973 from Homebrew/keg-sort
Sort kegs based on version scheme
This commit is contained in:
commit
02a0ea8449
@ -381,7 +381,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
stable_kegs.max_by(&:version)
|
Keg.sort(stable_kegs).first
|
||||||
end
|
end
|
||||||
|
|
||||||
def resolve_default_keg(name)
|
def resolve_default_keg(name)
|
||||||
|
|||||||
@ -299,7 +299,7 @@ module Homebrew
|
|||||||
heads, versioned = kegs.partition { |k| k.version.head? }
|
heads, versioned = kegs.partition { |k| k.version.head? }
|
||||||
kegs = [
|
kegs = [
|
||||||
*heads.sort_by { |k| -Tab.for_keg(k).time.to_i },
|
*heads.sort_by { |k| -Tab.for_keg(k).time.to_i },
|
||||||
*versioned.sort_by(&:version),
|
*Keg.sort(versioned),
|
||||||
]
|
]
|
||||||
if kegs.empty?
|
if kegs.empty?
|
||||||
puts "Not installed"
|
puts "Not installed"
|
||||||
|
|||||||
@ -175,12 +175,11 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
not_outdated.each do |f|
|
not_outdated.each do |f|
|
||||||
versions = f.installed_kegs.map(&:version)
|
latest_keg = Keg.sort(f.installed_kegs).first
|
||||||
if versions.empty?
|
if latest_keg.nil?
|
||||||
ofail "#{f.full_specified_name} not installed"
|
ofail "#{f.full_specified_name} not installed"
|
||||||
else
|
else
|
||||||
version = versions.max
|
opoo "#{f.full_specified_name} #{latest_keg.version} already installed"
|
||||||
opoo "#{f.full_specified_name} #{version} already installed"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1492,9 +1492,8 @@ class Formula
|
|||||||
version = keg.version
|
version = keg.version
|
||||||
next if version.head?
|
next if version.head?
|
||||||
|
|
||||||
tab = Tab.for_keg(keg)
|
next if version_scheme > keg.version_scheme && pkg_version != version
|
||||||
next if version_scheme > tab.version_scheme && pkg_version != version
|
next if version_scheme == keg.version_scheme && pkg_version > version
|
||||||
next if version_scheme == tab.version_scheme && pkg_version > version
|
|
||||||
|
|
||||||
# don't consider this keg current if there's a newer formula available
|
# don't consider this keg current if there's a newer formula available
|
||||||
next if follow_installed_alias? && new_formula_available?
|
next if follow_installed_alias? && new_formula_available?
|
||||||
@ -1509,7 +1508,7 @@ class Formula
|
|||||||
[]
|
[]
|
||||||
else
|
else
|
||||||
all_kegs += old_installed_formulae.flat_map(&:installed_kegs)
|
all_kegs += old_installed_formulae.flat_map(&:installed_kegs)
|
||||||
all_kegs.sort_by(&:version)
|
Keg.sort(all_kegs)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -2244,7 +2243,7 @@ class Formula
|
|||||||
"conflicts_with_reasons" => conflicts.map(&:reason),
|
"conflicts_with_reasons" => conflicts.map(&:reason),
|
||||||
"link_overwrite" => self.class.link_overwrite_paths.to_a,
|
"link_overwrite" => self.class.link_overwrite_paths.to_a,
|
||||||
"caveats" => caveats_with_placeholders,
|
"caveats" => caveats_with_placeholders,
|
||||||
"installed" => [],
|
"installed" => T.let([], T::Array[T::Hash[String, T.untyped]]),
|
||||||
"linked_keg" => linked_version&.to_s,
|
"linked_keg" => linked_version&.to_s,
|
||||||
"pinned" => pinned?,
|
"pinned" => pinned?,
|
||||||
"outdated" => outdated?,
|
"outdated" => outdated?,
|
||||||
@ -2269,7 +2268,7 @@ class Formula
|
|||||||
|
|
||||||
hsh.merge!(dependencies_hash)
|
hsh.merge!(dependencies_hash)
|
||||||
|
|
||||||
hsh["installed"] = installed_kegs.sort_by(&:version).map do |keg|
|
hsh["installed"] = Keg.sort(installed_kegs).map do |keg|
|
||||||
tab = Tab.for_keg keg
|
tab = Tab.for_keg keg
|
||||||
{
|
{
|
||||||
"version" => keg.version.to_s,
|
"version" => keg.version.to_s,
|
||||||
@ -2842,7 +2841,7 @@ class Formula
|
|||||||
eligible_kegs = if head? && (head_prefix = latest_head_prefix)
|
eligible_kegs = if head? && (head_prefix = latest_head_prefix)
|
||||||
head, stable = installed_kegs.partition { |k| k.version.head? }
|
head, stable = installed_kegs.partition { |k| k.version.head? }
|
||||||
# Remove newest head and stable kegs
|
# Remove newest head and stable kegs
|
||||||
head - [Keg.new(head_prefix)] + stable.sort_by(&:version).slice(0...-1)
|
head - [Keg.new(head_prefix)] + Keg.sort(stable).drop(1)
|
||||||
else
|
else
|
||||||
installed_kegs.select do |keg|
|
installed_kegs.select do |keg|
|
||||||
tab = Tab.for_keg(keg)
|
tab = Tab.for_keg(keg)
|
||||||
|
|||||||
@ -22,7 +22,10 @@ class FormulaPin
|
|||||||
end
|
end
|
||||||
|
|
||||||
def pin
|
def pin
|
||||||
pin_at(@formula.installed_kegs.map(&:version).max)
|
latest_keg = Keg.sort(@formula.installed_kegs).first
|
||||||
|
return if latest_keg.nil?
|
||||||
|
|
||||||
|
pin_at(latest_keg.version)
|
||||||
end
|
end
|
||||||
|
|
||||||
def unpin
|
def unpin
|
||||||
|
|||||||
@ -994,7 +994,7 @@ module Formulary
|
|||||||
flags: T.unsafe(nil)
|
flags: T.unsafe(nil)
|
||||||
)
|
)
|
||||||
kegs = rack.directory? ? rack.subdirs.map { |d| Keg.new(d) } : []
|
kegs = rack.directory? ? rack.subdirs.map { |d| Keg.new(d) } : []
|
||||||
keg = kegs.find(&:linked?) || kegs.find(&:optlinked?) || kegs.max_by(&:version)
|
keg = kegs.find(&:linked?) || kegs.find(&:optlinked?) || Keg.sort(kegs).first
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
alias_path:,
|
alias_path:,
|
||||||
|
|||||||
@ -56,7 +56,7 @@ module InstalledDependents
|
|||||||
f_kegs = kegs_by_source[[f.name, f.tap]]
|
f_kegs = kegs_by_source[[f.name, f.tap]]
|
||||||
next unless f_kegs
|
next unless f_kegs
|
||||||
|
|
||||||
f_kegs.max_by(&:version)
|
Keg.sort(f_kegs).first
|
||||||
end
|
end
|
||||||
|
|
||||||
next if required_kegs.empty?
|
next if required_kegs.empty?
|
||||||
|
|||||||
@ -148,6 +148,11 @@ class Keg
|
|||||||
Formula.racks.flat_map(&:subdirs).map { |d| new(d) }
|
Formula.racks.flat_map(&:subdirs).map { |d| new(d) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
sig { params(kegs: T::Array[Keg]).returns(T::Array[Keg]) }
|
||||||
|
def self.sort(kegs)
|
||||||
|
kegs.sort_by { |keg| [keg.version_scheme, keg.version] }.reverse!
|
||||||
|
end
|
||||||
|
|
||||||
attr_reader :path, :name, :linked_keg_record, :opt_record
|
attr_reader :path, :name, :linked_keg_record, :opt_record
|
||||||
|
|
||||||
protected :path
|
protected :path
|
||||||
@ -387,6 +392,10 @@ class Keg
|
|||||||
PkgVersion.parse(path.basename.to_s)
|
PkgVersion.parse(path.basename.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def version_scheme
|
||||||
|
@version_scheme ||= tab.version_scheme
|
||||||
|
end
|
||||||
|
|
||||||
def to_formula
|
def to_formula
|
||||||
Formulary.from_keg(self)
|
Formulary.from_keg(self)
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user