# HG changeset patch # User Pradeepkumar Gayam # Date 2010-08-10 16:56:08 # Node ID 1839a7518b0d1e4594cba68be7854b6e97691438 # Parent b69899dbad4005e914aa112849eede267b449a39 revlog: deltachain() returns chain of revs need to construct a revision diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1016,6 +1016,28 @@ class revlog(object): 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):