[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