aboutsummaryrefslogtreecommitdiff
path: root/rh/config.py
diff options
context:
space:
mode:
authorLuis Hector Chavez <lhchavez@google.com>2016-09-02 16:01:26 -0700
committerLuis Hector Chavez <lhchavez@google.com>2016-09-08 13:51:48 -0700
commitadc235b65fafc132d55c4e685087198732e797f4 (patch)
treea24a06e08fafa620e8d6fdec59b8f28abb479e0d /rh/config.py
parent9cac05d73cb66890bbbb05be22ea3f086f5496ff (diff)
downloadrepohooks-adc235b65fafc132d55c4e685087198732e797f4.tar.gz
hooks: Add a first-approximation clang-format hook
This change adds a small wrapper that calls git-clang-format and prints out any files that need attention. Bug: 26800693 Test: Added clang_format builtin hook to a project, complained about non-compliant files. Change-Id: Id4431aaed4d17f6639a448fbddf1a595168cf27f
Diffstat (limited to 'rh/config.py')
-rw-r--r--rh/config.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/rh/config.py b/rh/config.py
index 468e3fb..1fc6ca6 100644
--- a/rh/config.py
+++ b/rh/config.py
@@ -96,6 +96,7 @@ class PreSubmitConfig(object):
CUSTOM_HOOKS_SECTION = 'Hook Scripts'
BUILTIN_HOOKS_SECTION = 'Builtin Hooks'
BUILTIN_HOOKS_OPTIONS_SECTION = 'Builtin Hooks Options'
+ TOOL_PATHS_SECTION = 'Tool Paths'
def __init__(self, paths=('',), global_paths=()):
"""Initialize.
@@ -146,15 +147,24 @@ class PreSubmitConfig(object):
return shlex.split(self.config.get(self.BUILTIN_HOOKS_OPTIONS_SECTION,
hook, ''))
+ @property
+ def tool_paths(self):
+ """List of all tool paths."""
+ return dict(self.config.items(self.TOOL_PATHS_SECTION, ()))
+
def callable_hooks(self):
"""Yield a callback for each hook to be executed (custom & builtin)."""
for hook in self.custom_hooks:
+ options = rh.hooks.HookOptions(self.custom_hook(hook),
+ self.tool_paths)
yield functools.partial(rh.hooks.check_custom,
- options=self.custom_hook(hook))
+ options=options)
for hook in self.builtin_hooks:
+ options = rh.hooks.HookOptions(self.builtin_hook_option(hook),
+ self.tool_paths)
yield functools.partial(rh.hooks.BUILTIN_HOOKS[hook],
- options=self.builtin_hook_option(hook))
+ options=options)
def _validate(self):
"""Run consistency checks on the config settings."""
@@ -165,6 +175,7 @@ class PreSubmitConfig(object):
self.CUSTOM_HOOKS_SECTION,
self.BUILTIN_HOOKS_SECTION,
self.BUILTIN_HOOKS_OPTIONS_SECTION,
+ self.TOOL_PATHS_SECTION,
))
bad_sections = set(config.sections()) - valid_sections
if bad_sections:
@@ -211,3 +222,12 @@ class PreSubmitConfig(object):
except ValueError as e:
raise ValidationError('%s: hook options "%s" are invalid: %s' %
(self.paths, hook, e))
+
+ # Reject unknown tools.
+ valid_tools = set(rh.hooks.TOOL_PATHS.keys())
+ if config.has_section(self.TOOL_PATHS_SECTION):
+ tools = set(config.options(self.TOOL_PATHS_SECTION))
+ bad_tools = tools - valid_tools
+ if bad_tools:
+ raise ValidationError('%s: unknown tools: %s' %
+ (self.paths, bad_tools))