From 88e79a9098a802209215b4826384dc85bade7f2c Mon Sep 17 00:00:00 2001 From: Max Howell Date: Fri, 10 Aug 2012 16:04:56 -0400 Subject: [PATCH] Uninstall keg if error during build & tab creation Previously if error occurred in code around the logic you'd get a keg that is installed without a tab, which breaks brew. --- Library/Homebrew/build.rb | 6 ------ Library/Homebrew/formula_installer.rb | 21 +++++++++++++++++---- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index 5a7fee4fa9..894c6b4e97 100755 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -111,10 +111,4 @@ def install f end end end -rescue Exception - if f.prefix.directory? - f.prefix.rmtree - f.rack.rmdir_if_possible - end - raise end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 949fbdcc49..97ab036f62 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -119,7 +119,7 @@ class FormulaInstaller clean end - raise "Nothing was installed to #{f.prefix}" unless f.installed? + opoo "Nothing was installed to #{f.prefix}" unless f.installed? end def install_dependency dep @@ -240,10 +240,23 @@ class FormulaInstaller data = read.read raise Marshal.load(data) unless data.nil? or data.empty? raise "Suspicious installation failure" unless $?.success? - - # Write an installation receipt (a Tab) to the prefix - Tab.for_install(f, args).write if f.installed? end + + # This is the installation receipt. The reason this comment is necessary + # is because some numpty decided to call the class Tab rather than + # the far more appropriate InstallationReceipt :P + Tab.for_install(f, args).write + + rescue Exception => e + ignore_interrupts do + # any exceptions must leave us with nothing installed + if f.prefix.directory? + puts "One sec, just cleaning up..." if e.kind_of? Interrupt + f.prefix.rmtree + end + f.rack.rmdir_if_possible + end + raise end def link