# HG changeset patch # User Yuya Nishihara # Date 2018-10-07 08:35:25 # Node ID d1338b4e39d0f916186c54231141d44545c5f8b0 # Parent 413b6b10fdd5273463015ee73496c5df6890b636 chgserver: catch Abort while parsing early args to shut down cleanly _loadnewui() calls dispatcher functions, which may raise Abort if unparsable arguments are passed in. The server should catch such errors and translate them to the "exit 255" instruction so the client can finish the IPC session cleanly. Spotted while porting the chg client to Rust. diff --git a/mercurial/chgserver.py b/mercurial/chgserver.py --- a/mercurial/chgserver.py +++ b/mercurial/chgserver.py @@ -425,6 +425,13 @@ class chgcmdserver(commandserver.server) self.ui.flush() self.cresult.write('exit 255') return + except error.Abort as inst: + self.ui.error(_("abort: %s\n") % inst) + if inst.hint: + self.ui.error(_("(%s)\n") % inst.hint) + self.ui.flush() + self.cresult.write('exit 255') + return newhash = hashstate.fromui(lui, self.hashstate.mtimepaths) insts = [] if newhash.mtimehash != self.hashstate.mtimehash: