aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVlad Shablinsky2016-08-01 16:31:36 +0300
committerXu Cheng2016-08-06 21:25:57 +0800
commit072e5df4ed3afb0ca6a7bbd8e869d9ff8e5f8d73 (patch)
treef009d1f5ed124081f83f565d4701b9a00f9f6e78
parent9754dbada809260ccb8e61fedfdc8e20c9c93317 (diff)
downloadbrew-072e5df4ed3afb0ca6a7bbd8e869d9ff8e5f8d73.tar.bz2
Cache outdated_versions for Formula
Closes #584. Signed-off-by: Xu Cheng <xucheng@me.com>
-rw-r--r--Library/Homebrew/formula.rb32
-rw-r--r--Library/Homebrew/test/test_formula.rb1
2 files changed, 19 insertions, 14 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index d7d2f16fc..3730b135c 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -1001,24 +1001,28 @@ class Formula
# @private
def outdated_versions(options = {})
- @outdated_versions ||= begin
- all_versions = []
-
+ @outdated_versions ||= Hash.new do |cache, key|
raise Migrator::MigrationNeededError.new(self) if migration_needed?
+ cache[key] = _outdated_versions(key)
+ end
+ @outdated_versions[options]
+ end
- installed_kegs.each do |keg|
- version = keg.version
- all_versions << version
+ def _outdated_versions(options = {})
+ all_versions = []
- return [] if pkg_version <= version && !version.head?
- end
+ installed_kegs.each do |keg|
+ version = keg.version
+ all_versions << version
- head_version = latest_head_version
- if head_version
- head_version_outdated?(head_version, options) ? all_versions.sort! : []
- else
- all_versions.sort!
- end
+ return [] if pkg_version <= version && !version.head?
+ end
+
+ head_version = latest_head_version
+ if head_version && !head_version_outdated?(head_version, options)
+ []
+ else
+ all_versions.sort
end
end
diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb
index 3f3938414..af98c358f 100644
--- a/Library/Homebrew/test/test_formula.rb
+++ b/Library/Homebrew/test/test_formula.rb
@@ -583,6 +583,7 @@ class OutdatedVersionsTests < Homebrew::TestCase
def reset_outdated_versions
f.instance_variable_set(:@outdated_versions, nil)
+ f.instance_variable_set(:@outdated_versions_head_fetched, nil)
end
def test_greater_different_tap_installed