comparison mercurial/revlog.py @ 98:3dde7c87e36d

Add paranoia to diff code
author mpm@selenic.com
date Wed, 18 May 2005 16:59:54 -0800
parents 7a2abee6b0c2
children aea6562add6c
comparison
equal deleted inserted replaced
97:7a2abee6b0c2 98:3dde7c87e36d
188 188
189 text = mdiff.patches(text, bins) 189 text = mdiff.patches(text, bins)
190 190
191 (p1, p2) = self.parents(node) 191 (p1, p2) = self.parents(node)
192 if node != hash(text, p1, p2): 192 if node != hash(text, p1, p2):
193 raise "integrity check failed on %s:%d" % (self.datafile, rev) 193 raise IOError("integrity check failed on %s:%d"
194 % (self.datafile, rev))
194 195
195 self.cache = (node, rev, text) 196 self.cache = (node, rev, text)
196 return text 197 return text
197 198
198 def addrevision(self, text, transaction, link, p1=None, p2=None): 199 def addrevision(self, text, transaction, link, p1=None, p2=None):
208 if n: 209 if n:
209 base = self.base(t) 210 base = self.base(t)
210 start = self.start(base) 211 start = self.start(base)
211 end = self.end(t) 212 end = self.end(t)
212 prev = self.revision(self.tip()) 213 prev = self.revision(self.tip())
213 data = compress(self.diff(prev, text)) 214 d = self.diff(prev, text)
215 if self.patches(prev, [d]) != text:
216 raise AssertionError("diff failed")
217 data = compress(d)
214 dist = end - start + len(data) 218 dist = end - start + len(data)
215 219
216 # full versions are inserted when the needed deltas 220 # full versions are inserted when the needed deltas
217 # become comparable to the uncompressed text 221 # become comparable to the uncompressed text
218 if not n or dist > len(text) * 2: 222 if not n or dist > len(text) * 2: