[PATCH 3 of 4] revlog: split _chunk method into _deltachunk and _keyframechunk
Wojciech Lopata
lopek at fb.com
Thu Sep 26 13:14:44 CDT 2013
# HG changeset patch
# User Wojciech Lopata <lopek at fb.com>
# Date 1380211580 25200
# Thu Sep 26 09:06:20 2013 -0700
# Node ID 16ba1a7b494caeb45d24ca81d49bbc866af1e7c5
# Parent 40d1012f2210f3cc5f9ba7bc7f11a53f18863dcf
revlog: split _chunk method into _deltachunk and _keyframechunk
diff --git a/mercurial/bundlerepo.py b/mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.py
+++ b/mercurial/bundlerepo.py
@@ -73,12 +73,12 @@
chain = node
n += 1
- def _chunk(self, rev):
+ def _deltachunk(self, rev):
# Warning: in case of bundle, the diff is against what we stored as
# delta base, not against rev - 1
# XXX: could use some caching
if rev <= self.repotiprev:
- return revlog.revlog._chunk(self, rev)
+ return revlog.revlog._deltachunk(self, rev)
self.bundle.seek(self.start(rev))
return self.bundle.read(self.length(rev))
@@ -88,7 +88,7 @@
# hot path for bundle
revb = self.index[rev2][3]
if revb == rev1:
- return self._chunk(rev2)
+ return self._deltachunk(rev2)
elif rev1 <= self.repotiprev and rev2 <= self.repotiprev:
return revlog.revlog.revdiff(self, rev1, rev2)
@@ -123,7 +123,7 @@
text = self.baserevision(iterrev)
while chain:
- delta = self._chunk(chain.pop())
+ delta = self._deltachunk(chain.pop())
text = mdiff.patches(text, [delta])
self._checkhash(text, node, rev)
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -881,11 +881,14 @@
length = end - start
return self._getchunk(start, length)
- def _chunk(self, rev):
+ def _deltachunk(self, rev):
return decompress(self._chunkraw(rev, rev))
- def _chunks(self, revs):
- '''faster version of [self._chunk(rev) for rev in revs]
+ def _keyframechunk(self, rev):
+ return decompress(self._chunkraw(rev, rev))
+
+ def _deltachunks(self, revs):
+ '''faster version of [self._deltachunk(rev) for rev in revs]
Assumes that revs is in ascending order.'''
if not revs:
@@ -928,7 +931,7 @@
def revdiff(self, rev1, rev2):
"""return or calculate a delta between two revisions"""
if rev1 != nullrev and self.deltaparent(rev2) == rev1:
- return str(self._chunk(rev2))
+ return str(self._deltachunk(rev2))
return mdiff.textdiff(self.revision(rev1),
self.revision(rev2))
@@ -975,21 +978,18 @@
else:
iterrev -= 1
e = index[iterrev]
+ chain.reverse()
if iterrev == cachedrev:
# cache hit
text = self._cache[2]
- else:
- chain.append(iterrev)
- chain.reverse()
# drop cache to save memory
self._cache = None
- bins = self._chunks(chain)
+ bins = self._deltachunks(chain)
if text is None:
- text = str(bins[0])
- bins = bins[1:]
+ text = str(self._keyframechunk(iterrev))
text = mdiff.patches(text, bins)
More information about the Mercurial-devel
mailing list