mercurial/httppeer.py
changeset 37547 835ccc2a5ef1
parent 37546 3a2367e6c6f2
child 37548 8e7a4435ab6d
--- a/mercurial/httppeer.py	Mon Apr 09 19:35:39 2018 -0700
+++ b/mercurial/httppeer.py	Tue Apr 10 10:22:26 2018 -0700
@@ -139,15 +139,13 @@
         self._index = 0
 
 class httppeer(wireproto.wirepeer):
-    def __init__(self, ui, path, url, opener):
+    def __init__(self, ui, path, url, opener, requestbuilder):
         self.ui = ui
         self._path = path
         self._url = url
         self._caps = None
         self._urlopener = opener
-        # This is an its own attribute to facilitate extensions overriding
-        # the default type.
-        self._requestbuilder = urlreq.request
+        self._requestbuilder = requestbuilder
 
     def __del__(self):
         for h in self._urlopener.handlers:
@@ -570,7 +568,12 @@
 
         return results
 
-def makepeer(ui, path):
+def makepeer(ui, path, requestbuilder=urlreq.request):
+    """Construct an appropriate HTTP peer instance.
+
+    ``requestbuilder`` is the type used for constructing HTTP requests.
+    It exists as an argument so extensions can override the default.
+    """
     u = util.url(path)
     if u.query or u.fragment:
         raise error.Abort(_('unsupported URL component: "%s"') %
@@ -582,7 +585,7 @@
 
     opener = urlmod.opener(ui, authinfo)
 
-    return httppeer(ui, path, url, opener)
+    return httppeer(ui, path, url, opener, requestbuilder)
 
 def instance(ui, path, create):
     if create: