[PATCH 1 of 4] revlog: compute correct deltaparent in the deltaparent function

Sune Foldager cryo at cyanite.org
Thu May 5 11:27:56 CDT 2011


# HG changeset patch
# User Sune Foldager <cryo at cyanite.org>
# Date 1304611524 -7200
# Node ID 1b9d53b3eb06728afc9aae4198a53fd0e05e04e9
# Parent  e3dd3dcd6059d008f466ea31a2a0b43de9e8d47f
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.

diff -r e3dd3dcd6059 -r 1b9d53b3eb06 mercurial/manifest.py
--- a/mercurial/manifest.py	Thu May 05 12:53:33 2011 +0200
+++ 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)
 
diff -r e3dd3dcd6059 -r 1b9d53b3eb06 mercurial/revlog.py
--- a/mercurial/revlog.py	Thu May 05 12:53:33 2011 +0200
+++ 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)),


More information about the Mercurial-devel mailing list