# HG changeset patch # User Matt Mackall # Date 1149894215 18000 # Node ID a1cfe679192c7533765c470ce31e9fe1a0ef8091 # Parent 144280f1578f11844de8eebd6e9f0464805dbec3 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. diff -r 144280f1578f -r a1cfe679192c mercurial/sshrepo.py --- a/mercurial/sshrepo.py Fri Jun 09 17:48:14 2006 -0500 +++ b/mercurial/sshrepo.py Fri Jun 09 18:03:35 2006 -0500 @@ -37,6 +37,7 @@ 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 @@ 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