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 3a50fcb0b9..ac60938800 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -130,6 +130,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 @@ -735,12 +740,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 @@ -861,6 +884,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
@@ -1384,7 +1418,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
@@ -1476,7 +1512,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