mercurial/revlog.py
branchstable
changeset 12888 ad01fe38afe6
parent 12887 8ce6240587b1
child 12889 5482c6b826f4
equal deleted inserted replaced
12887:8ce6240587b1 12888:ad01fe38afe6
  1170             chk = hash(btext[0], p1, p2)
  1170             chk = hash(btext[0], p1, p2)
  1171             if chk != node:
  1171             if chk != node:
  1172                 raise RevlogError(_("consistency error in delta"))
  1172                 raise RevlogError(_("consistency error in delta"))
  1173             return btext[0]
  1173             return btext[0]
  1174 
  1174 
       
  1175         def builddelta(rev):
       
  1176             # can we use the cached delta?
       
  1177             if cachedelta and cachedelta[0] == rev:
       
  1178                 delta = cachedelta[1]
       
  1179             else:
       
  1180                 t = buildtext()
       
  1181                 ptext = self.revision(self.node(rev))
       
  1182                 delta = mdiff.textdiff(ptext, t)
       
  1183             data = compress(delta)
       
  1184             l = len(data[1]) + len(data[0])
       
  1185             base = self.base(rev)
       
  1186             dist = l + offset - self.start(base)
       
  1187             return dist, l, data, base
       
  1188 
  1175         curr = len(self)
  1189         curr = len(self)
  1176         prev = curr - 1
  1190         prev = curr - 1
  1177         base = curr
  1191         base = curr
  1178         offset = self.end(prev)
  1192         offset = self.end(prev)
  1179         flags = 0
  1193         flags = 0
  1185         else:
  1199         else:
  1186             deltarev, deltanode = prev, self.node(prev)
  1200             deltarev, deltanode = prev, self.node(prev)
  1187 
  1201 
  1188         # should we try to build a delta?
  1202         # should we try to build a delta?
  1189         if deltarev != nullrev:
  1203         if deltarev != nullrev:
  1190             # can we use the cached delta?
  1204             d = builddelta(deltarev)
  1191             if cachedelta and cachedelta[0] == deltarev:
  1205             dist, l, data, base = d
  1192                 d = cachedelta[1]
       
  1193             else:
       
  1194                 t = buildtext()
       
  1195                 ptext = self.revision(deltanode)
       
  1196                 d = mdiff.textdiff(ptext, t)
       
  1197             data = compress(d)
       
  1198             l = len(data[1]) + len(data[0])
       
  1199             base = self.base(deltarev)
       
  1200             dist = l + offset - self.start(base)
       
  1201 
  1206 
  1202         # full versions are inserted when the needed deltas
  1207         # full versions are inserted when the needed deltas
  1203         # become comparable to the uncompressed text
  1208         # become comparable to the uncompressed text
  1204         # or the base revision is punched
  1209         # or the base revision is punched
  1205         if text is None:
  1210         if text is None: