Allow the debugger to work from inside staged resources
References Homebrew/homebrew#23263. Closes Homebrew/homebrew#27445.
This commit is contained in:
parent
7dcb54a963
commit
d965bbba47
@ -167,6 +167,8 @@ class Build
|
|||||||
else
|
else
|
||||||
f.prefix.mkpath
|
f.prefix.mkpath
|
||||||
|
|
||||||
|
f.resources.each { |r| r.extend(ResourceDebugger) } if ARGV.debug?
|
||||||
|
|
||||||
begin
|
begin
|
||||||
f.install
|
f.install
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
require 'debrew/menu'
|
require 'debrew/menu'
|
||||||
require 'debrew/raise_plus'
|
require 'debrew/raise_plus'
|
||||||
|
require 'set'
|
||||||
|
|
||||||
unless ENV['HOMEBREW_NO_READLINE']
|
unless ENV['HOMEBREW_NO_READLINE']
|
||||||
begin
|
begin
|
||||||
@ -15,7 +16,27 @@ class Object
|
|||||||
include RaisePlus
|
include RaisePlus
|
||||||
end
|
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)
|
def debrew(exception, formula=nil)
|
||||||
|
raise exception unless $debugged_exceptions.add?(exception)
|
||||||
|
|
||||||
puts "#{exception.backtrace.first}"
|
puts "#{exception.backtrace.first}"
|
||||||
puts "#{Tty.red}#{exception.class.to_s}#{Tty.reset}: #{exception.to_s}"
|
puts "#{Tty.red}#{exception.class.to_s}#{Tty.reset}: #{exception.to_s}"
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user