diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py --- a/mercurial/upgrade.py +++ b/mercurial/upgrade.py @@ -85,13 +85,7 @@ format_upgrades = upgrade_actions.find_format_upgrades(repo) actions = upgrade_actions.determineactions( - repo, format_upgrades, repo.requirements, newreqs - ) - actions.extend( - o - for o in sorted(optimizations) - # determineactions could have added optimisation - if o not in actions + repo, format_upgrades, optimizations, repo.requirements, newreqs ) removedreqs = repo.requirements - newreqs diff --git a/mercurial/upgrade_utils/actions.py b/mercurial/upgrade_utils/actions.py --- a/mercurial/upgrade_utils/actions.py +++ b/mercurial/upgrade_utils/actions.py @@ -526,7 +526,9 @@ return list(ALL_OPTIMISATIONS) -def determineactions(repo, format_upgrades, sourcereqs, destreqs): +def determineactions( + repo, format_upgrades, optimizations, sourcereqs, destreqs +): """Determine upgrade actions that will be performed. Given a list of improvements as returned by ``find_format_upgrades`` and @@ -551,6 +553,8 @@ newactions.append(d) + newactions.extend(o for o in sorted(optimizations) if o not in newactions) + # FUTURE consider adding some optimizations here for certain transitions. # e.g. adding generaldelta could schedule parent redeltas.