changeset 46884:cc3ad5c3af3b

persistent-nodemap: enable the feature by default when using Rust As discussed at the 5.6 sprint, we can make it enabled by default, but only for Rust installation. Differential Revision: https://phab.mercurial-scm.org/D9765
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 14 Jan 2021 04:58:20 +0100
parents df76da69f5b1
children fc8a5c9ecee0
files mercurial/configitems.py mercurial/helptext/config.txt tests/test-bundle.t tests/test-clone-uncompressed.t tests/test-clonebundles.t tests/test-copies-chain-merge.t tests/test-copies-in-changeset.t tests/test-debugcommands.t tests/test-hgweb-commands.t tests/test-init.t tests/test-lfconvert.t tests/test-lfs-largefiles.t tests/test-narrow-clone-no-ellipsis.t tests/test-narrow-clone-stream.t tests/test-narrow-clone.t tests/test-narrow-sparse.t tests/test-persistent-nodemap.t tests/test-phases.t tests/test-remotefilelog-clone-tree.t tests/test-remotefilelog-clone.t tests/test-remotefilelog-log.t tests/test-repo-compengines.t tests/test-requires.t tests/test-revlog-v2.t tests/test-rhg.t tests/test-sidedata.t tests/test-sparse-requirement.t tests/test-sqlitestore.t tests/test-ssh-bundle1.t tests/test-ssh.t tests/test-stream-bundle-v2.t tests/test-treemanifest.t tests/test-upgrade-repo.t
diffstat 33 files changed, 267 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/configitems.py	Fri Apr 09 03:36:24 2021 +0200
+++ b/mercurial/configitems.py	Thu Jan 14 04:58:20 2021 +0100
@@ -1325,10 +1325,22 @@
     b'usestore',
     default=True,
 )
+
+
+def _persistent_nodemap_default():
+    """compute `use-persistent-nodemap` default value
+
+    The feature is disabled unless a fast implementation is available.
+    """
+    from . import policy
+
+    return policy.importrust('revlog') is not None
+
+
 coreconfigitem(
     b'format',
     b'use-persistent-nodemap',
-    default=False,
+    default=_persistent_nodemap_default,
 )
 # TODO needs to grow a docket file to at least store the last offset of the data
 # file when rewriting sidedata.
--- a/mercurial/helptext/config.txt	Fri Apr 09 03:36:24 2021 +0200
+++ b/mercurial/helptext/config.txt	Thu Jan 14 04:58:20 2021 +0100
@@ -910,7 +910,8 @@
 
     Repository with this on-disk format require Mercurial version 5.4 or above.
 
-    Disabled by default.
+    By default this format variant is disabled if fast implementation is not
+    available and enabled by default if the fast implementation is available.
 
 ``use-share-safe``
     Enforce "safe" behaviors for all "shares" that access this repository.
--- a/tests/test-bundle.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-bundle.t	Thu Jan 14 04:58:20 2021 +0100
@@ -297,19 +297,27 @@
   $ hg -R test debugcreatestreamclonebundle packed.hg
   writing 2664 bytes for 6 files (no-zstd !)
   writing 2665 bytes for 6 files (zstd !)
-  bundle requirements: generaldelta, revlogv1, sparserevlog
+  bundle requirements: generaldelta, revlogv1, sparserevlog (no-rust !)
+  bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog (rust !)
 
   $ f -B 64 --size --sha1 --hexdump packed.hg
   packed.hg: size=2840, sha1=12bf3eee3eb8a04c503ce2d29b48f0135c7edff5 (no-zstd !)
-  packed.hg: size=2841, sha1=8b645a65f49b0ae43042a9f3da56d4bfdf1c7f99 (zstd !)
+  packed.hg: size=2841, sha1=8b645a65f49b0ae43042a9f3da56d4bfdf1c7f99 (zstd no-rust !)
+  packed.hg: size=2860, sha1=81d7a2e535892cda51e82c200f818de2cca828d3 (rust !)
   0000: 48 47 53 31 55 4e 00 00 00 00 00 00 00 06 00 00 |HGS1UN..........|
   0010: 00 00 00 00 0a 68 00 23 67 65 6e 65 72 61 6c 64 |.....h.#generald| (no-zstd !)
