# HG changeset patch # User Matt Mackall # Date 1120717800 28800 # Node ID 342927da4f4ce27a67e7c96783c025969ce5535a # Parent a55048b2ae3a27249d0ccce6fa2496bde46820eb Show remote client output with "remote:" diff -r a55048b2ae3a -r 342927da4f4c mercurial/hg.py --- a/mercurial/hg.py Wed Jul 06 22:28:50 2005 -0800 +++ b/mercurial/hg.py Wed Jul 06 22:30:00 2005 -0800 @@ -11,7 +11,7 @@ from demandload import * demandload(globals(), "re lock urllib urllib2 transaction time socket") demandload(globals(), "tempfile httprangereader bdiff") -demandload(globals(), "bisect") +demandload(globals(), "bisect select") class filelog(revlog): def __init__(self, opener, path): @@ -1751,11 +1751,21 @@ cmd = "ssh %s 'hg -R %s serve --stdio'" cmd = cmd % (args, path) - self.pipeo, self.pipei = os.popen2(cmd) + self.pipeo, self.pipei, self.pipee = os.popen3(cmd) + + def readerr(self): + while 1: + r,w,x = select.select([self.pipee], [], [], 0) + if not r: break + l = self.pipee.readline() + if not l: break + self.ui.status("remote: ", l) def __del__(self): + self.readerr() self.pipeo.close() self.pipei.close() + self.pipee.close() def dev(self): return -1 @@ -1772,7 +1782,12 @@ def call(self, cmd, **args): r = self.do_cmd(cmd, **args) - l = int(r.readline()) + l = r.readline() + self.readerr() + try: + l = int(l) + except: + raise RepoError("unexpected response '%s'" % l) return r.read(l) def lock(self): @@ -1787,8 +1802,7 @@ try: return map(bin, d[:-1].split(" ")) except: - self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") - raise + raise RepoError("unexpected response '%s'" % (d[:400] + "...")) def branches(self, nodes): n = " ".join(map(hex, nodes)) @@ -1797,8 +1811,7 @@ br = [ tuple(map(bin, b.split(" "))) for b in d.splitlines() ] return br except: - self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") - raise + raise RepoError("unexpected response '%s'" % (d[:400] + "...")) def between(self, pairs): n = "\n".join(["-".join(map(hex, p)) for p in pairs]) @@ -1807,8 +1820,7 @@ p = [ l and map(bin, l.split(" ")) or [] for l in d.splitlines() ] return p except: - self.ui.warn("unexpected response:\n" + d[:400] + "\n...\n") - raise + raise RepoError("unexpected response '%s'" % (d[:400] + "...")) def changegroup(self, nodes): n = " ".join(map(hex, nodes)) @@ -1824,11 +1836,13 @@ d = cg.read(4096) if not d: break self.pipeo.write(d) + self.readerr() self.pipeo.flush() + self.readerr() l = int(self.pipei.readline()) - return self.pipei.read(l) + return self.pipei.read(l) != "" def repository(ui, path=None, create=0): if path: