mercurial/revlogutils/deltas.py
changeset 51350 670e68729aa7
parent 51349 cc806f20d756
child 51351 bbbfa00d1e67
equal deleted inserted replaced
51349:cc806f20d756 51350:670e68729aa7
  1065         if (
  1065         if (
  1066             good is not None
  1066             good is not None
  1067             and good not in (self.p1, self.p2)
  1067             and good not in (self.p1, self.p2)
  1068             and self.revlog.issnapshot(good)
  1068             and self.revlog.issnapshot(good)
  1069         ):
  1069         ):
  1070             self.current_stage = _STAGE_SNAPSHOT
  1070             assert self.current_stage == _STAGE_SNAPSHOT
  1071             # refine snapshot down
  1071             # refine snapshot down
  1072             previous = None
  1072             previous = None
  1073             while previous != good:
  1073             while previous != good:
  1074                 previous = good
  1074                 previous = good
  1075                 base = self.revlog.deltaparent(good)
  1075                 base = self.revlog.deltaparent(good)
  1334             ptext = revlog.rawdata(base)
  1334             ptext = revlog.rawdata(base)
  1335             delta = mdiff.textdiff(ptext, t)
  1335             delta = mdiff.textdiff(ptext, t)
  1336 
  1336 
  1337         return delta
  1337         return delta
  1338 
  1338 
  1339     def _builddeltainfo(self, revinfo, base, target_rev=None):
  1339     def _builddeltainfo(
       
  1340         self, revinfo, base, target_rev=None, as_snapshot=False
       
  1341     ):
  1340         # can we use the cached delta?
  1342         # can we use the cached delta?
  1341         revlog = self.revlog
  1343         revlog = self.revlog
  1342         chainbase = revlog.chainbase(base)
  1344         chainbase = revlog.chainbase(base)
  1343         if revlog.delta_config.general_delta:
  1345         if revlog.delta_config.general_delta:
  1344             deltabase = base
  1346             deltabase = base
  1352                 raise error.ProgrammingError(msg)
  1354                 raise error.ProgrammingError(msg)
  1353             deltabase = chainbase
  1355             deltabase = chainbase
  1354         snapshotdepth = None
  1356         snapshotdepth = None
  1355         if revlog.delta_config.sparse_revlog and deltabase == nullrev:
  1357         if revlog.delta_config.sparse_revlog and deltabase == nullrev:
  1356             snapshotdepth = 0
  1358             snapshotdepth = 0
  1357         elif revlog.delta_config.sparse_revlog and revlog.issnapshot(deltabase):
  1359         elif revlog.delta_config.sparse_revlog and as_snapshot:
       
  1360             assert revlog.issnapshot(deltabase)
  1358             # A delta chain should always be one full snapshot,
  1361             # A delta chain should always be one full snapshot,
  1359             # zero or more semi-snapshots, and zero or more deltas
  1362             # zero or more semi-snapshots, and zero or more deltas
  1360             p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2)
  1363             p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2)
  1361             if deltabase not in (p1, p2) and revlog.issnapshot(deltabase):
  1364             if deltabase not in (p1, p2) and revlog.issnapshot(deltabase):
  1362                 snapshotdepth = len(revlog._deltachain(deltabase)[0])
  1365                 snapshotdepth = len(revlog._deltachain(deltabase)[0])
  1677                     delta_start = util.timer()
  1680                     delta_start = util.timer()
  1678                 candidatedelta = self._builddeltainfo(
  1681                 candidatedelta = self._builddeltainfo(
  1679                     revinfo,
  1682                     revinfo,
  1680                     candidaterev,
  1683                     candidaterev,
  1681                     target_rev=target_rev,
  1684                     target_rev=target_rev,
       
  1685                     as_snapshot=search.current_stage == _STAGE_SNAPSHOT,
  1682                 )
  1686                 )
  1683                 if self._debug_search:
  1687                 if self._debug_search:
  1684                     delta_end = util.timer()
  1688                     delta_end = util.timer()
  1685                     msg = b"DBG-DELTAS-SEARCH:     delta-search-time=%f\n"
  1689                     msg = b"DBG-DELTAS-SEARCH:     delta-search-time=%f\n"
  1686                     msg %= delta_end - delta_start
  1690                     msg %= delta_end - delta_start