Merge pull request #170 from pre-commit/filenames_as_arguments

Add ability to pass filenames as arguments.
This commit is contained in:
Anthony Sottile 2014-09-18 08:06:08 -07:00
commit 6497094ba0
3 changed files with 23 additions and 6 deletions

View file

@ -49,7 +49,9 @@ def _print_user_skipped(hook, write, args):
def _run_single_hook(runner, repository, hook, args, write, skips=set()):
if args.all_files:
if args.files:
get_filenames = git.get_files_matching(lambda: args.files)
elif args.all_files:
get_filenames = git.get_all_files_matching
elif git.is_in_merge_conflict():
get_filenames = git.get_conflicted_files_matching
@ -136,7 +138,8 @@ def run(runner, args, write=sys_stdout_write_wrapper, environ=os.environ):
logger.error('Unmerged files. Resolve before committing.')
return 1
if args.no_stash or args.all_files:
# Don't stash if specified or files are specified
if args.no_stash or args.all_files or args.files:
ctx = noop_context()
else:
ctx = staged_files_only(runner.cmd_runner)

View file

@ -55,10 +55,6 @@ def main(argv=None):
run_parser = subparsers.add_parser('run', help='Run hooks.')
run_parser.add_argument('hook', nargs='?', help='A single hook-id to run')
run_parser.add_argument(
'--all-files', '-a', action='store_true', default=False,
help='Run on all the files in the repo. Implies --no-stash.',
)
run_parser.add_argument(
'--color', default='auto', type=color.use_color,
help='Whether to use color in output. Defaults to `auto`',
@ -70,6 +66,14 @@ def main(argv=None):
run_parser.add_argument(
'--verbose', '-v', action='store_true', default=False,
)
run_mutex_group = run_parser.add_mutually_exclusive_group(required=False)
run_mutex_group.add_argument(
'--all-files', '-a', action='store_true', default=False,
help='Run on all the files in the repo. Implies --no-stash.',
)
run_mutex_group.add_argument(
'--files', nargs='*', help='Specific filenames to run hooks on.',
)
help = subparsers.add_parser(
'help', help='Show help for a specific command.'

View file

@ -43,13 +43,17 @@ def get_write_mock_output(write_mock):
def _get_opts(
all_files=False,
files=(),
color=False,
verbose=False,
hook=None,
no_stash=False,
):
# These are mutually exclusive
assert not (all_files and files)
return auto_namedtuple(
all_files=all_files,
files=files,
color=color,
verbose=verbose,
hook=hook,
@ -100,6 +104,12 @@ def test_run_all_hooks_failing(
0,
True,
),
(
{'files': ('foo.py',), 'verbose': True},
('foo.py'),
0,
True,
),
({}, ('Bash hook', '(no files to check)', 'Skipped'), 0, False),
)
)