D2448: httppeer: explicitly catch urlerr.httperror and re-raise

durin42 (Augie Fackler) phabricator at mercurial-scm.org
Mon Feb 26 06:02:16 UTC 2018


durin42 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2448

AFFECTED FILES
  mercurial/httppeer.py

CHANGE DETAILS

diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
--- a/mercurial/httppeer.py
+++ b/mercurial/httppeer.py
@@ -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])



To: durin42, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list