diff --git a/mercurial/hgweb/server.py b/mercurial/hgweb/server.py --- a/mercurial/hgweb/server.py +++ b/mercurial/hgweb/server.py @@ -100,16 +100,18 @@ def do_POST(self): try: self.do_write() - except Exception: + except Exception as e: # I/O below could raise another exception. So log the original # exception first to ensure it is recorded. - tb = r"".join(traceback.format_exception(*sys.exc_info())) - # We need a native-string newline to poke in the log - # message, because we won't get a newline when using an - # r-string. This is the easy way out. - newline = chr(10) - self.log_error(r"Exception happened during processing " - r"request '%s':%s%s", self.path, newline, tb) + if not (isinstance(e, (OSError, socket.error)) + and e.errno == errno.ECONNRESET): + tb = r"".join(traceback.format_exception(*sys.exc_info())) + # We need a native-string newline to poke in the log + # message, because we won't get a newline when using an + # r-string. This is the easy way out. + newline = chr(10) + self.log_error(r"Exception happened during processing " + r"request '%s':%s%s", self.path, newline, tb) self._start_response(r"500 Internal Server Error", []) self._write(b"Internal Server Error") diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t --- a/tests/test-hgweb.t +++ b/tests/test-hgweb.t @@ -911,18 +911,6 @@ errors $ cat errors.log | "$PYTHON" $TESTDIR/filtertraceback.py - $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=spam': (glob) - Traceback (most recent call last): - error: [Errno 104] $ECONNRESET$ - - $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/spam': (glob) - Traceback (most recent call last): - error: [Errno 104] $ECONNRESET$ - - $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/spam/tip/foo': (glob) - Traceback (most recent call last): - error: [Errno 104] $ECONNRESET$ - $ rm -f errors.log Uncaught exceptions result in a logged error and canned HTTP response