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