From f1c00eefe4d8874baef2b4ab6f2a50fb474abe89 Mon Sep 17 00:00:00 2001 From: Jacob Scott Date: Fri, 2 Dec 2016 11:06:15 -0800 Subject: [PATCH] Add option to run from alternate config file --- pre_commit/main.py | 11 ++++++++++- pre_commit/runner.py | 9 +++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pre_commit/main.py b/pre_commit/main.py index 9d9329a2..ab3bbea7 100644 --- a/pre_commit/main.py +++ b/pre_commit/main.py @@ -34,6 +34,10 @@ def _add_color_option(parser): ) +def _add_config_option(parser): + parser.add_argument('-c', '--config', help='Path to alternate config file') + + def main(argv=None): argv = argv if argv is not None else sys.argv[1:] argv = [five.to_text(arg) for arg in argv] @@ -89,6 +93,7 @@ def main(argv=None): help="Auto-update pre-commit config to the latest repos' versions.", ) _add_color_option(autoupdate_parser) + _add_config_option(autoupdate_parser) run_parser = subparsers.add_parser('run', help='Run hooks.') _add_color_option(run_parser) @@ -119,6 +124,7 @@ def main(argv=None): '--hook-stage', choices=('commit', 'push'), default='commit', help='The stage during which the hook is fired e.g. commit or push.', ) + _add_config_option(run_parser) run_mutex_group = run_parser.add_mutually_exclusive_group(required=False) run_mutex_group.add_argument( '--all-files', '-a', action='store_true', default=False, @@ -152,7 +158,10 @@ def main(argv=None): with error_handler(): add_logging_handler(args.color) - runner = Runner.create() + runner_kwargs = {} + if hasattr(args, 'config_file'): + runner_kwargs['config_file'] = args.config_file + runner = Runner.create(**runner_kwargs) git.check_for_cygwin_mismatch() if args.command == 'install': diff --git a/pre_commit/runner.py b/pre_commit/runner.py index c055b126..c44f00ae 100644 --- a/pre_commit/runner.py +++ b/pre_commit/runner.py @@ -16,18 +16,19 @@ class Runner(object): repository under test. """ - def __init__(self, git_root): + def __init__(self, git_root, config_file=None): self.git_root = git_root + self.config_file = config_file or C.CONFIG_FILE @classmethod - def create(cls): + def create(cls, config_file=None): """Creates a PreCommitRunner by doing the following: - Finds the root of the current git repository - chdir to that directory """ root = git.get_root() os.chdir(root) - return cls(root) + return cls(root, config_file=config_file) @cached_property def git_dir(self): @@ -35,7 +36,7 @@ class Runner(object): @cached_property def config_file_path(self): - return os.path.join(self.git_root, C.CONFIG_FILE) + return os.path.join(self.git_root, self.config_file) @cached_property def repositories(self):