Add ability to pass filenames as arguments.

This commit is contained in:
Anthony Sottile 2014-09-16 17:27:40 -07:00
parent cfd86d5faa
commit d8d7893cf7
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()): 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 get_filenames = git.get_all_files_matching
elif git.is_in_merge_conflict(): elif git.is_in_merge_conflict():
get_filenames = git.get_conflicted_files_matching 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.') logger.error('Unmerged files. Resolve before committing.')
return 1 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() ctx = noop_context()
else: else:
ctx = staged_files_only(runner.cmd_runner) 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 = subparsers.add_parser('run', help='Run hooks.')
run_parser.add_argument('hook', nargs='?', help='A single hook-id to run') 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( run_parser.add_argument(
'--color', default='auto', type=color.use_color, '--color', default='auto', type=color.use_color,
help='Whether to use color in output. Defaults to `auto`', help='Whether to use color in output. Defaults to `auto`',
@ -70,6 +66,14 @@ def main(argv=None):
run_parser.add_argument( run_parser.add_argument(
'--verbose', '-v', action='store_true', default=False, '--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 = subparsers.add_parser(
'help', help='Show help for a specific command.' 'help', help='Show help for a specific command.'

View file

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