# HG changeset patch
# User Pierre-Yves David <pierre-yves.david@octobus.net>
# Date 1731947130 -3600
#      Mon Nov 18 17:25:30 2024 +0100
# Node ID 8dede0df9de97c003e13ee2e007a45678f5c8b6b
# Parent  57a4adbef74d27108e0cdaa25d80cba58b312536
format: add pattern filtering to debugformat

The number of format to consider increase, this will make the command simpler to
use in tests and debug.

See test changes for some direct benefits.

diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
--- a/mercurial/debugcommands.py
+++ b/mercurial/debugcommands.py
@@ -1625,12 +1625,20 @@
     )
 
 
-@command(b'debugformat', [] + cmdutil.formatteropts)
-def debugformat(ui, repo, **opts):
+@command(
+    b'debugformat',
+    [] + cmdutil.formatteropts,
+    b'[PATTERN] ... [PATTERN]',
+)
+def debugformat(ui, repo, *patterns, **opts):
     """display format information about the current repository
 
     Use --verbose to get extra information about current config value and
-    Mercurial default."""
+    Mercurial default.
+
+    If patterns are specified, only format matching at least one of these
+    pattern will be displayed.
+    """
     maxvariantlength = max(len(fv.name) for fv in upgrade.allformatvariant)
     maxvariantlength = max(len(b'format-variant'), maxvariantlength)
 
@@ -1658,6 +1666,14 @@
         fm.plain(b' config default')
     fm.plain(b'\n')
     for fv in upgrade.allformatvariant:
+        if patterns:
+            for p in patterns:
+                # XXX support "re:" at some point
+                if p in fv.name:
+                    break
+            else:
+                # no pattern matches, continue
+                continue
         fm.startitem()
         repovalue = fv.fromrepo(repo)
         configvalue = fv.fromconfig(repo)
diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t
--- a/tests/test-copies-chain-merge.t
+++ b/tests/test-copies-chain-merge.t
@@ -1649,7 +1649,8 @@
   > [format]
   > exp-use-copies-side-data-changeset = yes
   > EOF
-  $ hg debugformat -v | grep -E 'changelog-v2|revlog-v2|copies-sdc'
+  $ hg debugformat -v changelog-v2 revlog-v2 copies-sdc
+  format-variant     repo config default
   copies-sdc:          no    yes      no
   revlog-v2:           no     no      no
   changelog-v2:        no    yes      no
@@ -1675,7 +1676,8 @@
   > enabled=yes
   > numcpus=8
   > EOF
-  $ hg debugformat -v  | grep -E 'changelog-v2|revlog-v2|copies-sdc'
+  $ hg debugformat -v changelog-v2 revlog-v2 copies-sdc
+  format-variant     repo config default
   copies-sdc:          no    yes      no
   revlog-v2:           no     no      no
   changelog-v2:        no    yes      no
diff --git a/tests/test-copies-in-changeset.t b/tests/test-copies-in-changeset.t
--- a/tests/test-copies-in-changeset.t
+++ b/tests/test-copies-in-changeset.t
@@ -32,13 +32,13 @@
   $ hg init repo
   $ cd repo
 #if sidedata
-  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
+  $ hg debugformat -v format-variant revlog-v2 copies-sdc changelog-v2
   format-variant     repo config default
   copies-sdc:         yes    yes      no
   revlog-v2:           no     no      no
   changelog-v2:       yes    yes      no
 #else
-  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
+  $ hg debugformat -v format-variant revlog-v2 copies-sdc changelog-v2
   format-variant     repo config default
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
@@ -419,7 +419,7 @@
 
 downgrading
 
-  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
+  $ hg debugformat -v format-variant revlog-v2 copies-sdc changelog-v2
   format-variant     repo config default
   copies-sdc:         yes    yes      no
   revlog-v2:           no     no      no
@@ -445,7 +445,7 @@
   processed revlogs:
     - changelog
   
-  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
+  $ hg debugformat -v format-variant revlog-v2 copies-sdc changelog-v2
   format-variant     repo config default
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
@@ -470,7 +470,7 @@
   processed revlogs:
     - changelog
   
-  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
+  $ hg debugformat -v format-variant revlog-v2 copies-sdc changelog-v2
   format-variant     repo config default
   copies-sdc:         yes    yes      no
   revlog-v2:           no     no      no
diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t
--- a/tests/test-persistent-nodemap.t
+++ b/tests/test-persistent-nodemap.t
@@ -615,10 +615,12 @@
   $ hg share race-repo ./other-wc --config format.use-share-safe=yes
   updating working directory
   5001 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg debugformat -R ./race-repo | grep -E 'share-safe|persistent-nodemap'
+  $ hg debugformat -R ./race-repo share-safe persistent-nodemap
+  format-variant     repo
   share-safe:         yes
   persistent-nodemap: yes
-  $ hg debugformat -R ./other-wc/ | grep -E 'share-safe|persistent-nodemap'
+  $ hg debugformat -R ./other-wc/ share-safe persistent-nodemap
+  format-variant     repo
   share-safe:         yes
   persistent-nodemap: yes
   $ hg -R ./other-wc update 'min(head())'
diff --git a/tests/test-pullling-to-general-delta.t b/tests/test-pullling-to-general-delta.t
--- a/tests/test-pullling-to-general-delta.t
+++ b/tests/test-pullling-to-general-delta.t
@@ -19,7 +19,8 @@
   $ hg init server
 
   $ hg clone --quiet --pull server client --config format.usegeneraldelta=no
-  $ hg debugformat -R client | grep generaldelta
+  $ hg debugformat -R client generaldelta
+  format-variant     repo
   generaldelta:        no
 
 Create some complexe history
diff --git a/tests/test-revlog-delta-find.t b/tests/test-revlog-delta-find.t
--- a/tests/test-revlog-delta-find.t
+++ b/tests/test-revlog-delta-find.t
@@ -334,7 +334,8 @@
   >    --config format.usegeneraldelta=no \
   >    --config format.sparse-revlog=no \
   >    local-forced-full-p1-no-gd
-  $ hg debugformat -R local-forced-full-p1-no-gd | grep generaldelta
+  $ hg debugformat -R local-forced-full-p1-no-gd generaldelta
+  format-variant     repo
   generaldelta:        no
   $ hg -R local-forced-full-p1-no-gd pull --quiet local-pre-pull-full \
   >    --config debug.revlog.debug-delta=no
diff --git a/tests/test-share-safe.t b/tests/test-share-safe.t
--- a/tests/test-share-safe.t
+++ b/tests/test-share-safe.t
@@ -631,7 +631,8 @@
   $ hg debugbuilddag -R auto-upgrade --new-file .+5
   $ hg -R auto-upgrade update
   6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg debugformat -R auto-upgrade | grep share-safe
+  $ hg debugformat -R auto-upgrade share-safe
+  format-variant     repo
   share-safe:          no
 
 upgrade it to share-safe automatically
@@ -641,7 +642,8 @@
   >     --config format.use-share-safe=yes
   automatically upgrading repository to the `share-safe` feature
   (see `hg help config.format.use-share-safe` for details)
-  $ hg debugformat -R auto-upgrade | grep share-safe
+  $ hg debugformat -R auto-upgrade share-safe
+  format-variant     repo
   share-safe:         yes
 
 downgrade it from share-safe automatically
@@ -651,5 +653,6 @@
   >     --config format.use-share-safe=no
   automatically downgrading repository from the `share-safe` feature
   (see `hg help config.format.use-share-safe` for details)
-  $ hg debugformat -R auto-upgrade | grep share-safe
+  $ hg debugformat -R auto-upgrade share-safe
+  format-variant     repo
   share-safe:          no
diff --git a/tests/test-share.t b/tests/test-share.t
--- a/tests/test-share.t
+++ b/tests/test-share.t
@@ -295,11 +295,13 @@
 #endif
 
   $ hg init repo-safe-d1 --config format.use-share-safe=yes --config format.exp-rc-dirstate-v2=no
-  $ hg debugformat -R repo-safe-d1 | grep dirstate-v2
+  $ hg debugformat -R repo-safe-d1 dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
 
   $ hg share repo-safe-d1 share-safe-d2 --config format.use-share-safe=yes --config format.exp-rc-dirstate-v2=yes
   updating working directory
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg debugformat  -R share-safe-d2 | grep dirstate-v2
+  $ hg debugformat  -R share-safe-d2 dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
diff --git a/tests/test-sidedata.t b/tests/test-sidedata.t
--- a/tests/test-sidedata.t
+++ b/tests/test-sidedata.t
@@ -61,10 +61,12 @@
 -------------------------------------
 
   $ hg init up-no-side-data --config experimental.revlogv2=no
-  $ hg debugformat -v -R up-no-side-data | grep -E 'changelog-v2|revlog-v2'
+  $ hg debugformat -v -R up-no-side-data changelog-v2 revlog-v2
+  format-variant     repo config default
   revlog-v2:           no     no      no
   changelog-v2:        no     no      no
-  $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | grep -E 'changelog-v2|revlog-v2'
+  $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data changelog-v2 revlog-v2
+  format-variant     repo config default
   revlog-v2:           no    yes      no
   changelog-v2:        no     no      no
   $ hg debugupgraderepo -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data > /dev/null
@@ -73,10 +75,12 @@
 -----------------------------------------
 
   $ hg init up-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data
-  $ hg debugformat -v -R up-side-data | grep -E 'changelog-v2|revlog-v2'
+  $ hg debugformat -v -R up-side-data changelog-v2 revlog-v2
+  format-variant     repo config default
   revlog-v2:          yes     no      no
   changelog-v2:        no     no      no
-  $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | grep -E 'changelog-v2|revlog-v2'
+  $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no changelog-v2 revlog-v2
+  format-variant     repo config default
   revlog-v2:          yes     no      no
   changelog-v2:        no     no      no
   $ hg debugupgraderepo -R up-side-data --config experimental.revlogv2=no > /dev/null
diff --git a/tests/test-status-tracked-key.t b/tests/test-status-tracked-key.t
--- a/tests/test-status-tracked-key.t
+++ b/tests/test-status-tracked-key.t
@@ -211,7 +211,8 @@
   $ hg debugbuilddag -R auto-upgrade --new-file .+5
   $ hg -R auto-upgrade update
   6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg debugformat -R auto-upgrade | grep tracked
+  $ hg debugformat -R auto-upgrade tracked-hint
+  format-variant     repo
   tracked-hint:        no
 
 upgrade it to dirstate-tracked-hint automatically
@@ -221,7 +222,8 @@
   > --config format.use-dirstate-tracked-hint=yes
   automatically upgrading repository to the `tracked-hint` feature
   (see `hg help config.format.use-dirstate-tracked-hint` for details)
-  $ hg debugformat -R auto-upgrade | grep tracked
+  $ hg debugformat -R auto-upgrade tracked-hint
+  format-variant     repo
   tracked-hint:       yes
 
 rhg supports this feature
@@ -236,5 +238,6 @@
   > --config format.use-dirstate-tracked-hint=no
   automatically downgrading repository from the `tracked-hint` feature
   (see `hg help config.format.use-dirstate-tracked-hint` for details)
-  $ hg debugformat -R auto-upgrade | grep tracked
+  $ hg debugformat -R auto-upgrade tracked
+  format-variant     repo
   tracked-hint:        no
diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t
--- a/tests/test-upgrade-repo.t
+++ b/tests/test-upgrade-repo.t
@@ -61,9 +61,11 @@
   
   no revlogs to process
   
-  $ hg debugformat -R share-child | grep dirstate-v2
+  $ hg debugformat -R share-child dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
-  $ hg debugformat -R share-parent | grep dirstate-v2
+  $ hg debugformat -R share-parent dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
   $ hg status --all -R share-child
   C nf0
@@ -131,9 +133,11 @@
   
   no revlogs to process
   
-  $ hg debugformat -R share-child | grep dirstate-v2
+  $ hg debugformat -R share-child dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
-  $ hg debugformat -R share-parent | grep dirstate-v2
+  $ hg debugformat -R share-parent dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
   $ hg status --all -R share-child
   C nf0
@@ -1869,7 +1873,8 @@
 
 Upgrade to dirstate-v2
 
-  $ hg debugformat -v --config format.use-dirstate-v2=1 | grep dirstate-v2
+  $ hg debugformat -v --config format.use-dirstate-v2=1 dirstate-v2
+  format-variant     repo config default
   dirstate-v2:         no    yes      no
   $ hg debugupgraderepo --config format.use-dirstate-v2=1 --run
   upgrade will perform the following actions:
@@ -1892,7 +1897,8 @@
   removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
   $ ls .hg/upgradebackup.*/dirstate
   .hg/upgradebackup.*/dirstate (glob)
-  $ hg debugformat -v | grep dirstate-v2
+  $ hg debugformat -v dirstate-v2
+  format-variant     repo config default
   dirstate-v2:        yes     no      no
   $ hg status
   $ dd bs=12 count=1 if=.hg/dirstate 2> /dev/null
@@ -1916,7 +1922,8 @@
   downgrading from dirstate-v2 to v1
   replaced files will be backed up at $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
   removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
-  $ hg debugformat -v | grep dirstate-v2
+  $ hg debugformat -v dirstate-v2
+  format-variant     repo config default
   dirstate-v2:         no     no      no
   $ hg status
 
@@ -1927,7 +1934,8 @@
 
   $ hg init --config format.use-dirstate-v2=no dirstate-v2-empty
   $ cd dirstate-v2-empty
-  $ hg debugformat | grep dirstate-v2
+  $ hg debugformat dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
 
 upgrade
@@ -1951,7 +1959,8 @@
   upgrading to dirstate-v2 from v1
   replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
   removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
-  $ hg debugformat | grep dirstate-v2
+  $ hg debugformat dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
 
 downgrade
@@ -1972,7 +1981,8 @@
   downgrading from dirstate-v2 to v1
   replaced files will be backed up at $TESTTMP/dirstate-v2-empty/.hg/upgradebackup.* (glob)
   removing temporary repository $TESTTMP/dirstate-v2-empty/.hg/upgrade.* (glob)
-  $ hg debugformat | grep dirstate-v2
+  $ hg debugformat dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
 
   $ cd ..
@@ -1993,7 +2003,8 @@
   $ hg debugbuilddag -R auto-upgrade --new-file .+5
   $ hg -R auto-upgrade update
   6 files updated, 0 files merged, 0 files removed, 0 files unresolved
-  $ hg debugformat -R auto-upgrade | grep dirstate-v2
+  $ hg debugformat -R auto-upgrade dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
 
 upgrade it to dirstate-v2 automatically
@@ -2003,7 +2014,8 @@
   >     --config format.use-dirstate-v2=yes
   automatically upgrading repository to the `dirstate-v2` feature
   (see `hg help config.format.use-dirstate-v2` for details)
-  $ hg debugformat -R auto-upgrade | grep dirstate-v2
+  $ hg debugformat -R auto-upgrade dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
 
 downgrade it from dirstate-v2 automatically
@@ -2013,14 +2025,16 @@
   >     --config format.use-dirstate-v2=no
   automatically downgrading repository from the `dirstate-v2` feature
   (see `hg help config.format.use-dirstate-v2` for details)
-  $ hg debugformat -R auto-upgrade | grep dirstate-v2
+  $ hg debugformat -R auto-upgrade dirstate-v2
+  format-variant     repo
   dirstate-v2:         no
 
 
 For multiple change at the same time
 ------------------------------------
 
-  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
+  $ hg debugformat -R auto-upgrade dirstate-v2 tracked share-safe
+  format-variant     repo
   dirstate-v2:         no
   tracked-hint:       yes
   share-safe:          no
@@ -2038,7 +2052,8 @@
   (see `hg help config.format.use-share-safe` for details)
   automatically downgrading repository from the `tracked-hint` feature
   (see `hg help config.format.use-dirstate-tracked-hint` for details)
-  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
+  $ hg debugformat -R auto-upgrade dirstate-v2 tracked share-safe
+  format-variant     repo
   dirstate-v2:        yes
   tracked-hint:        no
   share-safe:         yes
@@ -2047,7 +2062,8 @@
 ---------------------------
 
 
-  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
+  $ hg debugformat -R auto-upgrade dirstate-v2 tracked share-safe
+  format-variant     repo
   dirstate-v2:        yes
   tracked-hint:        no
   share-safe:         yes
@@ -2062,7 +2078,8 @@
   >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
   >     --config format.use-share-safe=no
 
-  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
+  $ hg debugformat -R auto-upgrade dirstate-v2 tracked share-safe
+  format-variant     repo
   dirstate-v2:         no
   tracked-hint:       yes
   share-safe:          no
@@ -2077,7 +2094,8 @@
   >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories=yes \
   >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
   >     --config format.use-share-safe=yes
-  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
+  $ hg debugformat -R auto-upgrade dirstate-v2 tracked share-safe
+  format-variant     repo
   dirstate-v2:        yes
   tracked-hint:        no
   share-safe:         yes
@@ -2092,7 +2110,8 @@
   $ hg status -R auto-upgrade \
   >     --config format.use-dirstate-v2.automatic-upgrade-of-mismatching-repositories=yes \
   >     --config format.use-dirstate-v2=no
-  $ hg debugformat -R auto-upgrade | grep dirstate-v2
+  $ hg debugformat -R auto-upgrade dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
 
   $ chmod -R u+w auto-upgrade
@@ -2107,7 +2126,8 @@
   $ hg status -R auto-upgrade \
   >     --config format.use-dirstate-v2.automatic-upgrade-of-mismatching-repositories=yes \
   >     --config format.use-dirstate-v2=no
-  $ hg debugformat -R auto-upgrade | grep dirstate-v2
+  $ hg debugformat -R auto-upgrade dirstate-v2
+  format-variant     repo
   dirstate-v2:        yes
 
   $ killdaemons.py