diff mercurial/revlog.py @ 13831:d69c9510d648

changegroup: introduce bundler objects This makes the bundler pluggable at lower levels.
author Matt Mackall <mpm@selenic.com>
date Thu, 31 Mar 2011 15:24:06 -0500
parents 470ec600b525
children e4bfb9c337f3
line wrap: on
line diff
--- a/mercurial/revlog.py	Thu Mar 31 14:25:26 2011 -0500
+++ b/mercurial/revlog.py	Thu Mar 31 15:24:06 2011 -0500
@@ -1058,7 +1058,7 @@
             self._cache = (node, curr, text)
         return node
 
-    def group(self, nodelist, lookup):
+    def group(self, nodelist, bundler):
         """Calculate a delta group, yielding a sequence of changegroup chunks
         (strings).
 
@@ -1074,7 +1074,7 @@
 
         # if we don't have any revisions touched by these changesets, bail
         if not revs:
-            yield changegroup.closechunk()
+            yield bundler.close()
             return
 
         # add the parent of the first rev
@@ -1085,19 +1085,18 @@
         for r in xrange(len(revs) - 1):
             a, b = revs[r], revs[r + 1]
             nb = self.node(b)
+            p1, p2 = self.parents(nb)
+            prefix = ''
 
-            p = self.parents(nb)
-            meta = nb + p[0] + p[1] + lookup(self, nb)
             if a == nullrev:
                 d = self.revision(nb)
-                meta += mdiff.trivialdiffheader(len(d))
+                prefix = mdiff.trivialdiffheader(len(d))
             else:
                 d = self.revdiff(a, b)
-            yield changegroup.chunkheader(len(meta) + len(d))
-            yield meta
-            yield d
+            for c in bundler.revchunk(self, nb, p1, p2, prefix, d):
+                yield c
 
-        yield changegroup.closechunk()
+        yield bundler.close()
 
     def addgroup(self, bundle, linkmapper, transaction):
         """