-  0010: 00 00 00 00 0a 69 00 23 67 65 6e 65 72 61 6c 64 |.....i.#generald| (zstd !)
-  0020: 65 6c 74 61 2c 72 65 76 6c 6f 67 76 31 2c 73 70 |elta,revlogv1,sp|
-  0030: 61 72 73 65 72 65 76 6c 6f 67 00 64 61 74 61 2f |arserevlog.data/|
+  0020: 65 6c 74 61 2c 72 65 76 6c 6f 67 76 31 2c 73 70 |elta,revlogv1,sp| (no-zstd !)
+  0030: 61 72 73 65 72 65 76 6c 6f 67 00 64 61 74 61 2f |arserevlog.data/| (no-zstd !)
+  0010: 00 00 00 00 0a 69 00 23 67 65 6e 65 72 61 6c 64 |.....i.#generald| (zstd no-rust !)
+  0020: 65 6c 74 61 2c 72 65 76 6c 6f 67 76 31 2c 73 70 |elta,revlogv1,sp| (zstd no-rust !)
+  0030: 61 72 73 65 72 65 76 6c 6f 67 00 64 61 74 61 2f |arserevlog.data/| (zstd no-rust !)
+  0010: 00 00 00 00 0a 69 00 36 67 65 6e 65 72 61 6c 64 |.....i.6generald| (rust !)
+  0020: 65 6c 74 61 2c 70 65 72 73 69 73 74 65 6e 74 2d |elta,persistent-| (rust !)
+  0030: 6e 6f 64 65 6d 61 70 2c 72 65 76 6c 6f 67 76 31 |nodemap,revlogv1| (rust !)
 
   $ hg debugbundle --spec packed.hg
-  none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog
+  none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog (no-rust !)
+  none-packed1;requirements%3Dgeneraldelta%2Cpersistent-nodemap%2Crevlogv1%2Csparserevlog (rust !)
 
 generaldelta requirement is not listed in stream clone bundles unless used
 
@@ -320,17 +328,23 @@
   $ cd ..
   $ hg -R testnongd debugcreatestreamclonebundle packednongd.hg
   writing 301 bytes for 3 files
-  bundle requirements: revlogv1
+  bundle requirements: revlogv1 (no-rust !)
+  bundle requirements: persistent-nodemap, revlogv1 (rust !)
 
   $ f -B 64 --size --sha1 --hexdump packednongd.hg
-  packednongd.hg: size=383, sha1=1d9c230238edd5d38907100b729ba72b1831fe6f
+  packednongd.hg: size=383, sha1=1d9c230238edd5d38907100b729ba72b1831fe6f (no-rust !)
+  packednongd.hg: size=402, sha1=d3cc1417f0e8142cf9340aaaa520b660ad3ec3ea (rust !)
   0000: 48 47 53 31 55 4e 00 00 00 00 00 00 00 03 00 00 |HGS1UN..........|
-  0010: 00 00 00 00 01 2d 00 09 72 65 76 6c 6f 67 76 31 |.....-..revlogv1|
-  0020: 00 64 61 74 61 2f 66 6f 6f 2e 69 00 36 34 0a 00 |.data/foo.i.64..|
-  0030: 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
+  0010: 00 00 00 00 01 2d 00 09 72 65 76 6c 6f 67 76 31 |.....-..revlogv1| (no-rust !)
+  0020: 00 64 61 74 61 2f 66 6f 6f 2e 69 00 36 34 0a 00 |.data/foo.i.64..| (no-rust !)
+  0030: 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| (no-rust !)
+  0010: 00 00 00 00 01 2d 00 1c 70 65 72 73 69 73 74 65 |.....-..persiste| (rust !)
+  0020: 6e 74 2d 6e 6f 64 65 6d 61 70 2c 72 65 76 6c 6f |nt-nodemap,revlo| (rust !)
+  0030: 67 76 31 00 64 61 74 61 2f 66 6f 6f 2e 69 00 36 |gv1.data/foo.i.6| (rust !)
 
   $ hg debugbundle --spec packednongd.hg
-  none-packed1;requirements%3Drevlogv1
+  none-packed1;requirements%3Drevlogv1 (no-rust !)
+  none-packed1;requirements%3Dpersistent-nodemap%2Crevlogv1 (rust !)
 
 Warning emitted when packed bundles contain secret changesets
 
@@ -344,7 +358,8 @@
   $ hg -R testsecret debugcreatestreamclonebundle packedsecret.hg
   (warning: stream clone bundle will contain secret revisions)
   writing 301 bytes for 3 files
-  bundle requirements: generaldelta, revlogv1, sparserevlog
+  bundle requirements: generaldelta, revlogv1, sparserevlog (no-rust !)
+  bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog (rust !)
 
 Unpacking packed1 bundles with "hg unbundle" isn't allowed
 
--- a/tests/test-clone-uncompressed.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-clone-uncompressed.t	Thu Jan 14 04:58:20 2021 +0100
@@ -216,13 +216,16 @@
 
   $ f --size --hex --bytes 256 body
   body: size=112262 (no-zstd !)
-  body: size=109410 (zstd !)
+  body: size=109410 (zstd no-rust !)
+  body: size=109431 (rust !)
   0000: 04 6e 6f 6e 65 48 47 32 30 00 00 00 00 00 00 00 |.noneHG20.......|
   0010: 7f 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |..STREAM2.......| (no-zstd !)
   0020: 05 09 04 0c 44 62 79 74 65 63 6f 75 6e 74 39 38 |....Dbytecount98| (no-zstd !)
   0030: 37 37 35 66 69 6c 65 63 6f 75 6e 74 31 30 33 30 |775filecount1030| (no-zstd !)
