persistent-nodemap: add a "warn" option to the slow-path config
And make it the default until we get an abort option.
Differential Revision: https://phab.mercurial-scm.org/D9761
--- a/mercurial/configitems.py Wed Jan 13 18:33:48 2021 +0100
+++ b/mercurial/configitems.py Wed Jan 13 23:07:41 2021 +0100
@@ -1797,7 +1797,7 @@
coreconfigitem(
b'storage',
b'revlog.persistent-nodemap.slow-path',
- default=b"allow",
+ default=b"warn",
experimental=True,
)
--- a/mercurial/helptext/config.txt Wed Jan 13 18:33:48 2021 +0100
+++ b/mercurial/helptext/config.txt Wed Jan 13 23:07:41 2021 +0100
@@ -1959,8 +1959,9 @@
the feature:
``allow``: Silently use the slower implementation to access the repository.
-
- Default to "allow"
+ ``warn``: Warn, but use the slower implementation to access the repository.
+
+ Default to ``warn``
For details on the "persistent-nodemap" feature, see:
:hg:`help config format.use-persistent-nodemap`.
--- a/mercurial/localrepo.py Wed Jan 13 18:33:48 2021 +0100
+++ b/mercurial/localrepo.py Wed Jan 13 23:07:41 2021 +0100
@@ -59,6 +59,7 @@
rcutil,
repoview,
requirements as requirementsmod,
+ revlog,
revset,
revsetlang,
scmutil,
@@ -1047,7 +1048,7 @@
slow_path = ui.config(
b'storage', b'revlog.persistent-nodemap.slow-path'
)
- if slow_path not in (b'allow'):
+ if slow_path not in (b'allow', b'warn'):
default = ui.config_default(
b'storage', b'revlog.persistent-nodemap.slow-path'
)
@@ -1059,6 +1060,21 @@
if not ui.quiet:
ui.warn(_(b'falling back to default value: %s\n') % default)
slow_path = default
+
+ msg = _(
+ b"accessing `persistent-nodemap` repository without associated "
+ b"fast implementation."
+ )
+ hint = _(
+ b"check `hg help config.format.use-persistent-nodemap` "
+ b"for details"
+ )
+ if slow_path == b'warn' and not revlog.HAS_FAST_PERSISTENT_NODEMAP:
+ msg = b"warning: " + msg + b'\n'
+ ui.warn(msg)
+ if not ui.quiet:
+ hint = b'(' + hint + b')\n'
+ ui.warn(hint)
options[b'persistent-nodemap'] = True
if ui.configbool(b'storage', b'revlog.persistent-nodemap.mmap'):
options[b'persistent-nodemap.mmap'] = True
--- a/mercurial/revlog.py Wed Jan 13 18:33:48 2021 +0100
+++ b/mercurial/revlog.py Wed Jan 13 23:07:41 2021 +0100
@@ -161,6 +161,16 @@
rl.revision(node)
+# True if a fast implementation for persistent-nodemap is available
+#
+# We also consider we have a "fast" implementation in "pure" python because
+# people using pure don't really have performance consideration (and a
+# wheelbarrow of other slowness source)
+HAS_FAST_PERSISTENT_NODEMAP = rustrevlog is not None or util.safehasattr(
+ parsers, 'BaseIndexObject'
+)
+
+
@attr.s(slots=True, frozen=True)
class _revisioninfo(object):
"""Information about a revision that allows building its fulltext
--- a/tests/test-persistent-nodemap.t Wed Jan 13 18:33:48 2021 +0100
+++ b/tests/test-persistent-nodemap.t Wed Jan 13 23:07:41 2021 +0100
@@ -8,8 +8,30 @@
> [devel]
> persistent-nodemap=yes
> EOF
- $ hg init test-repo
+
+ $ hg init test-repo --config storage.revlog.persistent-nodemap.slow-path=allow
$ cd test-repo
+
+Check handling of the default slow-path value
+
+#if no-pure no-rust
+
+ $ hg id
+ warning: accessing `persistent-nodemap` repository without associated fast implementation.
+ (check `hg help config.format.use-persistent-nodemap` for details)
+ 000000000000 tip
+
+Unlock further check (we are here to test the feature)
+
+ $ cat << EOF >> $HGRCPATH
+ > [storage]
+ > # to avoid spamming the test
+ > revlog.persistent-nodemap.slow-path=allow
+ > EOF
+
+#endif
+
+
$ hg debugformat
format-variant repo
fncache: yes
@@ -23,9 +45,8 @@
plain-cl-delta: yes
compression: zlib
compression-level: default
- $ hg debugbuilddag .+5000 --new-file --config "storage.revlog.nodemap.mode=warn"
- persistent nodemap in strict mode without efficient method (no-rust no-pure !)
- persistent nodemap in strict mode without efficient method (no-rust no-pure !)
+ $ hg debugbuilddag .+5000 --new-file
+
$ hg debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5000
@@ -116,11 +137,22 @@
$ hg id --config "storage.revlog.persistent-nodemap.slow-path=invalid-value"
unknown value for config "storage.revlog.persistent-nodemap.slow-path": "invalid-value"
- falling back to default value: allow
+ falling back to default value: warn
+ warning: accessing `persistent-nodemap` repository without associated fast implementation. (no-pure no-rust !)
+ (check `hg help config.format.use-persistent-nodemap` for details) (no-pure no-rust !)
6b02b8c7b966+ tip
#if no-pure no-rust
+ $ hg log -r . --config "storage.revlog.persistent-nodemap.slow-path=warn"
+ warning: accessing `persistent-nodemap` repository without associated fast implementation.
+ (check `hg help config.format.use-persistent-nodemap` for details)
+ changeset: 5000:6b02b8c7b966
+ tag: tip
+ user: debugbuilddag
+ date: Thu Jan 01 01:23:20 1970 +0000
+ summary: r5000
+
$ hg ci -m 'foo' --config "storage.revlog.nodemap.mode=strict"
transaction abort!
rollback completed
--- a/tests/test-share-safe.t Wed Jan 13 18:33:48 2021 +0100
+++ b/tests/test-share-safe.t Wed Jan 13 23:07:41 2021 +0100
@@ -5,6 +5,8 @@
> share =
> [format]
> exp-share-safe = True
+ > [storage]
+ > revlog.persistent-nodemap.slow-path=allow
> EOF
prepare source repo