mercurial/sshpeer.py
changeset 33804 1f8460b55986
parent 33768 82d564d5ac4f
child 33806 dedab036215d
equal deleted inserted replaced
33803:707750e5310b 33804:1f8460b55986
    11 
    11 
    12 from .i18n import _
    12 from .i18n import _
    13 from . import (
    13 from . import (
    14     error,
    14     error,
    15     pycompat,
    15     pycompat,
       
    16     repository,
    16     util,
    17     util,
    17     wireproto,
    18     wireproto,
    18 )
    19 )
    19 
    20 
    20 def _serverquote(s):
    21 def _serverquote(s):
   112         return self._main.close()
   113         return self._main.close()
   113 
   114 
   114     def flush(self):
   115     def flush(self):
   115         return self._main.flush()
   116         return self._main.flush()
   116 
   117 
   117 class sshpeer(wireproto.wirepeer):
   118 class sshpeer(wireproto.wirepeer, repository.legacypeer):
   118     def __init__(self, ui, path, create=False):
   119     def __init__(self, ui, path, create=False):
   119         self._url = path
   120         self._url = path
   120         self.ui = ui
   121         self._ui = ui
   121         self._pipeo = self._pipei = self._pipee = None
   122         self._pipeo = self._pipei = self._pipee = None
   122 
   123 
   123         u = util.url(path, parsequery=False, parsefragment=False)
   124         u = util.url(path, parsequery=False, parsefragment=False)
   124         if u.scheme != 'ssh' or not u.host or u.path is None:
   125         if u.scheme != 'ssh' or not u.host or u.path is None:
   125             self._abort(error.RepoError(_("couldn't parse location %s") % path))
   126             self._abort(error.RepoError(_("couldn't parse location %s") % path))
   148             if res != 0:
   149             if res != 0:
   149                 self._abort(error.RepoError(_("could not create remote repo")))
   150                 self._abort(error.RepoError(_("could not create remote repo")))
   150 
   151 
   151         self._validaterepo(sshcmd, args, remotecmd)
   152         self._validaterepo(sshcmd, args, remotecmd)
   152 
   153 
       
   154         # TODO remove this alias once peerrepository inheritance is removed.
       
   155         self._capabilities = self.capabilities
       
   156 
       
   157     # Begin of _basepeer interface.
       
   158 
       
   159     @util.propertycache
       
   160     def ui(self):
       
   161         return self._ui
       
   162 
   153     def url(self):
   163     def url(self):
   154         return self._url
   164         return self._url
       
   165 
       
   166     def local(self):
       
   167         return None
       
   168 
       
   169     def peer(self):
       
   170         return self
       
   171 
       
   172     def canpush(self):
       
   173         return True
       
   174 
       
   175     def close(self):
       
   176         pass
       
   177 
       
   178     # End of _basepeer interface.
       
   179 
       
   180     # Begin of _basewirecommands interface.
       
   181 
       
   182     def capabilities(self):
       
   183         return self._caps
       
   184 
       
   185     # End of _basewirecommands interface.
   155 
   186 
   156     def _validaterepo(self, sshcmd, args, remotecmd):
   187     def _validaterepo(self, sshcmd, args, remotecmd):
   157         # cleanup up previous run
   188         # cleanup up previous run
   158         self._cleanup()
   189         self._cleanup()
   159 
   190 
   197         self._caps = set()
   228         self._caps = set()
   198         for l in reversed(lines):
   229         for l in reversed(lines):
   199             if l.startswith("capabilities:"):
   230             if l.startswith("capabilities:"):
   200                 self._caps.update(l[:-1].split(":")[1].split())
   231                 self._caps.update(l[:-1].split(":")[1].split())
   201                 break
   232                 break
   202 
       
   203     def _capabilities(self):
       
   204         return self._caps
       
   205 
   233 
   206     def _readerr(self):
   234     def _readerr(self):
   207         _forwardoutput(self.ui, self._pipee)
   235         _forwardoutput(self.ui, self._pipee)
   208 
   236 
   209     def _abort(self, exception):
   237     def _abort(self, exception):