def get_filenames(args, include_expr, exclude_expr): if args.origin and args.source: getter = git.get_files_matching( lambda: get_changed_files(args.origin, args.source), ) elif args.files: getter = git.get_files_matching(lambda: args.files) elif args.all_files: getter = git.get_all_files_matching elif git.is_in_merge_conflict(): getter = git.get_conflicted_files_matching else: getter = git.get_staged_files_matching return getter(include_expr, exclude_expr)
def _all_filenames(args): if args.origin and args.source: return git.get_changed_files(args.origin, args.source) elif args.hook_stage == 'commit-msg': return (args.commit_msg_filename, ) elif args.files: return args.files elif args.all_files: return git.get_all_files() elif git.is_in_merge_conflict(): return git.get_conflicted_files() else: return git.get_staged_files()
def _all_filenames(args): if args.origin and args.source: return git.get_changed_files(args.origin, args.source) elif args.hook_stage in {'prepare-commit-msg', 'commit-msg'}: return (args.commit_msg_filename,) elif args.files: return args.files elif args.all_files: return git.get_all_files() elif git.is_in_merge_conflict(): return git.get_conflicted_files() else: return git.get_staged_files()
def _all_filenames(args: argparse.Namespace) -> Collection[str]: if args.origin and args.source: return git.get_changed_files(args.origin, args.source) elif args.hook_stage in {'prepare-commit-msg', 'commit-msg'}: return (args.commit_msg_filename, ) elif args.files: return args.files elif args.all_files: return git.get_all_files() elif git.is_in_merge_conflict(): return git.get_conflicted_files() else: return git.get_staged_files()
def _all_filenames(args: argparse.Namespace) -> Collection[str]: if args.hook_stage == 'post-checkout': # no files for post-checkout return () elif args.hook_stage in {'prepare-commit-msg', 'commit-msg'}: return (args.commit_msg_filename, ) elif args.from_ref and args.to_ref: return git.get_changed_files(args.from_ref, args.to_ref) elif args.files: return args.files elif args.all_files: return git.get_all_files() elif git.is_in_merge_conflict(): return git.get_conflicted_files() else: return git.get_staged_files()
def _run_single_hook(runner, repository, hook, args, write, skips=set()): if args.origin and args.source: get_filenames = git.get_files_matching( lambda: get_changed_files(args.origin, args.source), ) elif 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 else: get_filenames = git.get_staged_files_matching filenames = get_filenames(hook['files'], hook['exclude']) if hook['id'] in skips: _print_user_skipped(hook, write, args) return 0 elif not filenames: _print_no_files_skipped(hook, write, args) return 0 # Print the hook and the dots first in case the hook takes hella long to # run. write(get_hook_message(_hook_msg_start(hook, args.verbose), end_len=6)) sys.stdout.flush() retcode, stdout, stderr = repository.run_hook(hook, filenames) if retcode != hook['expected_return_value']: retcode = 1 print_color = color.RED pass_fail = 'Failed' else: retcode = 0 print_color = color.GREEN pass_fail = 'Passed' write(color.format_color(pass_fail, print_color, args.color) + '\n') if (stdout or stderr) and (retcode or args.verbose): write('hookid: {0}\n'.format(hook['id'])) write('\n') for output in (stdout, stderr): if output.strip(): write(output.strip() + '\n') write('\n') return retcode
def _all_filenames(args: argparse.Namespace) -> Collection[str]: # these hooks do not operate on files if args.hook_stage in {"post-checkout", "post-commit"}: return () elif args.hook_stage in {"prepare-commit-msg", "commit-msg"}: return (args.commit_msg_filename,) elif args.from_ref and args.to_ref: return git.get_changed_files(args.from_ref, args.to_ref) elif args.files: return args.files elif args.all_files: return git.get_all_files() elif git.is_in_merge_conflict(): return git.get_conflicted_files() else: return git.get_staged_files()
def _run_single_hook(runner, repository, hook, args, write, skips=set()): if args.all_files: get_filenames = git.get_all_files_matching elif git.is_in_merge_conflict(): get_filenames = git.get_conflicted_files_matching else: get_filenames = git.get_staged_files_matching filenames = get_filenames(hook['files'], hook['exclude']) if hook['id'] in skips: _print_user_skipped(hook, write, args) return 0 elif not filenames: _print_no_files_skipped(hook, write, args) return 0 # Print the hook and the dots first in case the hook takes hella long to # run. write(get_hook_message(_hook_msg_start(hook, args.verbose), end_len=6)) sys.stdout.flush() retcode, stdout, stderr = repository.run_hook(hook, filenames) if retcode != hook['expected_return_value']: retcode = 1 print_color = color.RED pass_fail = 'Failed' else: retcode = 0 print_color = color.GREEN pass_fail = 'Passed' write(color.format_color(pass_fail, print_color, args.color) + '\n') if (stdout or stderr) and (retcode or args.verbose): write('hookid: {0}\n'.format(hook['id'])) write('\n') for output in (stdout, stderr): if output.strip(): write(output.strip() + '\n') write('\n') return retcode
def test_is_in_merge_conflict(in_merge_conflict): assert git.is_in_merge_conflict() is True
def test_is_in_merge_conflict_submodule(in_conflicting_submodule): assert git.is_in_merge_conflict() is True
def test_cherry_pick_conflict(in_merge_conflict): cmd_output('git', 'merge', '--abort') foo_ref = cmd_output('git', 'rev-parse', 'foo')[1].strip() cmd_output('git', 'cherry-pick', foo_ref, retcode=None) assert git.is_in_merge_conflict() is False
def test_is_not_in_merge_conflict(in_git_dir): assert git.is_in_merge_conflict() is False
def test_is_not_in_merge_conflict(tempdir_factory): path = git_dir(tempdir_factory) with cwd(path): assert git.is_in_merge_conflict() is False
def test_cherry_pick_conflict(in_merge_conflict): local['git']('merge', '--abort') foo_ref = local['git']('rev-parse', 'foo').strip() local['git']('cherry-pick', foo_ref, retcode=None) assert git.is_in_merge_conflict() is False
def test_cherry_pick_conflict(in_merge_conflict): cmd_output("git", "merge", "--abort") foo_ref = cmd_output("git", "rev-parse", "foo")[1].strip() cmd_output("git", "cherry-pick", foo_ref, retcode=None) assert git.is_in_merge_conflict() is False