equal
deleted
inserted
replaced
618 finally: |
618 finally: |
619 resp.close() |
619 resp.close() |
620 |
620 |
621 return respurl, set(rawcaps.split()) |
621 return respurl, set(rawcaps.split()) |
622 |
622 |
623 def makepeer(ui, path, requestbuilder=urlreq.request): |
623 def makepeer(ui, path, opener=None, requestbuilder=urlreq.request): |
624 """Construct an appropriate HTTP peer instance. |
624 """Construct an appropriate HTTP peer instance. |
|
625 |
|
626 ``opener`` is an ``url.opener`` that should be used to establish |
|
627 connections, perform HTTP requests. |
625 |
628 |
626 ``requestbuilder`` is the type used for constructing HTTP requests. |
629 ``requestbuilder`` is the type used for constructing HTTP requests. |
627 It exists as an argument so extensions can override the default. |
630 It exists as an argument so extensions can override the default. |
628 """ |
631 """ |
629 u = util.url(path) |
632 u = util.url(path) |
633 |
636 |
634 # urllib cannot handle URLs with embedded user or passwd. |
637 # urllib cannot handle URLs with embedded user or passwd. |
635 url, authinfo = u.authinfo() |
638 url, authinfo = u.authinfo() |
636 ui.debug('using %s\n' % url) |
639 ui.debug('using %s\n' % url) |
637 |
640 |
638 opener = urlmod.opener(ui, authinfo) |
641 opener = opener or urlmod.opener(ui, authinfo) |
639 |
642 |
640 respurl, caps = performhandshake(ui, url, opener, requestbuilder) |
643 respurl, caps = performhandshake(ui, url, opener, requestbuilder) |
641 |
644 |
642 return httppeer(ui, path, respurl, opener, requestbuilder, caps) |
645 return httppeer(ui, path, respurl, opener, requestbuilder, caps) |
643 |
646 |