ruby / rake

A make-like build utility for Ruby.
https://ruby.github.io/rake
MIT License
2.32k stars 614 forks source link

Interrupt rescuing causes issues with debugger #581

Open notEthan opened 1 week ago

notEthan commented 1 week ago

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:

task(:default) { system("ruby -r debug -e debugger") }

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 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 in lib/, though only lib/rake/application.rb affects my usage, I think it should be correct in the others as well.