From 954445634cdd6138c589ce9f91a9398d93c8bba8 Mon Sep 17 00:00:00 2001 From: Andrew Janke Date: Fri, 27 May 2016 01:53:08 -0400 Subject: [PATCH] separate build and test logs --- Library/Homebrew/cmd/postinstall.rb | 2 +- Library/Homebrew/cmd/test.rb | 2 +- Library/Homebrew/formula.rb | 42 +++++++++++++++++++++++++-- Library/Homebrew/formula_installer.rb | 2 +- Library/Homebrew/postinstall.rb | 2 +- 5 files changed, 43 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/cmd/postinstall.rb b/Library/Homebrew/cmd/postinstall.rb index 798907339c..325916d864 100644 --- a/Library/Homebrew/cmd/postinstall.rb +++ b/Library/Homebrew/cmd/postinstall.rb @@ -27,7 +27,7 @@ module Homebrew if Sandbox.formula?(formula) sandbox = Sandbox.new formula.logs.mkpath - sandbox.record_log(formula.logs/"sandbox.postinstall.log") + sandbox.record_log(formula.logs/"postinstall.sandbox.log") sandbox.allow_write_temp_and_cache sandbox.allow_write_log(formula) sandbox.allow_write_cellar(formula) diff --git a/Library/Homebrew/cmd/test.rb b/Library/Homebrew/cmd/test.rb index 495ea8ec8a..a80fa5e4fe 100644 --- a/Library/Homebrew/cmd/test.rb +++ b/Library/Homebrew/cmd/test.rb @@ -63,7 +63,7 @@ module Homebrew if Sandbox.test? sandbox = Sandbox.new f.logs.mkpath - sandbox.record_log(f.logs/"sandbox.test.log") + sandbox.record_log(f.logs/"test.sandbox.log") sandbox.allow_write_temp_and_cache sandbox.allow_write_log(f) sandbox.allow_write_xcode diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 3730b135c8..42251e0854 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -127,6 +127,11 @@ class Formula # @private attr_accessor :local_bottle_path + # When performing a build, test, or other loggable action, indicates which + # log file location to use. + # @private + attr_reader :active_log_type + # The {BuildOptions} for this {Formula}. Lists the arguments passed and any # {#options} in the {Formula}. Note that these may differ at different times # during the installation of a {Formula}. This is annoying but the result of @@ -730,12 +735,30 @@ class Formula prefix+".bottle" end - # The directory where the formula's installation logs will be written. + # The directory where the formula's installation or test logs will be written. # @private def logs HOMEBREW_LOGS+name end + # The prefix, if any, to use in filenames for logging current activity + def active_log_prefix + if active_log_type + "#{active_log_type}." + else + "" + end + end + + # Runs a block with the given log type in effect for its duration + def with_logging(log_type) + old_log_type = @active_log_type + @active_log_type = log_type + yield + ensure + @active_log_type = old_log_type + end + # This method can be overridden to provide a plist. # For more examples read Apple's handy manpage: # https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man5/plist.5.html @@ -856,6 +879,17 @@ class Formula method(:post_install).owner == self.class end + # @private + def run_post_install + build = self.build + self.build = Tab.for_formula(self) + with_logging("post_install") do + post_install + end + ensure + self.build = build + end + # Tell the user about any caveats regarding this package. # @return [String] #
def caveats
@@ -1374,7 +1408,9 @@ class Formula
       ENV["HOME"] = @testpath
       setup_home @testpath
       begin
-        test
+        with_logging("test") do
+          test
+        end
       rescue Exception
         staging.retain! if ARGV.debug?
         raise
@@ -1466,7 +1502,7 @@ class Formula
 
     @exec_count ||= 0
     @exec_count += 1
-    logfn = "#{logs}/%02d.%s" % [@exec_count, File.basename(cmd).split(" ").first]
+    logfn = "#{logs}/#{active_log_prefix}%02d.%s" % [@exec_count, File.basename(cmd).split(" ").first]
     logs.mkpath
 
     File.open(logfn, "w") do |log|
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index 03c9f83145..a1fd5ba0e9 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -597,7 +597,7 @@ class FormulaInstaller
       if Sandbox.formula?(formula)
         sandbox = Sandbox.new
         formula.logs.mkpath
-        sandbox.record_log(formula.logs/"sandbox.build.log")
+        sandbox.record_log(formula.logs/"build.sandbox.log")
         sandbox.allow_write_temp_and_cache
         sandbox.allow_write_log(formula)
         sandbox.allow_write_xcode
diff --git a/Library/Homebrew/postinstall.rb b/Library/Homebrew/postinstall.rb
index c5c7ace319..0b6d8f6b01 100644
--- a/Library/Homebrew/postinstall.rb
+++ b/Library/Homebrew/postinstall.rb
@@ -13,7 +13,7 @@ begin
 
   formula = ARGV.resolved_formulae.first
   formula.extend(Debrew::Formula) if ARGV.debug?
-  formula.post_install
+  formula.run_post_install
 rescue Exception => e
   Marshal.dump(e, error_pipe)
   error_pipe.close