# HG changeset patch # User mpm@selenic.com # Date 1116464394 28800 # Node ID 3dde7c87e36df4da5694313a41803bc8ed358e60 # Parent 7a2abee6b0c2836fd4429edc21a7256bd460d738 Add paranoia to diff code diff -r 7a2abee6b0c2 -r 3dde7c87e36d mercurial/hg.py --- a/mercurial/hg.py Wed May 18 16:47:49 2005 -0800 +++ b/mercurial/hg.py Wed May 18 16:59:54 2005 -0800 @@ -78,7 +78,11 @@ def diff(self, a, b): # this is sneaky, as we're not actually using a and b if self.listcache and len(self.listcache[0]) == len(a): - return mdiff.diff(self.listcache[1], self.addlist, 1) + d = mdiff.diff(self.listcache[1], self.addlist, 1) + if mdiff.patch(a, d) != b: + sys.stderr.write("*** sortdiff failed, falling back ***\n") + return mdiff.textdiff(a, b) + return d else: return mdiff.textdiff(a, b) diff -r 7a2abee6b0c2 -r 3dde7c87e36d mercurial/revlog.py --- a/mercurial/revlog.py Wed May 18 16:47:49 2005 -0800 +++ b/mercurial/revlog.py Wed May 18 16:59:54 2005 -0800 @@ -190,7 +190,8 @@ (p1, p2) = self.parents(node) if node != hash(text, p1, p2): - raise "integrity check failed on %s:%d" % (self.datafile, rev) + raise IOError("integrity check failed on %s:%d" + % (self.datafile, rev)) self.cache = (node, rev, text) return text @@ -210,7 +211,10 @@ start = self.start(base) end = self.end(t) prev = self.revision(self.tip()) - data = compress(self.diff(prev, text)) + d = self.diff(prev, text) + if self.patches(prev, [d]) != text: + raise AssertionError("diff failed") + data = compress(d) dist = end - start + len(data) # full versions are inserted when the needed deltas