bundle2: return a bundle20 object from exchanges.unbundle
authorPierre-Yves David <pierre-yves.david@fb.com>
Tue, 15 Apr 2014 16:49:30 -0400
changeset 21071 19b9f23a8c6f
parent 21070 408877d491fb
child 21072 0879352d67d8
bundle2: return a bundle20 object from exchanges.unbundle When a bundle2 is pushed we return a bundle instead of an integer. We use to return a binary stream. We now return a `bundle20` bundler to make the life of wireprotocol implementation simpler.
mercurial/exchange.py
mercurial/localrepo.py
--- a/mercurial/exchange.py	Tue Apr 15 16:42:52 2014 -0400
+++ b/mercurial/exchange.py	Tue Apr 15 16:49:30 2014 -0400
@@ -694,10 +694,8 @@
         # push can proceed
         if util.safehasattr(cg, 'params'):
             tr = repo.transaction('unbundle')
-            ret = bundle2.processbundle(repo, cg, lambda: tr)
+            r = bundle2.processbundle(repo, cg, lambda: tr).reply
             tr.close()
-            stream = util.chunkbuffer(ret.reply.getchunks())
-            r = bundle2.unbundle20(repo.ui, stream)
         else:
             r = changegroup.addchangegroup(repo, cg, source, url)
     finally:
--- a/mercurial/localrepo.py	Tue Apr 15 16:42:52 2014 -0400
+++ b/mercurial/localrepo.py	Tue Apr 15 16:49:30 2014 -0400
@@ -124,7 +124,14 @@
         This function handles the repo locking itself."""
         try:
             cg = exchange.readbundle(self.ui, cg, None)
-            return exchange.unbundle(self._repo, cg, heads, 'push', url)
+            ret = exchange.unbundle(self._repo, cg, heads, 'push', url)
+            if util.safehasattr(ret, 'getchunks'):
+                # This is a bundle20 object, turn it into an unbundler.
+                # This little dance should be dropped eventually when the API
+                # is finally improved.
+                stream = util.chunkbuffer(ret.getchunks())
+                ret = bundle2.unbundle20(self.ui, stream)
+            return ret
         except exchange.PushRaced, exc:
             raise error.ResponseError(_('push failed:'), exc.message)