mercurial/httppeer.py
changeset 50437 3a2df812e1c7
parent 50421 ed052780ad5e
child 50441 315f537627c1
equal deleted inserted replaced
50436:4077d6222cf1 50437:3a2df812e1c7
   379 
   379 
   380     return respurl, proto, resp
   380     return respurl, proto, resp
   381 
   381 
   382 
   382 
   383 class httppeer(wireprotov1peer.wirepeer):
   383 class httppeer(wireprotov1peer.wirepeer):
   384     def __init__(self, ui, path, url, opener, requestbuilder, caps):
   384     def __init__(
   385         super().__init__(ui, path=path)
   385         self, ui, path, url, opener, requestbuilder, caps, remotehidden=False
       
   386     ):
       
   387         super().__init__(ui, path=path, remotehidden=remotehidden)
       
   388         if remotehidden:
       
   389             msg = _(
       
   390                 b"ignoring `--remote-hidden` request\n"
       
   391                 b"(access to hidden changeset for http peers not "
       
   392                 b"supported yet)\n"
       
   393             )
       
   394             ui.warn(msg)
   386         self._url = url
   395         self._url = url
   387         self._caps = caps
   396         self._caps = caps
   388         self.limitedarguments = caps is not None and b'httppostargs' not in caps
   397         self.limitedarguments = caps is not None and b'httppostargs' not in caps
   389         self._urlopener = opener
   398         self._urlopener = opener
   390         self._requestbuilder = requestbuilder
   399         self._requestbuilder = requestbuilder
   590     info = {b'v1capabilities': set(rawdata.split())}
   599     info = {b'v1capabilities': set(rawdata.split())}
   591 
   600 
   592     return respurl, info
   601     return respurl, info
   593 
   602 
   594 
   603 
   595 def _make_peer(ui, path, opener=None, requestbuilder=urlreq.request):
   604 def _make_peer(
       
   605     ui, path, opener=None, requestbuilder=urlreq.request, remotehidden=False
       
   606 ):
   596     """Construct an appropriate HTTP peer instance.
   607     """Construct an appropriate HTTP peer instance.
   597 
   608 
   598     ``opener`` is an ``url.opener`` that should be used to establish
   609     ``opener`` is an ``url.opener`` that should be used to establish
   599     connections, perform HTTP requests.
   610     connections, perform HTTP requests.
   600 
   611 
   613     opener = opener or urlmod.opener(ui, authinfo)
   624     opener = opener or urlmod.opener(ui, authinfo)
   614 
   625 
   615     respurl, info = performhandshake(ui, url, opener, requestbuilder)
   626     respurl, info = performhandshake(ui, url, opener, requestbuilder)
   616 
   627 
   617     return httppeer(
   628     return httppeer(
   618         ui, path, respurl, opener, requestbuilder, info[b'v1capabilities']
   629         ui,
       
   630         path,
       
   631         respurl,
       
   632         opener,
       
   633         requestbuilder,
       
   634         info[b'v1capabilities'],
       
   635         remotehidden=remotehidden,
   619     )
   636     )
   620 
   637 
   621 
   638 
   622 def make_peer(ui, path, create, intents=None, createopts=None):
   639 def make_peer(
       
   640     ui, path, create, intents=None, createopts=None, remotehidden=False
       
   641 ):
   623     if create:
   642     if create:
   624         raise error.Abort(_(b'cannot create new http repository'))
   643         raise error.Abort(_(b'cannot create new http repository'))
   625     try:
   644     try:
   626         if path.url.scheme == b'https' and not urlmod.has_https:
   645         if path.url.scheme == b'https' and not urlmod.has_https:
   627             raise error.Abort(
   646             raise error.Abort(
   628                 _(b'Python support for SSL and HTTPS is not installed')
   647                 _(b'Python support for SSL and HTTPS is not installed')
   629             )
   648             )
   630 
   649 
   631         inst = _make_peer(ui, path)
   650         inst = _make_peer(ui, path, remotehidden=remotehidden)
   632 
   651 
   633         return inst
   652         return inst
   634     except error.RepoError as httpexception:
   653     except error.RepoError as httpexception:
   635         try:
   654         try:
   636             r = statichttprepo.make_peer(ui, b"static-" + path.loc, create)
   655             r = statichttprepo.make_peer(ui, b"static-" + path.loc, create)