Mercurial > hg-stable
changeset 51342:2e169a222e63
delta-find: fix the computation of the `prev` value
The previous computation was "wrong" it always used the tiprev, even when computing a delta in a non-append case (mostly benchmark).
This never produced wrong delta on disk, but would misled debug or performance command. Since it does not have any actual user impact, I did not put this on stable.
With the code fixed we can now use revisions in some search and it makes the
test display more interesting behavior since the algorithm has more to work
with.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 23 Nov 2023 21:45:45 +0100 |
parents | 7455cae67260 |
children | 0d92d62ecde0 |
files | mercurial/revlogutils/deltas.py tests/test-sparse-revlog.t |
diffstat | 2 files changed, 122 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Fri Dec 22 01:33:40 2023 +0100 +++ b/mercurial/revlogutils/deltas.py Thu Nov 23 21:45:45 2023 +0100 @@ -863,8 +863,7 @@ assert self.revlog.delta_config.general_delta # also see issue6056 sparse = self.revlog.delta_config.sparse_revlog - curr = len(self.revlog) - prev = curr - 1 + prev = self.target_rev - 1 deltachain = lambda rev: self.revlog._deltachain(rev)[0] # exclude already lazy tested base if any
--- a/tests/test-sparse-revlog.t Fri Dec 22 01:33:40 2023 +0100 +++ b/tests/test-sparse-revlog.t Thu Nov 23 21:45:45 2023 +0100 @@ -164,7 +164,21 @@ 4971 4970 -1 3 5 4930 snap $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 DBG-DELTAS-SEARCH: SEARCH rev=4971 - DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #1 - 3 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4329 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=13781 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=173765 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=106516 (BAD) + DBG-DELTAS-SEARCH: CANDIDATE: rev=4335 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=14385 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=171587 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=105187 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4962 DBG-DELTAS-SEARCH: type=snapshot-4 DBG-DELTAS-SEARCH: size=18296 @@ -172,7 +186,14 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=30377 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=16872 (BAD) - DBG-DELTAS-SEARCH: ROUND #2 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #2 - 2 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4325 + DBG-DELTAS-SEARCH: type=snapshot-3 + DBG-DELTAS-SEARCH: size=17384 + DBG-DELTAS-SEARCH: base=4318 + DBG-DELTAS-SEARCH: uncompressed-delta-size=178121 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=109064 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4930 DBG-DELTAS-SEARCH: type=snapshot-3 DBG-DELTAS-SEARCH: size=39228 @@ -189,7 +210,7 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=82661 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=49132 (BAD) - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ cat << EOF >>.hg/hgrc > [storage] @@ -198,10 +219,24 @@ > EOF $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --quiet - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --source full DBG-DELTAS-SEARCH: SEARCH rev=4971 - DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #1 - 3 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4329 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=13781 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=173765 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=106516 (BAD) + DBG-DELTAS-SEARCH: CANDIDATE: rev=4335 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=14385 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=171587 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=105187 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4962 DBG-DELTAS-SEARCH: type=snapshot-4 DBG-DELTAS-SEARCH: size=18296 @@ -209,7 +244,14 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=30377 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=16872 (BAD) - DBG-DELTAS-SEARCH: ROUND #2 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #2 - 2 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4325 + DBG-DELTAS-SEARCH: type=snapshot-3 + DBG-DELTAS-SEARCH: size=17384 + DBG-DELTAS-SEARCH: base=4318 + DBG-DELTAS-SEARCH: uncompressed-delta-size=178121 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=109064 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4930 DBG-DELTAS-SEARCH: type=snapshot-3 DBG-DELTAS-SEARCH: size=39228 @@ -226,7 +268,7 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=82661 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=49132 (BAD) - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --source storage DBG-DELTAS-SEARCH: SEARCH rev=4971 DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - cached-delta @@ -240,7 +282,21 @@ DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=1 - search-rounds=1 try-count=1 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --source p1 DBG-DELTAS-SEARCH: SEARCH rev=4971 - DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #1 - 3 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4329 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=13781 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=173765 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=106516 (BAD) + DBG-DELTAS-SEARCH: CANDIDATE: rev=4335 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=14385 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=171587 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=105187 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4962 DBG-DELTAS-SEARCH: type=snapshot-4 DBG-DELTAS-SEARCH: size=18296 @@ -248,7 +304,14 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=30377 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=16872 (BAD) - DBG-DELTAS-SEARCH: ROUND #2 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #2 - 2 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4325 + DBG-DELTAS-SEARCH: type=snapshot-3 + DBG-DELTAS-SEARCH: size=17384 + DBG-DELTAS-SEARCH: base=4318 + DBG-DELTAS-SEARCH: uncompressed-delta-size=178121 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=109064 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4930 DBG-DELTAS-SEARCH: type=snapshot-3 DBG-DELTAS-SEARCH: size=39228 @@ -265,10 +328,24 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=82661 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=49132 (BAD) - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --source p2 DBG-DELTAS-SEARCH: SEARCH rev=4971 - DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #1 - 3 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4329 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=13781 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=173765 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=106516 (BAD) + DBG-DELTAS-SEARCH: CANDIDATE: rev=4335 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=14385 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=171587 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=105187 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4962 DBG-DELTAS-SEARCH: type=snapshot-4 DBG-DELTAS-SEARCH: size=18296 @@ -276,7 +353,14 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=30377 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=16872 (BAD) - DBG-DELTAS-SEARCH: ROUND #2 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #2 - 2 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4325 + DBG-DELTAS-SEARCH: type=snapshot-3 + DBG-DELTAS-SEARCH: size=17384 + DBG-DELTAS-SEARCH: base=4318 + DBG-DELTAS-SEARCH: uncompressed-delta-size=178121 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=109064 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4930 DBG-DELTAS-SEARCH: type=snapshot-3 DBG-DELTAS-SEARCH: size=39228 @@ -293,10 +377,24 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=82661 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=49132 (BAD) - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ hg debug-delta-find SPARSE-REVLOG-TEST-FILE 4971 --source prev DBG-DELTAS-SEARCH: SEARCH rev=4971 - DBG-DELTAS-SEARCH: ROUND #1 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #1 - 3 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4329 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=13781 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=173765 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=106516 (BAD) + DBG-DELTAS-SEARCH: CANDIDATE: rev=4335 + DBG-DELTAS-SEARCH: type=snapshot-4 + DBG-DELTAS-SEARCH: size=14385 + DBG-DELTAS-SEARCH: base=4325 + DBG-DELTAS-SEARCH: uncompressed-delta-size=171587 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=105187 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4962 DBG-DELTAS-SEARCH: type=snapshot-4 DBG-DELTAS-SEARCH: size=18296 @@ -304,7 +402,14 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=30377 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=16872 (BAD) - DBG-DELTAS-SEARCH: ROUND #2 - 1 candidates - search-down + DBG-DELTAS-SEARCH: ROUND #2 - 2 candidates - search-down + DBG-DELTAS-SEARCH: CANDIDATE: rev=4325 + DBG-DELTAS-SEARCH: type=snapshot-3 + DBG-DELTAS-SEARCH: size=17384 + DBG-DELTAS-SEARCH: base=4318 + DBG-DELTAS-SEARCH: uncompressed-delta-size=178121 + DBG-DELTAS-SEARCH: delta-search-time=* (glob) + DBG-DELTAS-SEARCH: DELTA: length=109064 (BAD) DBG-DELTAS-SEARCH: CANDIDATE: rev=4930 DBG-DELTAS-SEARCH: type=snapshot-3 DBG-DELTAS-SEARCH: size=39228 @@ -321,6 +426,6 @@ DBG-DELTAS-SEARCH: uncompressed-delta-size=82661 DBG-DELTAS-SEARCH: delta-search-time=* (glob) DBG-DELTAS-SEARCH: DELTA: length=49132 (BAD) - DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=3 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) + DBG-DELTAS: FILELOG:SPARSE-REVLOG-TEST-FILE: rev=4971: delta-base=4930 is-cached=0 - search-rounds=3 try-count=6 - delta-type=snapshot snap-depth=4 - p1-chain-length=15 p2-chain-length=-1 - duration=* (glob) $ cd ..