Fix sshrepo.unbundle
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Fri, 17 Aug 2007 22:43:38 -0300
changeset 5195 6d5ed61c508c
parent 5194 1843098e665a
child 5196 86e95b93559a
child 5206 0f6a1bdf89fb
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.
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):