# HG changeset patch # User Alexis S. L. Carvalho # Date 1187401418 10800 # Node ID 6d5ed61c508cfdfa0c12fad4cb328b975ad15135 # Parent 1843098e665ae56b7440479d072442d44f94635a Fix sshrepo.unbundle We weren't reading all the data sent by the server. Depending on the system, the remote hg (actually, the remote python) could send a "close failed: [Errno 32] Broken pipe", making some tests fail. diff --git a/mercurial/sshrepo.py b/mercurial/sshrepo.py --- a/mercurial/sshrepo.py +++ b/mercurial/sshrepo.py @@ -175,6 +175,7 @@ class sshrepository(remoterepository): def unbundle(self, cg, heads, source): d = self.call("unbundle", heads=' '.join(map(hex, heads))) if d: + # remote may send "unsynced changes" self.raise_(hg.RepoError(_("push refused: %s") % d)) while 1: @@ -188,14 +189,15 @@ class sshrepository(remoterepository): self.pipeo.flush() self.readerr() - d = self.pipei.readline() - if d != '\n': - return 1 - l = int(self.pipei.readline()) r = self.pipei.read(l) - if not r: - return 1 + if r: + # remote may send "unsynced changes" + self.raise_(hg.RepoError(_("push failed: %s") % r)) + + self.readerr() + l = int(self.pipei.readline()) + r = self.pipei.read(l) return int(r) def addchangegroup(self, cg, source, url):