tab: use cache to avoid rereading the same files.
Closes Homebrew/homebrew#46400. Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
		
							parent
							
								
									6054666fa6
								
							
						
					
					
						commit
						10c79620c1
					
				@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user