mercurial/revlog.py
changeset 30584 be5b2098a817
parent 30543 03fae9048fa1
child 30743 2df983125d37
equal deleted inserted replaced
30583:8f8211903b83 30584:be5b2098a817
  1245         if text is None:
  1245         if text is None:
  1246             text = str(bins[0])
  1246             text = str(bins[0])
  1247             bins = bins[1:]
  1247             bins = bins[1:]
  1248 
  1248 
  1249         text = mdiff.patches(text, bins)
  1249         text = mdiff.patches(text, bins)
  1250 
  1250         self.checkhash(text, node, rev=rev)
  1251         text = self._checkhash(text, node, rev)
       
  1252 
       
  1253         self._cache = (node, rev, text)
  1251         self._cache = (node, rev, text)
  1254         return text
  1252         return text
  1255 
  1253 
  1256     def hash(self, text, p1, p2):
  1254     def hash(self, text, p1, p2):
  1257         """Compute a node hash.
  1255         """Compute a node hash.
  1259         Available as a function so that subclasses can replace the hash
  1257         Available as a function so that subclasses can replace the hash
  1260         as needed.
  1258         as needed.
  1261         """
  1259         """
  1262         return hash(text, p1, p2)
  1260         return hash(text, p1, p2)
  1263 
  1261 
  1264     def _checkhash(self, text, node, rev):
  1262     def checkhash(self, text, node, p1=None, p2=None, rev=None):
  1265         p1, p2 = self.parents(node)
  1263         """Check node hash integrity.
  1266         self.checkhash(text, p1, p2, node, rev)
  1264 
  1267         return text
  1265         Available as a function so that subclasses can extend hash mismatch
  1268 
  1266         behaviors as needed.
  1269     def checkhash(self, text, p1, p2, node, rev=None):
  1267         """
       
  1268         if p1 is None and p2 is None:
       
  1269             p1, p2 = self.parents(node)
  1270         if node != self.hash(text, p1, p2):
  1270         if node != self.hash(text, p1, p2):
  1271             revornode = rev
  1271             revornode = rev
  1272             if revornode is None:
  1272             if revornode is None:
  1273                 revornode = templatefilters.short(hex(node))
  1273                 revornode = templatefilters.short(hex(node))
  1274             raise RevlogError(_("integrity check failed on %s:%s")
  1274             raise RevlogError(_("integrity check failed on %s:%s")
  1439                 else:
  1439                 else:
  1440                     fh = dfh
  1440                     fh = dfh
  1441                 basetext = self.revision(self.node(baserev), _df=fh)
  1441                 basetext = self.revision(self.node(baserev), _df=fh)
  1442                 btext[0] = mdiff.patch(basetext, delta)
  1442                 btext[0] = mdiff.patch(basetext, delta)
  1443             try:
  1443             try:
  1444                 self.checkhash(btext[0], p1, p2, node)
  1444                 self.checkhash(btext[0], node, p1=p1, p2=p2)
  1445                 if flags & REVIDX_ISCENSORED:
  1445                 if flags & REVIDX_ISCENSORED:
  1446                     raise RevlogError(_('node %s is not censored') % node)
  1446                     raise RevlogError(_('node %s is not censored') % node)
  1447             except CensoredNodeError:
  1447             except CensoredNodeError:
  1448                 # must pass the censored index flag to add censored revisions
  1448                 # must pass the censored index flag to add censored revisions
  1449                 if not flags & REVIDX_ISCENSORED:
  1449                 if not flags & REVIDX_ISCENSORED: