The way Rake rescues exceptions running a task, I think, rescues too much. The problem I encounter is when I am using debug in a test task that runs in a subprocess (via Kernal#system) - raising an Interrupt with ctrl+c leaves the terminal in a state where it no longer echoes input.
To reproduce, with the debug gem installed and this Rakefile:
Run rake; at the debug prompt hit ctrl+c. Your terminal no longer echoes your input; the tty is left in raw mode (I eventually found you can fix this by running stty -raw)
I've copied that in this PR and replaced every rescue Exception in lib/, though only lib/rake/application.rb affects my usage, I think it should be correct in the others as well.
The way Rake rescues exceptions running a task, I think, rescues too much. The problem I encounter is when I am using debug in a test task that runs in a subprocess (via
Kernal#system
) - raising an Interrupt with ctrl+c leaves the terminal in a state where it no longer echoes input.To reproduce, with the
debug
gem installed and this Rakefile:Run
rake
; at the debug prompt hit ctrl+c. Your terminal no longer echoes your input; the tty is left in raw mode (I eventually found you can fix this by runningstty -raw
)I think the solution to this is what RSpec does, rescuing broadly but with some exceptions to the Exceptions - see https://github.com/rspec/rspec-support/blob/v3.13.0/lib/rspec/support.rb#L145-L153
I've copied that in this PR and replaced every
rescue Exception
inlib/
, though only lib/rake/application.rb affects my usage, I think it should be correct in the others as well.