-  0010: 99 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |..STREAM2.......| (zstd !)
-  0020: 05 09 04 0c 5e 62 79 74 65 63 6f 75 6e 74 39 35 |....^bytecount95| (zstd !)
+  0010: 99 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |..STREAM2.......| (zstd no-rust !)
+  0010: ae 07 53 54 52 45 41 4d 32 00 00 00 00 03 00 09 |..STREAM2.......| (rust !)
+  0020: 05 09 04 0c 5e 62 79 74 65 63 6f 75 6e 74 39 35 |....^bytecount95| (zstd no-rust !)
+  0020: 05 09 04 0c 73 62 79 74 65 63 6f 75 6e 74 39 35 |....sbytecount95| (rust !)
   0030: 38 39 37 66 69 6c 65 63 6f 75 6e 74 31 30 33 30 |897filecount1030| (zstd !)
   0040: 72 65 71 75 69 72 65 6d 65 6e 74 73 64 6f 74 65 |requirementsdote|
   0050: 6e 63 6f 64 65 25 32 43 66 6e 63 61 63 68 65 25 |ncode%2Cfncache%|
@@ -236,15 +239,24 @@
   00d0: d1 ec 39 00 00 00 00 00 00 00 00 00 00 00 00 75 |..9............u| (no-zstd !)
   00e0: 30 73 08 42 64 61 74 61 2f 31 2e 69 00 03 00 01 |0s.Bdata/1.i....| (no-zstd !)
   00f0: 00 00 00 00 00 00 00 02 00 00 00 01 00 00 00 00 |................| (no-zstd !)
-  0070: 43 72 65 76 6c 6f 67 2d 63 6f 6d 70 72 65 73 73 |Crevlog-compress| (zstd !)
-  0080: 69 6f 6e 2d 7a 73 74 64 25 32 43 72 65 76 6c 6f |ion-zstd%2Crevlo| (zstd !)
-  0090: 67 76 31 25 32 43 73 70 61 72 73 65 72 65 76 6c |gv1%2Csparserevl| (zstd !)
-  00a0: 6f 67 25 32 43 73 74 6f 72 65 00 00 80 00 73 08 |og%2Cstore....s.| (zstd !)
-  00b0: 42 64 61 74 61 2f 30 2e 69 00 03 00 01 00 00 00 |Bdata/0.i.......| (zstd !)
-  00c0: 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 |................| (zstd !)
-  00d0: 01 ff ff ff ff ff ff ff ff 80 29 63 a0 49 d3 23 |..........)c.I.#| (zstd !)
-  00e0: 87 bf ce fe 56 67 92 67 2c 69 d1 ec 39 00 00 00 |....Vg.g,i..9...| (zstd !)
-  00f0: 00 00 00 00 00 00 00 00 00 75 30 73 08 42 64 61 |.........u0s.Bda| (zstd !)
+  0070: 43 72 65 76 6c 6f 67 2d 63 6f 6d 70 72 65 73 73 |Crevlog-compress| (zstd no-rust !)
+  0070: 43 70 65 72 73 69 73 74 65 6e 74 2d 6e 6f 64 65 |Cpersistent-node| (rust !)
+  0080: 69 6f 6e 2d 7a 73 74 64 25 32 43 72 65 76 6c 6f |ion-zstd%2Crevlo| (zstd no-rust !)
+  0080: 6d 61 70 25 32 43 72 65 76 6c 6f 67 2d 63 6f 6d |map%2Crevlog-com| (rust !)
+  0090: 67 76 31 25 32 43 73 70 61 72 73 65 72 65 76 6c |gv1%2Csparserevl| (zstd no-rust !)
+  0090: 70 72 65 73 73 69 6f 6e 2d 7a 73 74 64 25 32 43 |pression-zstd%2C| (rust !)
+  00a0: 6f 67 25 32 43 73 74 6f 72 65 00 00 80 00 73 08 |og%2Cstore....s.| (zstd no-rust !)
+  00a0: 72 65 76 6c 6f 67 76 31 25 32 43 73 70 61 72 73 |revlogv1%2Cspars| (rust !)
+  00b0: 42 64 61 74 61 2f 30 2e 69 00 03 00 01 00 00 00 |Bdata/0.i.......| (zstd no-rust !)
+  00b0: 65 72 65 76 6c 6f 67 25 32 43 73 74 6f 72 65 00 |erevlog%2Cstore.| (rust !)
+  00c0: 00 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 |................| (zstd no-rust !)
+  00c0: 00 80 00 73 08 42 64 61 74 61 2f 30 2e 69 00 03 |...s.Bdata/0.i..| (rust !)
+  00d0: 01 ff ff ff ff ff ff ff ff 80 29 63 a0 49 d3 23 |..........)c.I.#| (zstd no-rust !)
+  00d0: 00 01 00 00 00 00 00 00 00 02 00 00 00 01 00 00 |................| (rust !)
+  00e0: 87 bf ce fe 56 67 92 67 2c 69 d1 ec 39 00 00 00 |....Vg.g,i..9...| (zstd no-rust !)
+  00e0: 00 00 00 00 00 01 ff ff ff ff ff ff ff ff 80 29 |...............)| (rust !)
+  00f0: 00 00 00 00 00 00 00 00 00 75 30 73 08 42 64 61 |.........u0s.Bda| (zstd no-rust !)
+  00f0: 63 a0 49 d3 23 87 bf ce fe 56 67 92 67 2c 69 d1 |c.I.#....Vg.g,i.| (rust !)
 
 --uncompressed is an alias to --stream
 
