Fix sshrepo.unbundle
authorAlexis S. L. Carvalho <alexis@cecm.usp.br>
Fri, 17 Aug 2007 22:43:38 -0300
changeset 5190 6d5ed61c508c
parent 5189 1843098e665a
child 5196 86e95b93559a
child 5201 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	Fri Aug 17 22:43:38 2007 -0300
+++ b/mercurial/sshrepo.py	Fri Aug 17 22:43:38 2007 -0300
@@ -175,6 +175,7 @@
     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 @@
         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):