mirror of
https://github.com/github/rails.git
synced 2026-01-10 23:27:56 -05:00
Added breakpoint retries on rescue screens
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@103 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -74,6 +74,30 @@ module ActionController #:nodoc:
|
||||
begin
|
||||
perform_action_without_rescue
|
||||
rescue => exception
|
||||
if defined?(Breakpoint) and @params["BP-RETRY"] then
|
||||
msg = exception.backtrace.first
|
||||
if md = /^(.+?):(\d+)(?::in `(.+)')?$/.match(msg) then
|
||||
origin_file, origin_line = md[1], md[2].to_i
|
||||
|
||||
set_trace_func(lambda do |type, file, line, method, context, klass|
|
||||
if file == origin_file and line == origin_line then
|
||||
set_trace_func(nil)
|
||||
@params["BP-RETRY"] = false
|
||||
|
||||
callstack = caller
|
||||
callstack.slice!(0) if callstack.first["rescue.rb"]
|
||||
file, line, method = *callstack.first.match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
|
||||
|
||||
message = "Exception at #{file}:#{line}#{" in `#{method}'" if method}."
|
||||
|
||||
Breakpoint.handle_breakpoint(context, message, file, line)
|
||||
end
|
||||
end)
|
||||
|
||||
retry
|
||||
end
|
||||
end
|
||||
|
||||
rescue_action(exception)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<% if defined?(Breakpoint) then %><a href="?BP-RETRY=1">Retry with Breakpoint</a><% end %>
|
||||
|
||||
<%
|
||||
request_parameters_without_action = @request.parameters.clone
|
||||
request_parameters_without_action.delete("action")
|
||||
|
||||
Reference in New Issue
Block a user