Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/deltas.py @ 51347:670e68729aa7
delta-find: stop using heuristic to determine if we are creating a snapshot
This avoid assuming a changeset is a snapshot when it is actually something
simpler.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 07 Jan 2024 03:13:36 +0100 |
parents | cc806f20d756 |
children | bbbfa00d1e67 |
comparison
equal
deleted
inserted
replaced
51346:cc806f20d756 | 51347: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 |