diff options
| -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  | 