--- a/tests/test-clonebundles.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-clonebundles.t	Thu Jan 14 04:58:20 2021 +0100
@@ -279,7 +279,8 @@
 
   $ hg -R server debugcreatestreamclonebundle packed.hg
   writing 613 bytes for 4 files
-  bundle requirements: generaldelta, revlogv1, sparserevlog
+  bundle requirements: generaldelta, revlogv1, sparserevlog (no-rust !)
+  bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog (rust !)
 
 No bundle spec should work
 
--- a/tests/test-copies-chain-merge.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-copies-chain-merge.t	Thu Jan 14 04:58:20 2021 +0100
@@ -1628,7 +1628,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no    yes      no
   revlog-v2:           no    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -1667,7 +1668,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no    yes      no
   revlog-v2:           no    yes      no
   plain-cl-delta:     yes    yes     yes
--- a/tests/test-copies-in-changeset.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-copies-in-changeset.t	Thu Jan 14 04:58:20 2021 +0100
@@ -39,7 +39,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:         yes    yes      no
   revlog-v2:          yes    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -54,7 +55,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -426,7 +428,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:         yes    yes      no
   revlog-v2:          yes    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -453,7 +456,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:          yes    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -482,7 +486,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:         yes    yes      no
   revlog-v2:          yes    yes      no
   plain-cl-delta:     yes    yes     yes
--- a/tests/test-debugcommands.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-debugcommands.t	Thu Jan 14 04:58:20 2021 +0100
@@ -186,8 +186,10 @@
   node trie capacity: 4
   node trie count: 2
   node trie depth: 1
-  node trie last rev scanned: -1
-  node trie lookups: 4
+  node trie last rev scanned: -1 (no-rust !)
+  node trie last rev scanned: 3 (rust !)
+  node trie lookups: 4 (no-rust !)
+  node trie lookups: 2 (rust !)
   node trie misses: 1
   node trie splits: 1
   revs in memory: 3
@@ -654,8 +656,10 @@
   devel-peer-request:   pairs: 81 bytes
   sending hello command
   sending between command
-  remote: 444
-  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
+  remote: 444 (no-rust !)
+  remote: 463 (rust !)
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-rust !)
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,persistent-nodemap,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (rust !)
   remote: 1
   devel-peer-request: protocaps
   devel-peer-request:   caps: * bytes (glob)
--- a/tests/test-hgweb-commands.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-hgweb-commands.t	Thu Jan 14 04:58:20 2021 +0100
@@ -2193,7 +2193,8 @@
   lookup
   pushkey
   stream-preferred
-  streamreqs=generaldelta,revlogv1,sparserevlog
+  streamreqs=generaldelta,revlogv1,sparserevlog (no-rust !)
+  streamreqs=generaldelta,persistent-nodemap,revlogv1,sparserevlog (rust !)
   unbundle=HG10GZ,HG10BZ,HG10UN
   unbundlehash
 
--- a/tests/test-init.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-init.t	Thu Jan 14 04:58:20 2021 +0100
@@ -21,6 +21,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -60,6 +61,7 @@
   $ hg --config format.usestore=false init old
   $ checknewrepo old
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   testonly-simplestore (reposimplestore !)
@@ -72,6 +74,7 @@
   store created
   00changelog.i created
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -86,6 +89,7 @@
   00changelog.i created
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -100,6 +104,7 @@
   00changelog.i created
   dotencode
   fncache
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   store
@@ -218,6 +223,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -239,6 +245,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -256,6 +263,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-lfconvert.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-lfconvert.t	Thu Jan 14 04:58:20 2021 +0100
@@ -99,6 +99,7 @@
   fncache
   generaldelta
   largefiles
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-lfs-largefiles.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-lfs-largefiles.t	Thu Jan 14 04:58:20 2021 +0100
@@ -293,6 +293,7 @@
   fncache
   generaldelta
   lfs
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-narrow-clone-no-ellipsis.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-narrow-clone-no-ellipsis.t	Thu Jan 14 04:58:20 2021 +0100
@@ -26,6 +26,7 @@
   dotencode
   fncache
   narrowhg-experimental
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-narrow-clone-stream.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-narrow-clone-stream.t	Thu Jan 14 04:58:20 2021 +0100
@@ -68,6 +68,7 @@
   fncache (flat-fncache !)
   generaldelta
   narrowhg-experimental
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-narrow-clone.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-narrow-clone.t	Thu Jan 14 04:58:20 2021 +0100
@@ -42,6 +42,7 @@
   dotencode
   fncache
   narrowhg-experimental
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-narrow-sparse.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-narrow-sparse.t	Thu Jan 14 04:58:20 2021 +0100
@@ -61,6 +61,7 @@
   fncache
   generaldelta
   narrowhg-experimental
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-persistent-nodemap.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-persistent-nodemap.t	Thu Jan 14 04:58:20 2021 +0100
@@ -2,6 +2,9 @@
 Test the persistent on-disk nodemap
 ===================================
 
