Mercurial > public > mercurial-scm > hg-stable
diff mercurial/merge.py @ 34885:df2ff314e36f
fsmonitor: warn when fsmonitor could be used
fsmonitor can significantly speed up operations on large working
directories. But fsmonitor isn't enabled by default, so naive users
may not realize there is a potential to make Mercurial faster.
This commit introduces a warning to working directory updates when
fsmonitor could be used.
The following conditions must be met:
* Working directory is previously empty
* New working directory adds >= N files (currently 50,000)
* Running on Linux or MacOS
* fsmonitor not enabled
* Warning not disabled via config override
Because of the empty working directory restriction, most users will
only see this warning during `hg clone` (assuming very few users
actually do an `hg up null`).
The addition of a warning may be considered a BC change. However, clone
has printed warnings before. Until recently, Mercurial printed a warning
with the server's certificate fingerprint when it wasn't explicitly
trusted for example. The warning goes to stderr. So it shouldn't
interfere with scripts parsing meaningful output.
The OS restriction was on the advice of Facebook engineers, who only
feel confident with watchman's stability on the supported platforms.
.. feature::
Print warning when fsmonitor isn't being used on a large repository
Differential Revision: https://phab.mercurial-scm.org/D894
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 18 Oct 2017 22:57:15 +0200 |
parents | 754b5117622f |
children | 1856de4d1297 |
line wrap: on
line diff
--- a/mercurial/merge.py Fri Oct 06 06:48:43 2017 -0700 +++ b/mercurial/merge.py Wed Oct 18 22:57:15 2017 +0200 @@ -25,6 +25,7 @@ from . import ( copies, error, + extensions, filemerge, match as matchmod, obsutil, @@ -1943,6 +1944,38 @@ # note that we're in the middle of an update repo.vfs.write('updatestate', p2.hex()) + # Advertise fsmonitor when its presence could be useful. + # + # We only advertise when performing an update from an empty working + # directory. This typically only occurs during initial clone. + # + # We give users a mechanism to disable the warning in case it is + # annoying. + # + # We only allow on Linux and MacOS because that's where fsmonitor is + # considered stable. + fsmonitorwarning = repo.ui.configbool('fsmonitor', 'warn_when_unused') + fsmonitorthreshold = repo.ui.configint('fsmonitor', + 'warn_update_file_count') + try: + extensions.find('fsmonitor') + fsmonitorenabled = repo.ui.config('fsmonitor', 'mode') != 'off' + # We intentionally don't look at whether fsmonitor has disabled + # itself because a) fsmonitor may have already printed a warning + # b) we only care about the config state here. + except KeyError: + fsmonitorenabled = False + + if (fsmonitorwarning + and not fsmonitorenabled + and p1.node() == nullid + and len(actions['g']) >= fsmonitorthreshold + and pycompat.sysplatform.startswith(('linux', 'darwin'))): + repo.ui.warn( + _('(warning: large working directory being used without ' + 'fsmonitor enabled; enable fsmonitor to improve performance; ' + 'see "hg help -e fsmonitor")\n')) + stats = applyupdates(repo, actions, wc, p2, overwrite, labels=labels) wc.flushall()