aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorMike McQuaid2015-11-27 16:40:16 +0000
committerMike McQuaid2015-11-27 16:52:54 +0000
commit10c79620c15dd2dc0b02b1376f6a79515f9d01af (patch)
treefbc29f0be8c8d2975ce1c12ea6a94a8e198833b1 /Library
parent6054666fa6cbff2c8d535c32de128c6e0bb3f8e1 (diff)
downloadbrew-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.rb8
-rw-r--r--Library/Homebrew/test/test_formula_installer.rb2
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