upgrade: move requirements checking in a dedicated function
This is a simple an isolated check that can go next to the associated code.
Differential Revision: https://phab.mercurial-scm.org/D9482
--- a/mercurial/upgrade.py Tue Dec 01 15:11:06 2020 +0100
+++ b/mercurial/upgrade.py Tue Dec 01 15:45:23 2020 +0100
@@ -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.
--- a/mercurial/upgrade_utils/actions.py Tue Dec 01 15:11:06 2020 +0100
+++ b/mercurial/upgrade_utils/actions.py Tue Dec 01 15:45:23 2020 +0100
@@ -9,6 +9,7 @@
from ..i18n import _
from .. import (
+ error,
localrepo,
requirements,
util,
@@ -664,3 +665,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)