Skip to content
Snippets Groups Projects
Commit bafa1c4bb7a8 authored by Boris Feld's avatar Boris Feld
Browse files

sparse-revlog: only refine delta candidates in the sparse case (issue6006)

Starting with 5aef5afa8654, a valid delta parent might be "refined". This
allows repository using sparse-revlog to produce better delta chain by using
better intermediate snapshot base.

However, this refining step was performed in all cases, including for
repository not using sparse-revlog. This could produce a strange chain in the
general delta case and corrupted repository in the non-general delta case.

We now skip this step unless sparse-revlog is in use.

In issue 6006, Yuya Nishihara provided a test case using an external
repository, so we did not include it. Finding "laboratory" condition to
reproduce this case and implementing an efficient test reproducing it is a bit
tricky. We do not foresee to have the time to provide one by the release date.

Differential Revision: https://phab.mercurial-scm.org/D5197
parent 588f1e9a4d16
No related merge requests found
......@@ -646,6 +646,11 @@
if good is not None:
break
# If sparse revlog is enabled, we can try to refine the available deltas
if not revlog._sparserevlog:
yield None
return
# if we have a refinable value, try to refine it
if good is not None and good not in (p1, p2) and revlog.issnapshot(good):
# refine snapshot down
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment