# HG changeset patch # User Kyle Lippincott # Date 2015-06-08 23:55:21 # Node ID 00ecc894138df7260db22f40a46b3816735a2d0c # Parent 0fa964d6fd48ccf41b375da879de8dc61d408856 httppeer: allow extensions to replace urllib2.Request The authentication library my extension wants to use requires using a different opener and a different request builder. This change pulls the call to urllib2.Request out so that my extension can replace it just like it can replace urlopener. diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py --- a/mercurial/httppeer.py +++ b/mercurial/httppeer.py @@ -30,6 +30,7 @@ class httppeer(wireproto.wirepeer): self.caps = None self.handler = None self.urlopener = None + self.requestbuilder = None u = util.url(path) if u.query or u.fragment: raise util.Abort(_('unsupported URL component: "%s"') % @@ -42,6 +43,7 @@ class httppeer(wireproto.wirepeer): self.ui.debug('using %s\n' % self._url) self.urlopener = url.opener(ui, authinfo) + self.requestbuilder = urllib2.Request def __del__(self): if self.urlopener: @@ -111,7 +113,7 @@ class httppeer(wireproto.wirepeer): q += sorted(args.items()) qs = '?%s' % urllib.urlencode(q) cu = "%s%s" % (self._url, qs) - req = urllib2.Request(cu, data, headers) + req = self.requestbuilder(cu, data, headers) if data is not None: self.ui.debug("sending %s bytes\n" % size) req.add_unredirected_header('Content-Length', '%d' % size)