changeset 37550:b5862ee01abe

httppeer: move error handling and response wrapping into sendrequest This is common for all HTTP requests. It should be part of sendrequest(). Differential Revision: https://phab.mercurial-scm.org/D3235
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 10 Apr 2018 12:12:07 -0700
parents 66d1001e1500
children 946eb204ba67
files mercurial/httppeer.py
diffstat 1 files changed, 19 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/httppeer.py	Tue Apr 10 10:51:12 2018 -0700
+++ b/mercurial/httppeer.py	Tue Apr 10 12:12:07 2018 -0700
@@ -284,10 +284,24 @@
 
         start = util.timer()
 
-    res = opener.open(req)
-    if ui.configbool('devel', 'debug.peer-request'):
-        dbg(line % '  finished in %.4f seconds (%s)'
-            % (util.timer() - start, res.code))
+    try:
+        res = opener.open(req)
+    except urlerr.httperror as inst:
+        if inst.code == 401:
+            raise error.Abort(_('authorization failed'))
+        raise
+    except httplib.HTTPException as inst:
+        ui.debug('http error requesting %s\n' %
+                 util.hidepassword(req.get_full_url()))
+        ui.traceback()
+        raise IOError(None, inst)
+    finally:
+        if ui.configbool('devel', 'debug.peer-request'):
+            dbg(line % '  finished in %.4f seconds (%s)'
+                % (util.timer() - start, res.code))
+
+    # Insert error handlers for common I/O failures.
+    _wraphttpresponse(res)
 
     return res
 
@@ -346,19 +360,7 @@
                                            self._caps, self.capable,
                                            self._url, cmd, args)
 
-        try:
-            resp = sendrequest(self.ui, self._urlopener, req)
-        except urlerr.httperror as inst:
-            if inst.code == 401:
-                raise error.Abort(_('authorization failed'))
-            raise
-        except httplib.HTTPException as inst:
-            self.ui.debug('http error while sending %s command\n' % cmd)
-            self.ui.traceback()
-            raise IOError(None, inst)
-
-        # Insert error handlers for common I/O failures.
-        _wraphttpresponse(resp)
+        resp = sendrequest(self.ui, self._urlopener, req)
 
         # record the url we got redirected to
         resp_url = pycompat.bytesurl(resp.geturl())