phase: introduce a dedicated requirement for the `archived` phase
See inline documentation for details.
--- a/mercurial/configitems.py Tue Aug 16 18:20:42 2022 +0200
+++ b/mercurial/configitems.py Tue Aug 16 19:04:23 2022 +0200
@@ -1431,6 +1431,23 @@
default=False,
experimental=True,
)
+# The interaction between the archived phase and obsolescence markers needs to
+# be sorted out before wider usage of this are to be considered.
+#
+# At the time this message is written, behavior when archiving obsolete
+# changeset differ significantly from stripping. As part of stripping, we also
+# remove the obsolescence marker associated to the stripped changesets,
+# revealing the precedecessors changesets when applicable. When archiving, we
+# don't touch the obsolescence markers, keeping everything hidden. This can
+# result in quite confusing situation for people combining exchanging draft
+# with the archived phases. As some markers needed by others may be skipped
+# during exchange.
+coreconfigitem(
+ b'format',
+ b'exp-archived-phase',
+ default=False,
+ experimental=True,
+)
coreconfigitem(
b'shelve',
b'store',
--- a/mercurial/localrepo.py Tue Aug 16 18:20:42 2022 +0200
+++ b/mercurial/localrepo.py Tue Aug 16 19:04:23 2022 +0200
@@ -1281,6 +1281,7 @@
"""
_basesupported = {
+ requirementsmod.ARCHIVED_PHASE_REQUIREMENT,
requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT,
requirementsmod.CHANGELOGV2_REQUIREMENT,
requirementsmod.COPIESSDC_REQUIREMENT,
@@ -3664,6 +3665,10 @@
if ui.configbool(b'format', b'internal-phase'):
requirements.add(requirementsmod.INTERNAL_PHASE_REQUIREMENT)
+ # experimental config: format.exp-archived-phase
+ if ui.configbool(b'format', b'exp-archived-phase'):
+ requirements.add(requirementsmod.ARCHIVED_PHASE_REQUIREMENT)
+
if createopts.get(b'narrowfiles'):
requirements.add(requirementsmod.NARROW_REQUIREMENT)
--- a/mercurial/phases.py Tue Aug 16 18:20:42 2022 +0200
+++ b/mercurial/phases.py Tue Aug 16 19:04:23 2022 +0200
@@ -181,7 +181,7 @@
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
+ return requirements.ARCHIVED_PHASE_REQUIREMENT in repo.requirements
def _readroots(repo, phasedefaults=None):
--- a/mercurial/requirements.py Tue Aug 16 18:20:42 2022 +0200
+++ b/mercurial/requirements.py Tue Aug 16 19:04:23 2022 +0200
@@ -31,6 +31,10 @@
# of stripping them
INTERNAL_PHASE_REQUIREMENT = b'internal-phase'
+# Enables the internal phase which is used to hide changesets instead
+# of stripping them
+ARCHIVED_PHASE_REQUIREMENT = b'exp-archived-phase'
+
# Stores manifest in Tree structure
TREEMANIFEST_REQUIREMENT = b'treemanifest'
@@ -107,6 +111,7 @@
#
# note: the list is currently inherited from previous code and miss some relevant requirement while containing some irrelevant ones.
STREAM_FIXED_REQUIREMENTS = {
+ ARCHIVED_PHASE_REQUIREMENT,
BOOKMARKS_IN_STORE_REQUIREMENT,
CHANGELOGV2_REQUIREMENT,
COPIESSDC_REQUIREMENT,
--- a/tests/test-phase-archived.t Tue Aug 16 18:20:42 2022 +0200
+++ b/tests/test-phase-archived.t Tue Aug 16 19:04:23 2022 +0200
@@ -4,7 +4,7 @@
$ cat << EOF >> $HGRCPATH
> [format]
- > internal-phase=yes
+ > exp-archived-phase=yes
> [extensions]
> strip=
> [experimental]
--- a/tests/test-phases.t Tue Aug 16 18:20:42 2022 +0200
+++ b/tests/test-phases.t Tue Aug 16 19:04:23 2022 +0200
@@ -951,21 +951,28 @@
Commit an archived changesets
+ $ cd ..
+ $ hg clone --quiet --pull internal-phase archived-phase \
+ > --config format.exp-archived-phase=yes \
+ > --config extensions.phasereport='!' \
+ > --config hooks.txnclose-phase.test=
+
+ $ cd archived-phase
+
$ echo B > B
$ hg add B
$ hg status
A B
$ hg --config "phases.new-commit=archived" commit -m "my test archived commit"
- test-debug-phase: new rev 2: x -> 32
+ test-debug-phase: new rev 1: x -> 32
test-hook-close-phase: 8df5997c3361518f733d1ae67cd3adb9b0eaf125: -> archived
The changeset is a working parent descendant.
Per the usual visibility rules, it is made visible.
$ hg log -G -l 3
- @ changeset: 2:8df5997c3361
+ @ changeset: 1:8df5997c3361
| tag: tip
- | parent: 0:4a2df7238c3b
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: my test archived commit