changeset 14208:d62d597b8974

revlog: compute correct deltaparent in the deltaparent function It now returns nullrev for chain base revisions, since they are conceptually deltas against nullrev. The revdiff function was updated accordingly.
author Sune Foldager <cryo@cyanite.org>
date Thu, 05 May 2011 18:05:24 +0200 (2011-05-05)
parents c1cca38818b9
children e5a59d31bb04 08d84bdce1a5
files mercurial/manifest.py mercurial/revlog.py
diffstat 2 files changed, 7 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -41,7 +41,8 @@
     def readfast(self, node):
         '''use the faster of readdelta or read'''
         r = self.rev(node)
-        if self.deltaparent(r) in self.parentrevs(r):
+        deltaparent = self.deltaparent(r)
+        if deltaparent != revlog.nullrev and deltaparent in self.parentrevs(r):
             return self.readdelta(node)
         return self.read(node)
 
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -830,11 +830,14 @@
 
     def deltaparent(self, rev):
         """return deltaparent of the given revision"""
-        return rev - 1
+        if self.index[rev][3] == rev:
+            return nullrev
+        else:
+            return rev - 1
 
     def revdiff(self, rev1, rev2):
         """return or calculate a delta between two revisions"""
-        if self.base(rev2) != rev2 and self.deltaparent(rev2) == rev1:
+        if rev1 != nullrev and self.deltaparent(rev2) == rev1:
             return self._chunk(rev2)
 
         return mdiff.textdiff(self.revision(self.node(rev1)),