[PATCH 2 of 7] revlog: deltachain() returns chain of revs need to construct a revision
in3xes at gmail.com
in3xes at gmail.com
Tue Aug 10 17:21:11 UTC 2010
# HG changeset patch
# User Pradeepkumar Gayam <in3xes at gmail.com>
# Date 1281459368 -19800
# Node ID ed1ecf99eda275f97d4b3403fd7027b50dd15920
# Parent a8980ebae2ab07c20a174843de5aef4ff367f1d4
revlog: deltachain() returns chain of revs need to construct a revision
diff -r a8980ebae2ab -r ed1ecf99eda2 mercurial/revlog.py
--- a/mercurial/revlog.py Tue Aug 10 22:25:08 2010 +0530
+++ b/mercurial/revlog.py Tue Aug 10 22:26:08 2010 +0530
@@ -1016,6 +1016,28 @@
def _chunkclear(self):
self._chunkcache = (0, '')
+ def deltaparent(self, rev):
+ """return previous revision or parentrev according to flags"""
+ if self.base(rev) == rev:
+ return nullrev
+ elif self.flags(rev) & REVIDX_PARENTDELTA:
+ return self.parentrevs(rev)[0]
+ else:
+ return rev - 1
+
+
+ def deltachain(self, rev, cache):
+ """return chain of revisions to construct a given revision"""
+ chain = []
+ check = False
+ while self.base(rev) != rev and rev != cache:
+ chain.append(rev)
+ rev = self.deltaparent(rev)
+ chain.reverse()
+ if rev == cache:
+ check = True
+ return check, rev, chain
+
def revdiff(self, rev1, rev2):
"""return or calculate a delta between two revisions"""
if rev1 + 1 == rev2 and self.base(rev1) == self.base(rev2):
More information about the Mercurial-devel
mailing list