changeset 2421:a1cfe679192c

ssh: add capability detection at startup Because older servers don't return any output for unknown commands, it's tricky to add new commands. The approach is this: we add a "hello" command that reports any interesting capabilities (and other things that might be of interest in the future). To detect whether this new command is supported, we issue both it and our startup detection command ("between") at the beginning of a connection.
author Matt Mackall <mpm@selenic.com>
date Fri, 09 Jun 2006 18:03:35 -0500
parents 144280f1578f
children f328e8aeff8b
files mercurial/sshrepo.py
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/sshrepo.py
+++ b/mercurial/sshrepo.py
@@ -37,6 +37,7 @@ class sshrepository(remoterepository):
         self.pipeo, self.pipei, self.pipee = os.popen3(cmd, 'b')
 
         # skip any noise generated by remote shell
+        self.do_cmd("hello")
         r = self.do_cmd("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
         lines = ["", "dummy"]
         max_noise = 500
@@ -54,6 +55,13 @@ class sshrepository(remoterepository):
                 ui.debug(_("remote: "), l1)
             raise hg.RepoError(_("no response from remote hg"))
 
+        self.capabilities = ()
+        lines.reverse()
+        for l in lines:
+            if l.startswith("capabilities:"):
+                self.capabilities = l[:-1].split(":")[1].split()
+                break
+
     def readerr(self):
         while 1:
             size = util.fstat(self.pipee).st_size