Mercurial > public > mercurial-scm > hg
comparison mercurial/sshpeer.py @ 49761:73ed1d13c0bf
peer: get the `path` object down to the sshpeer
Same logic as the other peers.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 03 Dec 2022 06:16:58 +0100 |
parents | 5f71fff8dc74 |
children | ed052780ad5e |
comparison
equal
deleted
inserted
replaced
49760:5bceea1a8234 | 49761:73ed1d13c0bf |
---|---|
370 return protoname, caps | 370 return protoname, caps |
371 | 371 |
372 | 372 |
373 class sshv1peer(wireprotov1peer.wirepeer): | 373 class sshv1peer(wireprotov1peer.wirepeer): |
374 def __init__( | 374 def __init__( |
375 self, ui, url, proc, stdin, stdout, stderr, caps, autoreadstderr=True | 375 self, ui, path, proc, stdin, stdout, stderr, caps, autoreadstderr=True |
376 ): | 376 ): |
377 """Create a peer from an existing SSH connection. | 377 """Create a peer from an existing SSH connection. |
378 | 378 |
379 ``proc`` is a handle on the underlying SSH process. | 379 ``proc`` is a handle on the underlying SSH process. |
380 ``stdin``, ``stdout``, and ``stderr`` are handles on the stdio | 380 ``stdin``, ``stdout``, and ``stderr`` are handles on the stdio |
381 pipes for that process. | 381 pipes for that process. |
382 ``caps`` is a set of capabilities supported by the remote. | 382 ``caps`` is a set of capabilities supported by the remote. |
383 ``autoreadstderr`` denotes whether to automatically read from | 383 ``autoreadstderr`` denotes whether to automatically read from |
384 stderr and to forward its output. | 384 stderr and to forward its output. |
385 """ | 385 """ |
386 super().__init__(ui) | 386 super().__init__(ui, path=path) |
387 self._url = url | |
388 # self._subprocess is unused. Keeping a handle on the process | 387 # self._subprocess is unused. Keeping a handle on the process |
389 # holds a reference and prevents it from being garbage collected. | 388 # holds a reference and prevents it from being garbage collected. |
390 self._subprocess = proc | 389 self._subprocess = proc |
391 | 390 |
392 # And we hook up our "doublepipe" wrapper to allow querying | 391 # And we hook up our "doublepipe" wrapper to allow querying |
409 } | 408 } |
410 | 409 |
411 # Begin of ipeerconnection interface. | 410 # Begin of ipeerconnection interface. |
412 | 411 |
413 def url(self): | 412 def url(self): |
414 return self._url | 413 return self.path.loc |
415 | 414 |
416 def local(self): | 415 def local(self): |
417 return None | 416 return None |
418 | 417 |
419 def canpush(self): | 418 def canpush(self): |
610 def make_peer(ui, path, create, intents=None, createopts=None): | 609 def make_peer(ui, path, create, intents=None, createopts=None): |
611 """Create an SSH peer. | 610 """Create an SSH peer. |
612 | 611 |
613 The returned object conforms to the ``wireprotov1peer.wirepeer`` interface. | 612 The returned object conforms to the ``wireprotov1peer.wirepeer`` interface. |
614 """ | 613 """ |
615 path = path.loc | 614 u = urlutil.url(path.loc, parsequery=False, parsefragment=False) |
616 u = urlutil.url(path, parsequery=False, parsefragment=False) | |
617 if u.scheme != b'ssh' or not u.host or u.path is None: | 615 if u.scheme != b'ssh' or not u.host or u.path is None: |
618 raise error.RepoError(_(b"couldn't parse location %s") % path) | 616 raise error.RepoError(_(b"couldn't parse location %s") % path) |
619 | 617 |
620 urlutil.checksafessh(path) | 618 urlutil.checksafessh(path.loc) |
621 | 619 |
622 if u.passwd is not None: | 620 if u.passwd is not None: |
623 raise error.RepoError(_(b'password in URL not supported')) | 621 raise error.RepoError(_(b'password in URL not supported')) |
624 | 622 |
625 sshcmd = ui.config(b'ui', b'ssh') | 623 sshcmd = ui.config(b'ui', b'ssh') |