Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Bug 1384396 - Detect Watchman Mercurial integration in configure; r=n…
Browse files Browse the repository at this point in the history
…alexander

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
  • Loading branch information
indygreg committed Jul 26, 2017
1 parent 0f6ee2c commit 2fbd0d2
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
22 changes: 22 additions & 0 deletions build/moz.configure/init.configure
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
23 changes: 23 additions & 0 deletions moz.configure
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 2fbd0d2

Please sign in to comment.