+
+#if no-rust
+
   $ cat << EOF >> $HGRCPATH
   > [format]
   > use-persistent-nodemap=yes
@@ -9,6 +12,8 @@
   > persistent-nodemap=yes
   > EOF
 
+#endif
+
   $ hg init test-repo --config storage.revlog.persistent-nodemap.slow-path=allow
   $ cd test-repo
 
--- a/tests/test-phases.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-phases.t	Thu Jan 14 04:58:20 2021 +0100
@@ -886,6 +886,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -914,6 +915,7 @@
   fncache
   generaldelta
   internal-phase
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-remotefilelog-clone-tree.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-remotefilelog-clone-tree.t	Thu Jan 14 04:58:20 2021 +0100
@@ -30,6 +30,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -72,6 +73,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -114,6 +116,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-remotefilelog-clone.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-remotefilelog-clone.t	Thu Jan 14 04:58:20 2021 +0100
@@ -27,6 +27,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -62,6 +63,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -112,6 +114,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-remotefilelog-log.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-remotefilelog-log.t	Thu Jan 14 04:58:20 2021 +0100
@@ -30,6 +30,7 @@
   exp-remotefilelog-repo-req-1
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-repo-compengines.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-repo-compengines.t	Thu Jan 14 04:58:20 2021 +0100
@@ -13,6 +13,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -61,6 +62,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -79,6 +81,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd
   revlogv1
   sparserevlog
@@ -182,6 +185,7 @@
   exp-compression-none
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
--- a/tests/test-requires.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-requires.t	Thu Jan 14 04:58:20 2021 +0100
@@ -53,6 +53,7 @@
   featuresetup-test
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-revlog-v2.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-revlog-v2.t	Thu Jan 14 04:58:20 2021 +0100
@@ -24,6 +24,7 @@
   dotencode
   exp-revlogv2.2
   fncache
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   sparserevlog
   store
--- a/tests/test-rhg.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-rhg.t	Thu Jan 14 04:58:20 2021 +0100
@@ -176,6 +176,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -202,7 +203,7 @@
 Persistent nodemap
   $ cd $TESTTMP
   $ rm -rf repository
-  $ hg init repository
+  $ hg --config format.use-persistent-nodemap=no init repository
   $ cd repository
   $ $NO_FALLBACK rhg debugrequirements | grep nodemap
   [1]
--- a/tests/test-sidedata.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-sidedata.t	Thu Jan 14 04:58:20 2021 +0100
@@ -56,7 +56,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -70,7 +71,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -90,7 +92,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:          yes     no      no
   plain-cl-delta:     yes    yes     yes
@@ -104,7 +107,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:          yes     no      no
   plain-cl-delta:     yes    yes     yes
--- a/tests/test-sparse-requirement.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-sparse-requirement.t	Thu Jan 14 04:58:20 2021 +0100
@@ -20,6 +20,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -39,6 +40,7 @@
   exp-sparse
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -59,6 +61,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-sqlitestore.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-sqlitestore.t	Thu Jan 14 04:58:20 2021 +0100
@@ -17,6 +17,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -32,6 +33,7 @@
   exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$ (no-zstd !)
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -51,6 +53,7 @@
   exp-sqlite-comp-001=$BUNDLE2_COMPRESSIONS$
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -65,6 +68,7 @@
   exp-sqlite-comp-001=none
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
--- a/tests/test-ssh-bundle1.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-ssh-bundle1.t	Thu Jan 14 04:58:20 2021 +0100
@@ -486,9 +486,11 @@
   sending upgrade request: * proto=exp-ssh-v2-0003 (glob) (sshv2 !)
   sending hello command
   sending between command
-  remote: 444 (sshv1 !)
+  remote: 444 (sshv1 no-rust !)
+  remote: 463 (sshv1 rust !)
   protocol upgraded to exp-ssh-v2-0003 (sshv2 !)
