From patchwork Tue Dec 1 22:11:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D9482: upgrade: move requirements checking in a dedicated function From: phabricator X-Patchwork-Id: 47764 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Tue, 1 Dec 2020 22:11:58 +0000 marmoute created this revision. Herald added a reviewer: hg-reviewers. Herald added a subscriber: mercurial-patches. REVISION SUMMARY This is a simple an isolated check that can go next to the associated code. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D9482 AFFECTED FILES mercurial/upgrade.py mercurial/upgrade_utils/actions.py CHANGE DETAILS To: marmoute, #hg-reviewers Cc: mercurial-patches, mercurial-devel 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 @@ -9,6 +9,7 @@ from ..i18n import _ from .. import ( + error, localrepo, requirements, util, @@ -642,3 +643,21 @@ # e.g. adding generaldelta could schedule parent redeltas. return newactions + + +def check_source_requirements(repo): + """Ensure that no existing requirements prevent the repository upgrade""" + + required = requiredsourcerequirements(repo) + missingreqs = required - repo.requirements + if missingreqs: + msg = _(b'cannot upgrade repository; requirement missing: %s') + missingreqs = b', '.join(sorted(missingreqs)) + raise error.Abort(msg % missingreqs) + + blocking = blocksourcerequirements(repo) + blockingreqs = blocking & repo.requirements + if blockingreqs: + m = _(b'cannot upgrade repository; unsupported source requirement: %s') + blockingreqs = b', '.join(sorted(blockingreqs)) + raise error.Abort(m % blockingreqs) diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py --- a/mercurial/upgrade.py +++ b/mercurial/upgrade.py @@ -72,26 +72,7 @@ revlogs.discard(upgrade) # Ensure the repository can be upgraded. - missingreqs = ( - upgrade_actions.requiredsourcerequirements(repo) - repo.requirements - ) - if missingreqs: - raise error.Abort( - _(b'cannot upgrade repository; requirement missing: %s') - % _(b', ').join(sorted(missingreqs)) - ) - - blockedreqs = ( - upgrade_actions.blocksourcerequirements(repo) & repo.requirements - ) - if blockedreqs: - raise error.Abort( - _( - b'cannot upgrade repository; unsupported source ' - b'requirement: %s' - ) - % _(b', ').join(sorted(blockedreqs)) - ) + upgrade_actions.check_source_requirements(repo) # FUTURE there is potentially a need to control the wanted requirements via # command arguments or via an extension hook point.