Mercurial > hg
comparison mercurial/httppeer.py @ 49759:cfe8d88a453e
peer: get the `path` object down to the httppeer
One more peer with a path stored.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 03 Dec 2022 00:24:28 +0100 |
parents | 5f71fff8dc74 |
children | ed052780ad5e |
comparison
equal
deleted
inserted
replaced
49758:20f262ab6fd3 | 49759:cfe8d88a453e |
---|---|
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__(self, ui, path, url, opener, requestbuilder, caps): |
385 super().__init__(ui) | 385 super().__init__(ui, path=path) |
386 self._path = path | |
387 self._url = url | 386 self._url = url |
388 self._caps = caps | 387 self._caps = caps |
389 self.limitedarguments = caps is not None and b'httppostargs' not in caps | 388 self.limitedarguments = caps is not None and b'httppostargs' not in caps |
390 self._urlopener = opener | 389 self._urlopener = opener |
391 self._requestbuilder = requestbuilder | 390 self._requestbuilder = requestbuilder |
396 getattr(h, "close_all", lambda: None)() | 395 getattr(h, "close_all", lambda: None)() |
397 | 396 |
398 # Begin of ipeerconnection interface. | 397 # Begin of ipeerconnection interface. |
399 | 398 |
400 def url(self): | 399 def url(self): |
401 return self._path | 400 return self.path.loc |
402 | 401 |
403 def local(self): | 402 def local(self): |
404 return None | 403 return None |
405 | 404 |
406 def canpush(self): | 405 def canpush(self): |
600 connections, perform HTTP requests. | 599 connections, perform HTTP requests. |
601 | 600 |
602 ``requestbuilder`` is the type used for constructing HTTP requests. | 601 ``requestbuilder`` is the type used for constructing HTTP requests. |
603 It exists as an argument so extensions can override the default. | 602 It exists as an argument so extensions can override the default. |
604 """ | 603 """ |
605 u = urlutil.url(path) | 604 if path.url.query or path.url.fragment: |
606 if u.query or u.fragment: | 605 msg = _(b'unsupported URL component: "%s"') |
607 raise error.Abort( | 606 msg %= path.url.query or path.url.fragment |
608 _(b'unsupported URL component: "%s"') % (u.query or u.fragment) | 607 raise error.Abort(msg) |
609 ) | |
610 | 608 |
611 # urllib cannot handle URLs with embedded user or passwd. | 609 # urllib cannot handle URLs with embedded user or passwd. |
612 url, authinfo = u.authinfo() | 610 url, authinfo = path.url.authinfo() |
613 ui.debug(b'using %s\n' % url) | 611 ui.debug(b'using %s\n' % url) |
614 | 612 |
615 opener = opener or urlmod.opener(ui, authinfo) | 613 opener = opener or urlmod.opener(ui, authinfo) |
616 | 614 |
617 respurl, info = performhandshake(ui, url, opener, requestbuilder) | 615 respurl, info = performhandshake(ui, url, opener, requestbuilder) |
622 | 620 |
623 | 621 |
624 def make_peer(ui, path, create, intents=None, createopts=None): | 622 def make_peer(ui, path, create, intents=None, createopts=None): |
625 if create: | 623 if create: |
626 raise error.Abort(_(b'cannot create new http repository')) | 624 raise error.Abort(_(b'cannot create new http repository')) |
627 path = path.loc | |
628 try: | 625 try: |
629 if path.startswith(b'https:') and not urlmod.has_https: | 626 if path.url.scheme == b'https' and not urlmod.has_https: |
630 raise error.Abort( | 627 raise error.Abort( |
631 _(b'Python support for SSL and HTTPS is not installed') | 628 _(b'Python support for SSL and HTTPS is not installed') |
632 ) | 629 ) |
633 | 630 |
634 inst = makepeer(ui, path) | 631 inst = makepeer(ui, path) |
635 | 632 |
636 return inst | 633 return inst |
637 except error.RepoError as httpexception: | 634 except error.RepoError as httpexception: |
638 try: | 635 try: |
639 r = statichttprepo.make_peer(ui, b"static-" + path, create) | 636 r = statichttprepo.make_peer(ui, b"static-" + path.loc, create) |
640 ui.note(_(b'(falling back to static-http)\n')) | 637 ui.note(_(b'(falling back to static-http)\n')) |
641 return r | 638 return r |
642 except error.RepoError: | 639 except error.RepoError: |
643 raise httpexception # use the original http RepoError instead | 640 raise httpexception # use the original http RepoError instead |