-  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-rust !)
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,persistent-nodemap,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (rust !)
   remote: 1 (sshv1 !)
   sending protocaps command
   preparing listkeys for "bookmarks"
--- a/tests/test-ssh.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-ssh.t	Thu Jan 14 04:58:20 2021 +0100
@@ -542,9 +542,11 @@
   devel-peer-request:   pairs: 81 bytes
   sending hello command
   sending between command
-  remote: 444 (sshv1 !)
+  remote: 444 (sshv1 no-rust !)
+  remote: 463 (sshv1 rust !)
   protocol upgraded to exp-ssh-v2-0003 (sshv2 !)
-  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (no-rust !)
+  remote: capabilities: batch branchmap $USUAL_BUNDLE2_CAPS$ changegroupsubset getbundle known lookup protocaps pushkey streamreqs=generaldelta,persistent-nodemap,revlogv1,sparserevlog unbundle=HG10GZ,HG10BZ,HG10UN unbundlehash (rust !)
   remote: 1 (sshv1 !)
   devel-peer-request: protocaps
   devel-peer-request:   caps: * bytes (glob)
--- a/tests/test-stream-bundle-v2.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-stream-bundle-v2.t	Thu Jan 14 04:58:20 2021 +0100
@@ -47,10 +47,12 @@
   $ hg debugbundle bundle.hg
   Stream params: {}
   stream2 -- {bytecount: 1693, filecount: 11, requirements: dotencode%2Cfncache%2Cgeneraldelta%2Crevlogv1%2Csparserevlog%2Cstore} (mandatory: True) (no-zstd !)
-  stream2 -- {bytecount: 1693, filecount: 11, requirements: dotencode%2Cfncache%2Cgeneraldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore} (mandatory: True) (zstd !)
+  stream2 -- {bytecount: 1693, filecount: 11, requirements: dotencode%2Cfncache%2Cgeneraldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore} (mandatory: True) (zstd no-rust !)
+  stream2 -- {bytecount: 1693, filecount: 11, requirements: dotencode%2Cfncache%2Cgeneraldelta%2Cpersistent-nodemap%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore} (mandatory: True) (rust !)
   $ hg debugbundle --spec bundle.hg
   none-v2;stream=v2;requirements%3Ddotencode%2Cfncache%2Cgeneraldelta%2Crevlogv1%2Csparserevlog%2Cstore (no-zstd !)
-  none-v2;stream=v2;requirements%3Ddotencode%2Cfncache%2Cgeneraldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore (zstd !)
+  none-v2;stream=v2;requirements%3Ddotencode%2Cfncache%2Cgeneraldelta%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore (zstd no-rust !)
+  none-v2;stream=v2;requirements%3Ddotencode%2Cfncache%2Cgeneraldelta%2Cpersistent-nodemap%2Crevlog-compression-zstd%2Crevlogv1%2Csparserevlog%2Cstore (rust !)
 
 Test that we can apply the bundle as a stream clone bundle
 
--- a/tests/test-treemanifest.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-treemanifest.t	Thu Jan 14 04:58:20 2021 +0100
@@ -834,9 +834,11 @@
   $ hg -R deeprepo debugcreatestreamclonebundle repo-packed.hg
   writing 5330 bytes for 18 files (no-zstd !)
   writing 5400 bytes for 18 files (zstd !)
-  bundle requirements: generaldelta, revlogv1, sparserevlog, treemanifest
+  bundle requirements: generaldelta, revlogv1, sparserevlog, treemanifest (no-rust !)
+  bundle requirements: generaldelta, persistent-nodemap, revlogv1, sparserevlog, treemanifest (rust !)
   $ hg debugbundle --spec repo-packed.hg
-  none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog%2Ctreemanifest
+  none-packed1;requirements%3Dgeneraldelta%2Crevlogv1%2Csparserevlog%2Ctreemanifest (no-rust !)
+  none-packed1;requirements%3Dgeneraldelta%2Cpersistent-nodemap%2Crevlogv1%2Csparserevlog%2Ctreemanifest (rust !)
 
 #endif
 
--- a/tests/test-upgrade-repo.t	Fri Apr 09 03:36:24 2021 +0200
+++ b/tests/test-upgrade-repo.t	Thu Jan 14 04:58:20 2021 +0100
@@ -61,7 +61,8 @@
   generaldelta:       yes
   share-safe:          no
   sparserevlog:       yes
-  persistent-nodemap:  no
+  persistent-nodemap:  no (no-rust !)
+  persistent-nodemap: yes (rust !)
   copies-sdc:          no
   revlog-v2:           no
   plain-cl-delta:     yes
@@ -74,7 +75,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -88,7 +90,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -102,7 +105,8 @@
   [formatvariant.name.uptodate|generaldelta:      ][formatvariant.repo.uptodate| yes][formatvariant.config.default|    yes][formatvariant.default|     yes]
   [formatvariant.name.uptodate|share-safe:        ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.uptodate|sparserevlog:      ][formatvariant.repo.uptodate| yes][formatvariant.config.default|    yes][formatvariant.default|     yes]
