Bug 1384396 - Detect Watchman Mercurial integration in configure; r=nalexander

Configure now detects VCS info. Configure now detects Watchman.
We can combine the two so configure can detect if Mercurial
is configured with Watchman enabled.

This commit does two things:

1) collects the Mercurial config so it is available to downstream checks
2) examines the config for presence and state of the fsmonitor
   extension

We don't yet do anything with the fsmonitor state. But it should be
useful soon. Also, the return value is kinda wonky. This will almost
certainly be improved as soon as there is an actual consumer.

MozReview-Commit-ID: HyHZ2X8VI0h

--HG--
extra : rebase_source : d245d316cc8a27b2827b7824204549b91465bd34
This commit is contained in:
Gregory Szorc 2017-07-25 22:05:23 -07:00
Родитель 876dadde77
Коммит 4d26cc09b2
2 изменённых файлов: 45 добавлений и 0 удалений

Просмотреть файл

@ -353,6 +353,28 @@ def hg_version(hg):
return Version(match.group(1))
# Resolve Mercurial config items so other checks have easy access.
# Do NOT set this in the config because it may contain sensitive data
# like API keys.
@depends_all(check_build_environment, hg, hg_version)
@imports('os')
def hg_config(build_env, hg, version):
env = dict(os.environ)
env['HGPLAIN'] = '1'
# Warnings may get sent to stderr. But check_cmd_output() ignores
# stderr if exit code is 0. And the command should always succeed if
# `hg version` worked.
out = check_cmd_output(hg, 'config', env=env, cwd=build_env.topsrcdir)
config = {}
for line in out.strip().splitlines():
key, value = [s.strip() for s in line.split('=', 1)]
config[key] = value
return config
@depends_if(git)
@checking('for Git version')
@imports('re')

Просмотреть файл

@ -378,6 +378,29 @@ def watchman_version(watchman):
res = json.loads(out)
return Version(res['version'])
@depends_all(hg_version, hg_config, watchman)
@checking('for watchman Mercurial integration')
@imports('os')
def watchman_hg(hg_version, hg_config, watchman):
if hg_version < Version('3.8'):
return 'no (Mercurial 3.8+ required)'
ext_enabled = False
mode_disabled = False
for k in ('extensions.fsmonitor', 'extensions.hgext.fsmonitor'):
if k in hg_config and hg_config[k] != '!':
ext_enabled = True
mode_disabled = hg_config.get('fsmonitor.mode') == 'off'
if not ext_enabled:
return 'no (fsmonitor extension not enabled)'
if mode_disabled:
return 'no (fsmonitor.mode=off disables fsmonitor)'
return True
# Miscellaneous programs
# ==============================================================
check_prog('DOXYGEN', ('doxygen',), allow_missing=True)