Allow the debugger to work from inside staged resources

References Homebrew/homebrew#23263.
Closes Homebrew/homebrew#27445.
This commit is contained in:
Jack Nagel 2014-03-13 10:05:55 -05:00
parent 7dcb54a963
commit d965bbba47
2 changed files with 23 additions and 0 deletions

View File

@ -167,6 +167,8 @@ class Build
else
f.prefix.mkpath
f.resources.each { |r| r.extend(ResourceDebugger) } if ARGV.debug?
begin
f.install

View File

@ -1,5 +1,6 @@
require 'debrew/menu'
require 'debrew/raise_plus'
require 'set'
unless ENV['HOMEBREW_NO_READLINE']
begin
@ -15,7 +16,27 @@ class Object
include RaisePlus
end
module ResourceDebugger
def stage(&block)
super do
begin
block.call(self)
rescue Exception => e
if ARGV.debug?
debrew e
else
raise
end
end
end
end
end
$debugged_exceptions = Set.new
def debrew(exception, formula=nil)
raise exception unless $debugged_exceptions.add?(exception)
puts "#{exception.backtrace.first}"
puts "#{Tty.red}#{exception.class.to_s}#{Tty.reset}: #{exception.to_s}"