[PATCH 07 of 15] localrepo: generate parentdelta'ed changegroup if flag is on

Pradeepkumar Gayam in3xes at gmail.com
Mon Jul 12 05:49:49 CDT 2010


# HG changeset patch
# User Pradeepkumar Gayam <in3xes at gmail.com>
# Date 1278877989 -19800
# Branch stable
# Node ID 652e22c020362dff73df745be4fe1e5d1712993a
# Parent  d7ffd4120b04df6bf6382fc88586debe9607013e
localrepo: generate parentdelta'ed changegroup if flag is on

diff -r d7ffd4120b04 -r 652e22c02036 mercurial/localrepo.py
--- a/mercurial/localrepo.py	Mon Jul 12 00:53:18 2010 +0530
+++ b/mercurial/localrepo.py	Mon Jul 12 01:23:09 2010 +0530
@@ -20,7 +20,7 @@
 propertycache = util.propertycache
 
 class localrepository(repo.repository):
-    capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey'))
+    capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey parentdelta'))
     supported = set('revlogv1 store fncache shared'.split())
 
     def __init__(self, baseui, path=None, create=0):
@@ -1272,7 +1272,7 @@
             for node in nodes:
                 self.ui.debug("%s\n" % hex(node))
 
-    def changegroupsubset(self, bases, heads, source, extranodes=None):
+    def changegroupsubset(self, bases, heads, source, extranodes=None, pdelta=False):
         """Compute a changegroup consisting of all the nodes that are
         descendents of any of the bases and ancestors of any of the heads.
         Return a chunkbuffer object whose read() method will return
@@ -1308,7 +1308,7 @@
             allheads = self.heads()
             allheads.sort()
             if heads == allheads:
-                return self._changegroup(msng_cl_lst, source)
+                return self._changegroup(msng_cl_lst, source, pdelta)
 
         # slow path
         self.hook('preoutgoing', throw=True, source=source)
@@ -1543,11 +1543,11 @@
 
         return util.chunkbuffer(gengroup())
 
-    def changegroup(self, basenodes, source):
+    def changegroup(self, basenodes, source, pdelta=False):
         # to avoid a race we use changegroupsubset() (issue1320)
-        return self.changegroupsubset(basenodes, self.heads(), source)
+        return self.changegroupsubset(basenodes, self.heads(), source, pdelta=pdelta)
 
-    def _changegroup(self, nodes, source):
+    def _changegroup(self, nodes, source, pdelta=False):
         """Compute the changegroup of all nodes that we have that a recipient
         doesn't.  Return a chunkbuffer object whose read() method will return
         successive changegroup chunks.
@@ -1584,7 +1584,7 @@
             collect = changegroup.collector(cl, mmfs, changedfiles)
 
             cnt = 0
-            for chnk in cl.group(nodes, identity, collect):
+            for chnk in cl.group(nodes, identity, collect, pdelta):
                 self.ui.progress(_('bundling changes'), cnt, unit=_('chunks'))
                 cnt += 1
                 yield chnk
@@ -1593,7 +1593,8 @@
             mnfst = self.manifest
             nodeiter = gennodelst(mnfst)
             cnt = 0
-            for chnk in mnfst.group(nodeiter, lookuprevlink_func(mnfst)):
+            for chnk in mnfst.group(nodeiter, lookuprevlink_func(mnfst),
+                                    pdelta=pdelta):
                 self.ui.progress(_('bundling manifests'), cnt, unit=_('chunks'))
                 cnt += 1
                 yield chnk
@@ -1610,7 +1611,7 @@
                     yield changegroup.chunkheader(len(fname))
                     yield fname
                     lookup = lookuprevlink_func(filerevlog)
-                    for chnk in filerevlog.group(nodeiter, lookup):
+                    for chnk in filerevlog.group(nodeiter, lookup, pdelta=pdelta):
                         self.ui.progress(
                             _('bundling files'), cnt, item=fname, unit=_('chunks'))
                         cnt += 1
diff -r d7ffd4120b04 -r 652e22c02036 mercurial/revlog.py
--- a/mercurial/revlog.py	Mon Jul 12 00:53:18 2010 +0530
+++ b/mercurial/revlog.py	Mon Jul 12 01:23:09 2010 +0530
@@ -1180,7 +1180,7 @@
             self._cache = (node, curr, text)
         return node
 
-    def group(self, nodelist, lookup, infocollect=None):
+    def group(self, nodelist, lookup, infocollect=None, pdelta=False):
         """Calculate a delta group, yielding a sequence of changegroup chunks
         (strings).
 
@@ -1216,7 +1216,11 @@
                 d = self.revision(nb)
                 meta += mdiff.trivialdiffheader(len(d))
             else:
-                d = self.revdiff(a, b)
+                if pdelta:
+                    d = self.revdiff(self.parentrevs(b)[0], b)
+                else:
+                    d = self.revdiff(a, b)
+
             yield changegroup.chunkheader(len(meta) + len(d))
             yield meta
             if len(d) > 2**20:


More information about the Mercurial-devel mailing list