formula: refactor outdated handling, add to hash.

This commit is contained in:
Mike McQuaid 2015-11-27 15:11:00 +00:00
parent 30d8084643
commit 6054666fa6
3 changed files with 47 additions and 36 deletions

View File

@ -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)

View File

@ -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?

View File

@ -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),