Overriding Task Commands

!Overriding Task Commands Warning: replacing methods can completely bork default recipes if you don't know what you're doing. You should at the very least read the actual code of the method you are replacing. That said here is how, in a module, you can override a task method.

 # begin snip capfile
 module MyModule
   def self.included(base)
     base.send(:alias_method, :run_without_error_handling, :run)
     base.send(:alias_method, :run, :run_with_error_handling)
   end
   def run_with_error_handling(...)
     ...
   end
 end
 Capistrano::Configuration.send(:include, MyModule) 
 # end snip capfile

A runnable toy example:

 # begin snip capfile
 module ExampleOverrideModule
   def self.included(base)
     base.send(:alias_method, :old_method_run, :run)
     base.send(:alias_method, :run, :new_method_run)
   end
   def new_method_run(str)
     puts str
   end
 end
 Capistrano::Configuration.send(:include, ExampleOverrideModule)
 task :test_run do
   run "hi"
 end
 # end snip capfile
 % cap test_run
   * executing `test_run'
 hi