comparison mercurial/sshrepo.py @ 2040:cd7711268774

Don't enter an endless loop if remote hg doesn't answer, show remote noise. The endless loop is not only triggered if the remote shell is too noisy, but even if the local ssh command dies due to an error.
author Thomas Arendsen Hein <thomas@intevation.de>
date Sun, 02 Apr 2006 22:12:56 +0200
parents 1f1fc418a96c
children d14497cbd668
comparison
equal deleted inserted replaced
2039:0c438fd25e6e 2040:cd7711268774
37 self.pipeo, self.pipei, self.pipee = os.popen3(cmd, 'b') 37 self.pipeo, self.pipei, self.pipee = os.popen3(cmd, 'b')
38 38
39 # skip any noise generated by remote shell 39 # skip any noise generated by remote shell
40 r = self.do_cmd("between", pairs=("%s-%s" % ("0"*40, "0"*40))) 40 r = self.do_cmd("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
41 l1 = "" 41 l1 = ""
42 while 1: 42 l2 = "dummy"
43 max_noise = 100
44 while l2 and max_noise:
43 l2 = r.readline() 45 l2 = r.readline()
44 self.readerr() 46 self.readerr()
45 if l1 == "1\n" and l2 == "\n": 47 if l1 == "1\n" and l2 == "\n":
46 break 48 break
49 if l1:
50 ui.status(_("remote: %s") % l1)
47 l1 = l2 51 l1 = l2
52 max_noise -= 1
53 else:
54 if l1:
55 ui.status(_("remote: %s") % l1)
56 raise hg.RepoError(_("no response from remote hg"))
48 57
49 def readerr(self): 58 def readerr(self):
50 while 1: 59 while 1:
51 size = os.fstat(self.pipee.fileno())[stat.ST_SIZE] 60 size = os.fstat(self.pipee.fileno())[stat.ST_SIZE]
52 if size == 0: break 61 if size == 0: break