mercurial/revlog.py
changeset 12023 44c22dc193a4
parent 12012 bade7a9c5c07
child 12024 56a7721ee3ec
equal deleted inserted replaced
12022:6b04f1e1aa8a 12023:44c22dc193a4
  1135         transaction - the transaction object used for rollback
  1135         transaction - the transaction object used for rollback
  1136         link - the linkrev data to add
  1136         link - the linkrev data to add
  1137         p1, p2 - the parent nodeids of the revision
  1137         p1, p2 - the parent nodeids of the revision
  1138         cachedelta - an optional precomputed delta
  1138         cachedelta - an optional precomputed delta
  1139         """
  1139         """
       
  1140         node = hash(text, p1, p2)
       
  1141         if (node in self.nodemap and
       
  1142             (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)):
       
  1143             return node
       
  1144 
  1140         dfh = None
  1145         dfh = None
  1141         if not self._inline:
  1146         if not self._inline:
  1142             dfh = self.opener(self.datafile, "a")
  1147             dfh = self.opener(self.datafile, "a")
  1143         ifh = self.opener(self.indexfile, "a+")
  1148         ifh = self.opener(self.indexfile, "a+")
  1144         try:
  1149         try:
  1145             return self._addrevision(text, transaction, link, p1, p2,
  1150             return self._addrevision(node, text, transaction, link, p1, p2,
  1146                                      cachedelta, ifh, dfh)
  1151                                      cachedelta, ifh, dfh)
  1147         finally:
  1152         finally:
  1148             if dfh:
  1153             if dfh:
  1149                 dfh.close()
  1154                 dfh.close()
  1150             ifh.close()
  1155             ifh.close()
  1151 
  1156 
  1152     def _addrevision(self, text, transaction, link, p1, p2,
  1157     def _addrevision(self, node, text, transaction, link, p1, p2,
  1153                      cachedelta, ifh, dfh):
  1158                      cachedelta, ifh, dfh):
  1154         node = hash(text, p1, p2)
       
  1155         if (node in self.nodemap and
       
  1156             (not self.flags(self.rev(node)) & REVIDX_PUNCHED_FLAG)):
       
  1157             return node
       
  1158 
       
  1159         curr = len(self)
  1159         curr = len(self)
  1160         prev = curr - 1
  1160         prev = curr - 1
  1161         base = curr
  1161         base = curr
  1162         offset = self.end(prev)
  1162         offset = self.end(prev)
  1163         flags = 0
  1163         flags = 0
  1358                         # text == '' in the case of nullrev or punched revision
  1358                         # text == '' in the case of nullrev or punched revision
  1359                         text = buffer(delta, 12)
  1359                         text = buffer(delta, 12)
  1360                     else:
  1360                     else:
  1361                         text = mdiff.patches(text, [delta])
  1361                         text = mdiff.patches(text, [delta])
  1362                     del delta
  1362                     del delta
  1363                     chk = self._addrevision(text, transaction, link, p1, p2, None,
  1363                     chk = self._addrevision(node, text, transaction, link,
  1364                                             ifh, dfh)
  1364                                             p1, p2, None, ifh, dfh)
  1365                     if not dfh and not self._inline:
  1365                     if not dfh and not self._inline:
  1366                         # addrevision switched from inline to conventional
  1366                         # addrevision switched from inline to conventional
  1367                         # reopen the index
  1367                         # reopen the index
  1368                         dfh = self.opener(self.datafile, "a")
  1368                         dfh = self.opener(self.datafile, "a")
  1369                         ifh = self.opener(self.indexfile, "a")
  1369                         ifh = self.opener(self.indexfile, "a")