aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2015-11-27 15:11:00 +0000
committerMike McQuaid2015-11-27 16:52:54 +0000
commit6054666fa6cbff2c8d535c32de128c6e0bb3f8e1 (patch)
tree84b3fcbb5c31ad43a7823f5a0b0b3a4239fdff17 /Library
parent30d8084643c3524f2c3c4de884c3c5c0c81b95f7 (diff)
downloadbrew-6054666fa6cbff2c8d535c32de128c6e0bb3f8e1.tar.bz2
formula: refactor outdated handling, add to hash.
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/cmd/outdated.rb38
-rw-r--r--Library/Homebrew/cmd/upgrade.rb5
-rw-r--r--Library/Homebrew/formula.rb40
3 files changed, 47 insertions, 36 deletions
diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb
index 7a199fcae..2c3316f85 100644
--- a/Library/Homebrew/cmd/outdated.rb
+++ b/Library/Homebrew/cmd/outdated.rb
@@ -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)
diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb
index e9d46fa92..83c34340f 100644
--- a/Library/Homebrew/cmd/upgrade.rb
+++ b/Library/Homebrew/cmd/upgrade.rb
@@ -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?
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index fccdf8568..29693eee9 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -927,6 +927,44 @@ class Formula
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?
end
@@ -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),