revlog: compute correct deltaparent in the deltaparent function
authorSune Foldager <cryo@cyanite.org>
Thu, 05 May 2011 18:05:24 +0200
changeset 14208 d62d597b8974
parent 14207 c1cca38818b9
child 14209 08d84bdce1a5
child 14215 e5a59d31bb04
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.
mercurial/manifest.py
mercurial/revlog.py
--- a/mercurial/manifest.py	Thu May 05 11:33:02 2011 -0400
+++ b/mercurial/manifest.py	Thu May 05 18:05:24 2011 +0200
@@ -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	Thu May 05 11:33:02 2011 -0400
+++ b/mercurial/revlog.py	Thu May 05 18:05:24 2011 +0200
@@ -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)),