Comments
Patch
@@ -481,7 +481,17 @@
base = self.deltaparent(revlog, rev, p1, p2, prev)
prefix = ''
- if base == nullrev:
+ if revlog.iscensored(base) or revlog.iscensored(rev):
+ try:
+ delta = revlog.revision(node)
+ except error.CensoredNodeError, e:
+ delta = e.tombstone
+ if base == nullrev:
+ prefix = mdiff.trivialdiffheader(len(delta))
+ else:
+ baselen = revlog.rawsize(base)
+ prefix = mdiff.replacediffheader(baselen, len(delta))
+ elif base == nullrev:
delta = revlog.revision(node)
prefix = mdiff.trivialdiffheader(len(delta))
else:
@@ -136,11 +136,15 @@
pass
class CensoredNodeError(RevlogError):
- """error raised when content verification fails on a censored node"""
+ """error raised when content verification fails on a censored node
- def __init__(self, filename, node):
+ Also contains the tombstone data substituted for the uncensored data.
+ """
+
+ def __init__(self, filename, node, tombstone):
from node import short
RevlogError.__init__(self, '%s:%s' % (filename, short(node)))
+ self.tombstone = tombstone
class CensoredBaseError(RevlogError):
"""error raised when a delta is rejected because its base is censored
@@ -101,7 +101,7 @@
super(filelog, self).checkhash(text, p1, p2, node, rev=rev)
except error.RevlogError:
if _censoredtext(text):
- raise error.CensoredNodeError(self.indexfile, node)
+ raise error.CensoredNodeError(self.indexfile, node, text)
raise
def iscensored(self, rev):