nodemap: add a new mode option, with an optional "warn" value
When "warn" is set, user will get notified when the slow code, used for
compatibility is used. This can help people to detect situation were using that
feature will give them a slowdown instead of a speedup.
Differential Revision: https://phab.mercurial-scm.org/D8414
--- a/mercurial/configitems.py Sun Apr 05 18:32:46 2020 +0200
+++ b/mercurial/configitems.py Tue Apr 14 02:45:05 2020 +0200
@@ -681,6 +681,9 @@
b'experimental', b'exp-persistent-nodemap.mmap', default=True,
)
coreconfigitem(
+ b'experimental', b'exp-persistent-nodemap.mode', default=b'compat',
+)
+coreconfigitem(
b'experimental', b'server.filesdata.recommended-batch-size', default=50000,
)
coreconfigitem(
--- a/mercurial/localrepo.py Sun Apr 05 18:32:46 2020 +0200
+++ b/mercurial/localrepo.py Tue Apr 14 02:45:05 2020 +0200
@@ -937,6 +937,8 @@
options[b'exp-persistent-nodemap'] = True
if ui.configbool(b'experimental', b'exp-persistent-nodemap.mmap'):
options[b'exp-persistent-nodemap.mmap'] = True
+ epnm = ui.config(b'experimental', b'exp-persistent-nodemap.mode')
+ options[b'exp-persistent-nodemap.mode'] = epnm
if ui.configbool(b'devel', b'persistent-nodemap'):
options[b'devel-force-nodemap'] = True
--- a/mercurial/revlogutils/nodemap.py Sun Apr 05 18:32:46 2020 +0200
+++ b/mercurial/revlogutils/nodemap.py Tue Apr 14 02:45:05 2020 +0200
@@ -13,6 +13,8 @@
import re
import struct
+from ..i18n import _
+
from .. import (
error,
node as nodemod,
@@ -105,6 +107,9 @@
def addabort(self, *args, **kwargs):
pass
+ def _report(self, *args):
+ pass
+
def update_persistent_nodemap(revlog):
"""update the persistent nodemap right now
@@ -138,6 +143,11 @@
ondisk_docket = revlog._nodemap_docket
feed_data = util.safehasattr(revlog.index, "update_nodemap_data")
use_mmap = revlog.opener.options.get(b"exp-persistent-nodemap.mmap")
+ mode = revlog.opener.options.get(b"exp-persistent-nodemap.mode")
+ if not can_incremental:
+ msg = _(b"persistent nodemap in strict mode without efficient method")
+ if mode == b'warn':
+ tr._report(b"%s\n" % msg)
data = None
# first attemp an incremental update of the data
--- a/tests/test-persistent-nodemap.t Sun Apr 05 18:32:46 2020 +0200
+++ b/tests/test-persistent-nodemap.t Tue Apr 14 02:45:05 2020 +0200
@@ -10,7 +10,9 @@
> [devel]
> persistent-nodemap=yes
> EOF
- $ hg debugbuilddag .+5000 --new-file
+ $ hg debugbuilddag .+5000 --new-file --config "experimental.exp-persistent-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 debugnodemap --metadata
uid: ???????????????? (glob)
tip-rev: 5000