formula: refactor outdated handling, add to hash.
This commit is contained in:
parent
30d8084643
commit
6054666fa6
@ -13,41 +13,12 @@ module Homebrew
|
||||
Homebrew.failed = ARGV.resolved_formulae.any? && outdated.any?
|
||||
end
|
||||
|
||||
def outdated_brews(formulae)
|
||||
formulae.map do |f|
|
||||
all_versions = []
|
||||
older_or_same_tap_versions = []
|
||||
|
||||
if f.oldname && !f.rack.exist? && (dir = HOMEBREW_CELLAR/f.oldname).directory? &&
|
||||
!dir.subdirs.empty? && f.tap == Tab.for_keg(dir.subdirs.first).tap
|
||||
raise Migrator::MigrationNeededError.new(f)
|
||||
end
|
||||
|
||||
f.rack.subdirs.each do |keg_dir|
|
||||
keg = Keg.new keg_dir
|
||||
version = keg.version
|
||||
all_versions << version
|
||||
older_version = f.pkg_version <= version
|
||||
|
||||
tap = Tab.for_keg(keg).tap
|
||||
if tap.nil? || f.tap == tap || older_version
|
||||
older_or_same_tap_versions << version
|
||||
end
|
||||
end
|
||||
|
||||
if older_or_same_tap_versions.all? { |version| f.pkg_version > version }
|
||||
yield f, all_versions if block_given?
|
||||
f
|
||||
end
|
||||
end.compact
|
||||
end
|
||||
|
||||
def print_outdated(formulae)
|
||||
verbose = ($stdout.tty? || ARGV.verbose?) && !ARGV.flag?("--quiet")
|
||||
|
||||
outdated_brews(formulae) do |f, versions|
|
||||
formulae.select(&:outdated?).each do |f|
|
||||
if verbose
|
||||
puts "#{f.full_name} (#{versions*", "} < #{f.pkg_version})"
|
||||
puts "#{f.full_name} (#{f.outdated_versions*", "} < #{f.pkg_version})"
|
||||
else
|
||||
puts f.full_name
|
||||
end
|
||||
@ -56,9 +27,10 @@ module Homebrew
|
||||
|
||||
def print_outdated_json(formulae)
|
||||
json = []
|
||||
outdated = outdated_brews(formulae) do |f, versions|
|
||||
outdated = formulae.select(&:outdated?).each do |f|
|
||||
|
||||
json << { :name => f.full_name,
|
||||
:installed_versions => versions.collect(&:to_s),
|
||||
:installed_versions => f.outdated_versions.collect(&:to_s),
|
||||
:current_version => f.pkg_version.to_s }
|
||||
end
|
||||
puts Utils::JSON.dump(json)
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
require "cmd/install"
|
||||
require "cmd/outdated"
|
||||
require "cmd/cleanup"
|
||||
|
||||
module Homebrew
|
||||
@ -9,10 +8,10 @@ module Homebrew
|
||||
Homebrew.perform_preinstall_checks
|
||||
|
||||
if ARGV.named.empty?
|
||||
outdated = Homebrew.outdated_brews(Formula.installed)
|
||||
outdated = Formula.installed.select(&:outdated?)
|
||||
exit 0 if outdated.empty?
|
||||
elsif ARGV.named.any?
|
||||
outdated = Homebrew.outdated_brews(ARGV.resolved_formulae)
|
||||
outdated = ARGV.resolved_formulae.select(&:outdated?)
|
||||
|
||||
(ARGV.resolved_formulae - outdated).each do |f|
|
||||
if f.rack.directory?
|
||||
|
||||
@ -926,6 +926,44 @@ class Formula
|
||||
@oldname_lock.unlock unless @oldname_lock.nil?
|
||||
end
|
||||
|
||||
# @private
|
||||
def outdated_versions
|
||||
@outdated_versions ||= begin
|
||||
all_versions = []
|
||||
older_or_same_tap_versions = []
|
||||
|
||||
if oldname && !rack.exist? && (dir = HOMEBREW_CELLAR/oldname).directory? &&
|
||||
!dir.subdirs.empty? && tap == Tab.for_keg(dir.subdirs.first).tap
|
||||
raise Migrator::MigrationNeededError.new(f)
|
||||
end
|
||||
|
||||
rack.subdirs.each do |keg_dir|
|
||||
keg = Keg.new keg_dir
|
||||
version = keg.version
|
||||
all_versions << version
|
||||
older_version = pkg_version <= version
|
||||
|
||||
tab_tap = Tab.for_keg(keg).tap
|
||||
if tab_tap.nil? || tab_tap == tap || older_version
|
||||
older_or_same_tap_versions << version
|
||||
end
|
||||
end
|
||||
|
||||
if older_or_same_tap_versions.all? { |v| pkg_version > v }
|
||||
all_versions
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# @private
|
||||
def outdated?
|
||||
outdated_versions.any?
|
||||
rescue Migrator::MigrationNeededError
|
||||
true
|
||||
end
|
||||
|
||||
# @private
|
||||
def pinnable?
|
||||
@pin.pinnable?
|
||||
@ -1202,6 +1240,8 @@ class Formula
|
||||
"revision" => revision,
|
||||
"installed" => [],
|
||||
"linked_keg" => (linked_keg.resolved_path.basename.to_s if linked_keg.exist?),
|
||||
"pinned" => pinned?,
|
||||
"outdated" => outdated?,
|
||||
"keg_only" => keg_only?,
|
||||
"dependencies" => deps.map(&:name).uniq,
|
||||
"conflicts_with" => conflicts.map(&:name),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user