# HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1594301530 -19800 # Node ID 796b63b0f0dde09ba5bd9b53ef5bf2f0cf9934cd # Parent a5be403dd7a00ed9e4bd5ff973a0c3b7b119e720 merge: refactor code to advise fsmonitor in separate function merge.update() is quite hard to understand, found this an easy win. The end goal is to have better organized merge and mergestate handling and then fix some related bugs. Differential Revision: https://phab.mercurial-scm.org/D8740 diff -r a5be403dd7a0 -r 796b63b0f0dd mercurial/merge.py --- a/mercurial/merge.py Thu Jul 09 18:43:38 2020 +0530 +++ b/mercurial/merge.py Thu Jul 09 19:02:10 2020 +0530 @@ -1477,6 +1477,49 @@ return updateresult(updated, merged, removed, unresolved), getfiledata +def _advertisefsmonitor(repo, num_gets, p1node): + # 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(b'fsmonitor', b'warn_when_unused') + fsmonitorthreshold = repo.ui.configint( + b'fsmonitor', b'warn_update_file_count' + ) + try: + # avoid cycle: extensions -> cmdutil -> merge + from . import extensions + + extensions.find(b'fsmonitor') + fsmonitorenabled = repo.ui.config(b'fsmonitor', b'mode') != b'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 p1node == nullid + and num_gets >= fsmonitorthreshold + and pycompat.sysplatform.startswith((b'linux', b'darwin')) + ): + repo.ui.warn( + _( + b'(warning: large working directory being used without ' + b'fsmonitor enabled; enable fsmonitor to improve performance; ' + b'see "hg help -e fsmonitor")\n' + ) + ) + + UPDATECHECK_ABORT = b'abort' # handled at higher layers UPDATECHECK_NONE = b'none' UPDATECHECK_LINEAR = b'linear' @@ -1815,46 +1858,9 @@ # note that we're in the middle of an update repo.vfs.write(b'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(b'fsmonitor', b'warn_when_unused') - fsmonitorthreshold = repo.ui.configint( - b'fsmonitor', b'warn_update_file_count' + _advertisefsmonitor( + repo, len(actions[mergestatemod.ACTION_GET]), p1.node() ) - try: - # avoid cycle: extensions -> cmdutil -> merge - from . import extensions - - extensions.find(b'fsmonitor') - fsmonitorenabled = repo.ui.config(b'fsmonitor', b'mode') != b'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[mergestatemod.ACTION_GET]) >= fsmonitorthreshold - and pycompat.sysplatform.startswith((b'linux', b'darwin')) - ): - repo.ui.warn( - _( - b'(warning: large working directory being used without ' - b'fsmonitor enabled; enable fsmonitor to improve performance; ' - b'see "hg help -e fsmonitor")\n' - ) - ) wantfiledata = updatedirstate and not branchmerge stats, getfiledata = applyupdates(