diff options
| author | Vlad Shablinsky | 2016-08-01 16:31:36 +0300 |
|---|---|---|
| committer | Xu Cheng | 2016-08-06 21:25:57 +0800 |
| commit | 072e5df4ed3afb0ca6a7bbd8e869d9ff8e5f8d73 (patch) | |
| tree | f009d1f5ed124081f83f565d4701b9a00f9f6e78 /Library | |
| parent | 9754dbada809260ccb8e61fedfdc8e20c9c93317 (diff) | |
| download | brew-072e5df4ed3afb0ca6a7bbd8e869d9ff8e5f8d73.tar.bz2 | |
Cache outdated_versions for Formula
Closes #584.
Signed-off-by: Xu Cheng <xucheng@me.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/formula.rb | 32 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula.rb | 1 |
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 |
