Mercurial > hg
changeset 49377:7fe86498e84f stable
repo-upgrade: avoid a crash when multiple optimisation are specified
In Python 3, the type are no longer comparable and this expose the error.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 05 Jul 2022 17:53:26 +0200 |
parents | 6b04f702c501 |
children | 094a5fa3cf52 |
files | mercurial/upgrade_utils/actions.py tests/test-upgrade-repo.t |
diffstat | 2 files changed, 20 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/upgrade_utils/actions.py Wed May 25 18:29:21 2022 +0200 +++ b/mercurial/upgrade_utils/actions.py Tue Jul 05 17:53:26 2022 +0200 @@ -683,7 +683,11 @@ newactions.append(d) - newactions.extend(o for o in sorted(optimizations) if o not in newactions) + newactions.extend( + o + for o in sorted(optimizations, key=(lambda x: x.name)) + if o not in newactions + ) # FUTURE consider adding some optimizations here for certain transitions. # e.g. adding generaldelta could schedule parent redeltas.
--- a/tests/test-upgrade-repo.t Wed May 25 18:29:21 2022 +0200 +++ b/tests/test-upgrade-repo.t Tue Jul 05 17:53:26 2022 +0200 @@ -467,6 +467,7 @@ re-delta-fulladd every revision will be re-added as if it was new content. It will go through the full storage mechanism giving extensions a chance to process it (eg. lfs). This is similar to "re-delta-all" but even slower since more logic is involved. + $ hg debugupgrade --optimize re-delta-parent --quiet requirements preserved: dotencode, fncache, generaldelta, revlogv1, share-safe, sparserevlog, store (no-rust !) @@ -480,6 +481,20 @@ - manifest +passing multiple optimization: + + $ hg debugupgrade --optimize re-delta-parent --optimize re-delta-multibase --quiet + requirements + preserved: * (glob) + + optimisations: re-delta-multibase, re-delta-parent + + processed revlogs: + - all-filelogs + - changelog + - manifest + + unknown optimization: $ hg debugupgrade --optimize foobar