# HG changeset patch # User Pierre-Yves David # Date 1586825105 -7200 # Node ID 6493f0a567c20f1d3ddde2b59e40e850a6be4c7d # Parent 97ebdb192b0028e44f4b6d7236aaa4c9a837645a 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 diff -r 97ebdb192b00 -r 6493f0a567c2 mercurial/configitems.py --- 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( diff -r 97ebdb192b00 -r 6493f0a567c2 mercurial/localrepo.py --- 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 diff -r 97ebdb192b00 -r 6493f0a567c2 mercurial/revlogutils/nodemap.py --- 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 diff -r 97ebdb192b00 -r 6493f0a567c2 tests/test-persistent-nodemap.t --- 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