Mercurial > hg-stable
changeset 46310:fc2d5c0aed7f
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
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 13 Jan 2021 23:07:41 +0100 |
parents | 2c9c88879ab7 |
children | 014ac7a32048 |
files | mercurial/configitems.py mercurial/helptext/config.txt mercurial/localrepo.py mercurial/revlog.py tests/test-persistent-nodemap.t tests/test-share-safe.t |
diffstat | 6 files changed, 70 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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