equal
deleted
inserted
replaced
137 for f in self._fileobjs: |
137 for f in self._fileobjs: |
138 f.seek(0) |
138 f.seek(0) |
139 self._index = 0 |
139 self._index = 0 |
140 |
140 |
141 class httppeer(wireproto.wirepeer): |
141 class httppeer(wireproto.wirepeer): |
142 def __init__(self, ui, path, url, opener): |
142 def __init__(self, ui, path, url, opener, requestbuilder): |
143 self.ui = ui |
143 self.ui = ui |
144 self._path = path |
144 self._path = path |
145 self._url = url |
145 self._url = url |
146 self._caps = None |
146 self._caps = None |
147 self._urlopener = opener |
147 self._urlopener = opener |
148 # This is an its own attribute to facilitate extensions overriding |
148 self._requestbuilder = requestbuilder |
149 # the default type. |
|
150 self._requestbuilder = urlreq.request |
|
151 |
149 |
152 def __del__(self): |
150 def __del__(self): |
153 for h in self._urlopener.handlers: |
151 for h in self._urlopener.handlers: |
154 h.close() |
152 h.close() |
155 getattr(h, "close_all", lambda: None)() |
153 getattr(h, "close_all", lambda: None)() |
568 else: |
566 else: |
569 error.ProgrammingError('unhandled action: %s' % action) |
567 error.ProgrammingError('unhandled action: %s' % action) |
570 |
568 |
571 return results |
569 return results |
572 |
570 |
573 def makepeer(ui, path): |
571 def makepeer(ui, path, requestbuilder=urlreq.request): |
|
572 """Construct an appropriate HTTP peer instance. |
|
573 |
|
574 ``requestbuilder`` is the type used for constructing HTTP requests. |
|
575 It exists as an argument so extensions can override the default. |
|
576 """ |
574 u = util.url(path) |
577 u = util.url(path) |
575 if u.query or u.fragment: |
578 if u.query or u.fragment: |
576 raise error.Abort(_('unsupported URL component: "%s"') % |
579 raise error.Abort(_('unsupported URL component: "%s"') % |
577 (u.query or u.fragment)) |
580 (u.query or u.fragment)) |
578 |
581 |
580 url, authinfo = u.authinfo() |
583 url, authinfo = u.authinfo() |
581 ui.debug('using %s\n' % url) |
584 ui.debug('using %s\n' % url) |
582 |
585 |
583 opener = urlmod.opener(ui, authinfo) |
586 opener = urlmod.opener(ui, authinfo) |
584 |
587 |
585 return httppeer(ui, path, url, opener) |
588 return httppeer(ui, path, url, opener, requestbuilder) |
586 |
589 |
587 def instance(ui, path, create): |
590 def instance(ui, path, create): |
588 if create: |
591 if create: |
589 raise error.Abort(_('cannot create new http repository')) |
592 raise error.Abort(_('cannot create new http repository')) |
590 try: |
593 try: |