changeset 5195:6d5ed61c508c

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.
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
date Fri, 17 Aug 2007 22:43:38 -0300
parents 1843098e665a
children 86e95b93559a 0f6a1bdf89fb
files mercurial/sshrepo.py
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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):