changeset 36460:efebfa9b4cab

httppeer: explicitly catch urlerr.httperror and re-raise On Python 3 it seems urllib.error.HTTPError doesn't set the .args field of the exception to have any contents, which then breaks our socket.error catch. This works around that issue. Differential Revision: https://phab.mercurial-scm.org/D2448
author Augie Fackler <augie@google.com>
date Mon, 26 Feb 2018 00:50:35 -0500
parents f8ea6988a5fb
children ec43960b03e8
files mercurial/httppeer.py
diffstat 1 files changed, 5 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/httppeer.py	Mon Feb 26 00:49:33 2018 -0500
+++ b/mercurial/httppeer.py	Mon Feb 26 00:50:35 2018 -0500
@@ -439,6 +439,11 @@
             if len(vals) < 2:
                 raise error.ResponseError(_("unexpected response:"), r)
             return vals
+        except urlerr.httperror:
+            # Catch and re-raise these so we don't try and treat them
+            # like generic socket errors. They lack any values in
+            # .args on Python 3 which breaks our socket.error block.
+            raise
         except socket.error as err:
             if err.args[0] in (errno.ECONNRESET, errno.EPIPE):
                 raise error.Abort(_('push failed: %s') % err.args[1])