diff options
| author | Mike McQuaid | 2015-11-27 16:40:16 +0000 |
|---|---|---|
| committer | Mike McQuaid | 2015-11-27 16:52:54 +0000 |
| commit | 10c79620c15dd2dc0b02b1376f6a79515f9d01af (patch) | |
| tree | fbc29f0be8c8d2975ce1c12ea6a94a8e198833b1 /Library | |
| parent | 6054666fa6cbff2c8d535c32de128c6e0bb3f8e1 (diff) | |
| download | brew-10c79620c15dd2dc0b02b1376f6a79515f9d01af.tar.bz2 | |
tab: use cache to avoid rereading the same files.
Closes Homebrew/homebrew#46400.
Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/tab.rb | 8 | ||||
| -rw-r--r-- | Library/Homebrew/test/test_formula_installer.rb | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/Library/Homebrew/tab.rb b/Library/Homebrew/tab.rb index f2dceb7fa..acfc04ada 100644 --- a/Library/Homebrew/tab.rb +++ b/Library/Homebrew/tab.rb @@ -9,6 +9,11 @@ require "utils/json" # `Tab.create`. class Tab < OpenStruct FILENAME = "INSTALL_RECEIPT.json" + CACHE = {} + + def self.clear_cache + CACHE.clear + end def self.create(formula, compiler, stdlib, build) attributes = { @@ -32,7 +37,7 @@ class Tab < OpenStruct end def self.from_file(path) - from_file_content(File.read(path), path) + CACHE.fetch(path) { |p| CACHE[p] = from_file_content(File.read(p), p) } end def self.from_file_content(content, path) @@ -217,6 +222,7 @@ class Tab < OpenStruct end def write + CACHE[tabfile] = self tabfile.atomic_write(to_json) end diff --git a/Library/Homebrew/test/test_formula_installer.rb b/Library/Homebrew/test/test_formula_installer.rb index 63bba3f87..643712d0c 100644 --- a/Library/Homebrew/test/test_formula_installer.rb +++ b/Library/Homebrew/test/test_formula_installer.rb @@ -20,10 +20,12 @@ class InstallTests < Homebrew::TestCase assert_predicate formula, :installed? begin + Tab.clear_cache refute_predicate Tab.for_keg(keg), :poured_from_bottle yield formula ensure + Tab.clear_cache keg.unlink keg.uninstall formula.clear_cache |
