phase: introduce a dedicated function to check for the archived phase
The internal-phase is "ready to use" since its introduce. However, some
question remains around the `archived` phase. So it seem safer to move them to
separated configuration and requirements. This changeset is a first of a small
series doing this.
--- a/mercurial/phases.py Wed Apr 20 19:24:39 2022 +0200
+++ b/mercurial/phases.py Tue Aug 16 18:20:42 2022 +0200
@@ -178,6 +178,12 @@
return requirements.INTERNAL_PHASE_REQUIREMENT in repo.requirements
+def supportarchived(repo):
+ # type: (localrepo.localrepository) -> bool
+ """True if the archived phase can be used on a repository"""
+ return requirements.INTERNAL_PHASE_REQUIREMENT in repo.requirements
+
+
def _readroots(repo, phasedefaults=None):
# type: (localrepo.localrepository, Optional[Phasedefaults]) -> Tuple[Phaseroots, bool]
"""Read phase roots from disk
@@ -642,7 +648,12 @@
# phaseroots values, replace them.
if revs is None:
revs = []
- if targetphase in (archived, internal) and not supportinternal(repo):
+ if (
+ targetphase == internal
+ and not supportinternal(repo)
+ or targetphase == archived
+ and not supportarchived(repo)
+ ):
name = phasenames[targetphase]
msg = b'this repository does not support the %s phase' % name
raise error.ProgrammingError(msg)
--- a/mercurial/scmutil.py Wed Apr 20 19:24:39 2022 +0200
+++ b/mercurial/scmutil.py Tue Aug 16 18:20:42 2022 +0200
@@ -1191,7 +1191,7 @@
obsolete.createmarkers(
repo, rels, operation=operation, metadata=metadata
)
- elif phases.supportinternal(repo) and mayusearchived:
+ elif phases.supportarchived(repo) and mayusearchived:
# this assume we do not have "unstable" nodes above the cleaned ones
allreplaced = set()
for ns in replacements.keys():