-  [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
+  [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no] (no-rust !)
+  [formatvariant.name.mismatchdefault|persistent-nodemap:][formatvariant.repo.mismatchdefault| yes][formatvariant.config.special|    yes][formatvariant.default|      no] (rust !)
   [formatvariant.name.uptodate|copies-sdc:        ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.uptodate|revlog-v2:         ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.uptodate|plain-cl-delta:    ][formatvariant.repo.uptodate| yes][formatvariant.config.default|    yes][formatvariant.default|     yes]
@@ -142,10 +146,12 @@
     "repo": true
    },
    {
-    "config": false,
+    "config": false, (no-rust !)
+    "config": true, (rust !)
     "default": false,
     "name": "persistent-nodemap",
-    "repo": false
+    "repo": false (no-rust !)
+    "repo": true (rust !)
    },
    {
     "config": false,
@@ -184,7 +190,8 @@
   performing an upgrade with "--run" will make the following changes:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   processed revlogs:
     - all-filelogs
@@ -208,7 +215,8 @@
 
   $ hg debugupgraderepo --quiet
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   processed revlogs:
     - all-filelogs
@@ -223,7 +231,8 @@
   performing an upgrade with "--run" will make the following changes:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -254,7 +263,8 @@
   performing an upgrade with "--run" will make the following changes:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -279,7 +289,8 @@
   
   $ hg debugupgrade --optimize re-delta-parent --quiet
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -323,7 +334,8 @@
   generaldelta:        no    yes     yes
   share-safe:          no     no      no
   sparserevlog:        no    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap:  no    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -337,7 +349,8 @@
   generaldelta:        no     no     yes
   share-safe:          no     no      no
   sparserevlog:        no     no     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap:  no    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -351,7 +364,8 @@
   [formatvariant.name.mismatchdefault|generaldelta:      ][formatvariant.repo.mismatchdefault|  no][formatvariant.config.special|     no][formatvariant.default|     yes]
   [formatvariant.name.uptodate|share-safe:        ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.mismatchdefault|sparserevlog:      ][formatvariant.repo.mismatchdefault|  no][formatvariant.config.special|     no][formatvariant.default|     yes]
-  [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
+  [formatvariant.name.uptodate|persistent-nodemap:][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no] (no-rust !)
+  [formatvariant.name.mismatchconfig|persistent-nodemap:][formatvariant.repo.mismatchconfig|  no][formatvariant.config.special|    yes][formatvariant.default|      no] (rust !)
   [formatvariant.name.uptodate|copies-sdc:        ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.uptodate|revlog-v2:         ][formatvariant.repo.uptodate|  no][formatvariant.config.default|     no][formatvariant.default|      no]
   [formatvariant.name.uptodate|plain-cl-delta:    ][formatvariant.repo.uptodate| yes][formatvariant.config.default|    yes][formatvariant.default|     yes]
@@ -373,12 +387,16 @@
   sparserevlog
      in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
   
+  persistent-nodemap (rust !)
+     persist the node -> rev mapping on disk to speedup lookup (rust !)
+   (rust !)
   
   performing an upgrade with "--run" will make the following changes:
   
   requirements
      preserved: revlogv1, store
-     added: dotencode, fncache, generaldelta, sparserevlog
+     added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
+     added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
   
   fncache
      repository will be more resilient to storing certain paths and performance of certain operations should be improved
@@ -392,6 +410,9 @@
   sparserevlog
      Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
   
+  persistent-nodemap (rust !)
+     Speedup revision lookup by node id. (rust !)
+   (rust !)
   processed revlogs:
     - all-filelogs
     - changelog
@@ -414,7 +435,8 @@
   $ hg debugupgraderepo --quiet
   requirements
      preserved: revlogv1, store
-     added: dotencode, fncache, generaldelta, sparserevlog
+     added: dotencode, fncache, generaldelta, sparserevlog (no-rust !)
+     added: dotencode, fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
   
   processed revlogs:
     - all-filelogs
@@ -434,6 +456,9 @@
   sparserevlog
      in order to limit disk reading and memory usage on older version, the span of a delta chain from its root to its end is limited, whatever the relevant data in this span. This can severly limit Mercurial ability to build good chain of delta resulting is much more storage space being taken and limit reusability of on disk delta during exchange.
   
+  persistent-nodemap (rust !)
+     persist the node -> rev mapping on disk to speedup lookup (rust !)
+   (rust !)
   repository lacks features used by the default config options:
   
   dotencode
@@ -444,7 +469,8 @@
   
   requirements
      preserved: revlogv1, store
-     added: fncache, generaldelta, sparserevlog
+     added: fncache, generaldelta, sparserevlog (no-rust !)
+     added: fncache, generaldelta, persistent-nodemap, sparserevlog (rust !)
   
   fncache
      repository will be more resilient to storing certain paths and performance of certain operations should be improved
@@ -455,6 +481,9 @@
   sparserevlog
      Revlog supports delta chain with more unused data between payload. These gaps will be skipped at read time. This allows for better delta chains, making a better compression and faster exchange with server.
   
+  persistent-nodemap (rust !)
+     Speedup revision lookup by node id. (rust !)
+   (rust !)
   processed revlogs:
     - all-filelogs
     - changelog
@@ -513,7 +542,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, revlogv1, store
+     preserved: dotencode, fncache, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, persistent-nodemap, revlogv1, store (rust !)
      added: generaldelta
   
   generaldelta
@@ -554,6 +584,7 @@
   $ cat .hg/upgradebackup.*/requires
   dotencode
   fncache
+  persistent-nodemap (rust !)
   revlogv1
   store
 
@@ -563,6 +594,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   store
 
@@ -614,7 +646,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      added: sparserevlog
   
   sparserevlog
@@ -655,7 +688,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -732,7 +766,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -782,7 +817,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -831,7 +867,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-parent
   
@@ -884,7 +921,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      removed: sparserevlog
   
   optimisations: re-delta-parent
@@ -938,7 +976,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      added: sparserevlog
   
   optimisations: re-delta-parent
@@ -1003,7 +1042,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-fulladd
   
@@ -1066,6 +1106,7 @@
   fncache
   generaldelta
   largefiles
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -1077,6 +1118,7 @@
   fncache
   generaldelta
   largefiles
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -1166,7 +1208,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
   
   optimisations: re-delta-all
   
@@ -1226,6 +1269,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   store
 
@@ -1234,7 +1278,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      added: sparserevlog
   
   processed revlogs:
@@ -1246,6 +1291,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -1255,7 +1301,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      removed: sparserevlog
   
   processed revlogs:
@@ -1267,6 +1314,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   store
 
@@ -1281,7 +1329,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, store (rust !)
      added: revlog-compression-zstd, sparserevlog
   
   processed revlogs:
@@ -1296,7 +1345,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -1307,6 +1357,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd
   revlogv1
   sparserevlog
@@ -1318,7 +1369,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
      removed: revlog-compression-zstd
   
   processed revlogs:
@@ -1333,7 +1385,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -1344,6 +1397,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlogv1
   sparserevlog
   store
@@ -1358,7 +1412,8 @@
   upgrade will perform the following actions:
   
   requirements
-     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store
+     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog, store (no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlogv1, sparserevlog, store (rust !)
      added: revlog-compression-zstd
   
   processed revlogs:
@@ -1373,7 +1428,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -1384,6 +1440,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd
   revlogv1
   sparserevlog
@@ -1401,7 +1458,8 @@
   
   requirements
      preserved: dotencode, fncache, generaldelta, store (no-zstd !)
-     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !)
+     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
      removed: revlogv1
      added: exp-revlogv2.2, exp-sidedata-flag (zstd !)
      added: exp-revlogv2.2, exp-sidedata-flag, sparserevlog (no-zstd !)
@@ -1418,7 +1476,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:          yes     no      no
   plain-cl-delta:     yes    yes     yes
@@ -1431,6 +1490,7 @@
   exp-sidedata-flag
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   sparserevlog
   store
@@ -1446,7 +1506,8 @@
   
   requirements
      preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
-     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !)
+     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
      removed: exp-revlogv2.2, exp-sidedata-flag
      added: revlogv1
   
@@ -1462,7 +1523,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:           no     no      no
   plain-cl-delta:     yes    yes     yes
@@ -1473,6 +1535,7 @@
   dotencode
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   revlogv1
   sparserevlog
@@ -1490,7 +1553,8 @@
   
   requirements
      preserved: dotencode, fncache, generaldelta, sparserevlog, store (no-zstd !)
-     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd !)
+     preserved: dotencode, fncache, generaldelta, revlog-compression-zstd, sparserevlog, store (zstd no-rust !)
+     preserved: dotencode, fncache, generaldelta, persistent-nodemap, revlog-compression-zstd, sparserevlog, store (rust !)
      removed: revlogv1
      added: exp-revlogv2.2, exp-sidedata-flag
   
@@ -1506,7 +1570,8 @@
   generaldelta:       yes    yes     yes
   share-safe:          no     no      no
   sparserevlog:       yes    yes     yes
-  persistent-nodemap:  no     no      no
+  persistent-nodemap:  no     no      no (no-rust !)
+  persistent-nodemap: yes    yes      no (rust !)
   copies-sdc:          no     no      no
   revlog-v2:          yes    yes      no
   plain-cl-delta:     yes    yes     yes
@@ -1519,6 +1584,7 @@
   exp-sidedata-flag
   fncache
   generaldelta
+  persistent-nodemap (rust !)
   revlog-compression-zstd (zstd !)
   sparserevlog
   store