Mercurial > public > mercurial-scm > hg-stable
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 |