Never exit directly from commands.dispatch(), but pass return code to caller.
Usually the caller is commands.run().
Some extensions still use sys.exit(), this is catched, too.
Fixed wrong return statement in commands.recover() yielding a zero exit code.
abort: repository a not found!
255
requesting all changes
abort: error: Connection refused
255
abort: repository a not found!
255
abort: destination '../a' already exists
255
abort: repository a not found!
255
abort: destination 'q' already exists