# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1607588516 -19800 # Node ID 49b6910217f907ef75069f70eb4c7c392418b11a # Parent a771ffc378a8c826b4c5ec410be92498471043b8 dispatch: move IOError handling and flushing of streams to `dispatch()` Instead of patching both dispatch code and commandserver code, we directly handle this in `dispatch.dispatch()`. Thanks to Yuya who recommended this. diff -r a771ffc378a8 -r 49b6910217f9 mercurial/commandserver.py --- a/mercurial/commandserver.py Wed Dec 09 00:00:19 2020 -0800 +++ b/mercurial/commandserver.py Thu Dec 10 13:51:56 2020 +0530 @@ -355,18 +355,7 @@ ) try: - err = None - try: - status = self._dispatchcommand(req) - except error.StdioError as e: - status = -1 - err = e - - retval = dispatch.closestdio(req.ui, err) - if retval: - status = retval - - ret = status & 255 + ret = self._dispatchcommand(req) & 255 # If shutdown-on-interrupt is off, it's important to write the # result code *after* SIGINT handler removed. If the result code # were lost, the client wouldn't be able to continue processing. diff -r a771ffc378a8 -r 49b6910217f9 mercurial/dispatch.py --- a/mercurial/dispatch.py Wed Dec 09 00:00:19 2020 -0800 +++ b/mercurial/dispatch.py Thu Dec 10 13:51:56 2020 +0530 @@ -104,7 +104,7 @@ raise exc -def closestdio(ui, err): +def _flushstdio(ui, err): status = None # In all cases we try to flush stdio streams. if util.safehasattr(ui, b'fout'): @@ -139,16 +139,8 @@ initstdio() with tracing.log('parse args into request'): req = request(pycompat.sysargv[1:]) - err = None - try: - status = dispatch(req) - except error.StdioError as e: - err = e - status = -1 - ret = closestdio(req.ui, err) - if ret: - status = ret + status = dispatch(req) _silencestdio() except KeyboardInterrupt: # Catch early/late KeyboardInterrupt as last ditch. Here nothing will @@ -240,7 +232,21 @@ def dispatch(req): """run the command specified in req.args; returns an integer status code""" - with tracing.log('dispatch.dispatch'): + err = None + try: + status = _rundispatch(req) + except error.StdioError as e: + err = e + status = -1 + + ret = _flushstdio(req.ui, err) + if ret: + status = ret + return status + + +def _rundispatch(req): + with tracing.log('dispatch._rundispatch'): if req.ferr: ferr = req.ferr elif req.ui: diff -r a771ffc378a8 -r 49b6910217f9 tests/test-devel-warnings.t --- a/tests/test-devel-warnings.t Wed Dec 09 00:00:19 2020 -0800 +++ b/tests/test-devel-warnings.t Thu Dec 10 13:51:56 2020 +0530 @@ -104,6 +104,7 @@ */hg:* in (glob) (?) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py* in callcatch (glob) @@ -120,6 +121,7 @@ */hg:* in (glob) (?) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob) @@ -142,6 +144,7 @@ */mercurial/commandserver.py:* in runcommand (glob) */mercurial/commandserver.py:* in _dispatchcommand (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob) @@ -184,6 +187,7 @@ */hg:* in (glob) (?) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py* in callcatch (glob) @@ -201,6 +205,7 @@ */hg:* in (glob) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob) @@ -223,6 +228,7 @@ */mercurial/commandserver.py:* in runcommand (glob) */mercurial/commandserver.py:* in _dispatchcommand (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob) @@ -247,6 +253,7 @@ */hg:* in (glob) (?) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py* in callcatch (glob) @@ -271,6 +278,7 @@ */hg:* in (glob) */mercurial/dispatch.py:* in run (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob) @@ -293,6 +301,7 @@ */mercurial/commandserver.py:* in runcommand (glob) */mercurial/commandserver.py:* in _dispatchcommand (glob) */mercurial/dispatch.py:* in dispatch (glob) + */mercurial/dispatch.py:* in _rundispatch (glob) */mercurial/dispatch.py:* in _runcatch (glob) */mercurial/dispatch.py:* in _callcatch (glob) */mercurial/scmutil.py:* in callcatch (glob)