# HG changeset patch # User Pierre-Yves David # Date 1681920979 -7200 # Node ID 0232571255d3a9331136bd3c53b1964e82c79586 # Parent ca1522fe4ec8afcf10873de1da118489e86d2f2d delta-find: never do anything fancy when general delta is off Without general delta, the only option is to do a delta against the previous revision in the revlog, or to do a full snapshot. So no need to dive into the more complicated logic. This prevent Mercurial to misbehave when applying remote deltas when `pulled-delta-reuse-policy` was set to "try-base" or "forced" and would produce and store invalid deltas. We add an associated tests to make sure this scenario is covered by tests. There are more code to cleanup after this, but I what to keep the fixing patch simple. diff -r ca1522fe4ec8 -r 0232571255d3 mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py Wed Apr 19 16:59:03 2023 +0200 +++ b/mercurial/revlogutils/deltas.py Wed Apr 19 18:16:19 2023 +0200 @@ -687,6 +687,12 @@ if target_rev is None: target_rev = len(revlog) + if not revlog._generaldelta: + # before general delta, there is only one possible delta base + yield (target_rev - 1,) + yield None + return + if ( cachedelta is not None and nullrev == cachedelta[0] diff -r ca1522fe4ec8 -r 0232571255d3 tests/test-pullling-to-general-delta.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-pullling-to-general-delta.t Wed Apr 19 18:16:19 2023 +0200 @@ -0,0 +1,196 @@ +============================================================================ +Pulling from modern to a non-general delta target (and other related checks) +============================================================================ + +There is various issue that can arise when we update the code with modern +storage in mind while working on delta processing. So this file is meant for +various scenario that might break in the future or have break in the past. + +Setup +===== + +Create a modern server with an older clone + + $ cat << EOF >> $HGRCPATH + > [command-templates] + > log = "{desc} {tags}\n" + > EOF + + $ hg init server + + $ hg clone --quiet --pull server client --config format.usegeneraldelta=no + $ hg debugformat -R client | grep generaldelta + generaldelta: no + +Create some complexe history + + $ cd server + $ hg debugbuilddag -n '.+3:a$.+5:b/a:k$.+7:c/b:l$.+6:d/a:m