diff -r ade330deb39a -r ff5f923fca3c mercurial/commandserver.py --- a/mercurial/commandserver.py Sun Mar 13 01:32:42 2016 +0530 +++ b/mercurial/commandserver.py Sat Mar 12 22:03:30 2016 +0900 @@ -338,8 +338,9 @@ def handle(self): ui = self.server.ui repo = self.server.repo - sv = server(ui, repo, self.rfile, self.wfile) + sv = None try: + sv = server(ui, repo, self.rfile, self.wfile) try: sv.serve() # handle exceptions that may be raised by command server. most of @@ -354,7 +355,11 @@ except: # re-raises # also write traceback to error channel. otherwise client cannot # see it because it is written to server's stderr by default. - traceback.print_exc(file=sv.cerr) + if sv: + cerr = sv.cerr + else: + cerr = channeledoutput(self.wfile, 'e') + traceback.print_exc(file=cerr) raise class unixservice(object):