From 321210d33283cac4f30d1c01fe909b5b484f13d6 Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Fri, 9 Jun 2017 08:34:04 -0700 Subject: [PATCH] Run git diff with --no-ext-diff --- pre_commit/commands/run.py | 20 ++++++++++++++------ pre_commit/git.py | 5 +++-- pre_commit/staged_files_only.py | 4 ++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pre_commit/commands/run.py b/pre_commit/commands/run.py index 39b98298..aa9bb1e2 100644 --- a/pre_commit/commands/run.py +++ b/pre_commit/commands/run.py @@ -32,7 +32,8 @@ def _hook_msg_start(hook, verbose): def get_changed_files(new, old): return cmd_output( - 'git', 'diff', '--name-only', '{}...{}'.format(old, new), + 'git', 'diff', '--no-ext-diff', '--name-only', + '{}...{}'.format(old, new), )[1].splitlines() @@ -85,12 +86,16 @@ def _run_single_hook(hook, repo, args, skips, cols): )) sys.stdout.flush() - diff_before = cmd_output('git', 'diff', retcode=None, encoding=None) + diff_before = cmd_output( + 'git', 'diff', '--no-ext-diff', retcode=None, encoding=None, + ) retcode, stdout, stderr = repo.run_hook( hook, tuple(filenames) if hook['pass_filenames'] else (), ) - diff_after = cmd_output('git', 'diff', retcode=None, encoding=None) + diff_after = cmd_output( + 'git', 'diff', '--no-ext-diff', retcode=None, encoding=None, + ) file_modifications = diff_before != diff_after @@ -159,10 +164,10 @@ def _run_hooks(repo_hooks, args, environ): if ( retval and args.show_diff_on_failure and - subprocess.call(('git', 'diff', '--quiet')) != 0 + subprocess.call(('git', 'diff', '--quiet', '--no-ext-diff')) != 0 ): print('All changes made by hooks:') - subprocess.call(('git', 'diff')) + subprocess.call(('git', 'diff', '--no-ext-diff')) return retval @@ -179,7 +184,10 @@ def _has_unmerged_paths(runner): def _has_unstaged_config(runner): retcode, _, _ = runner.cmd_runner.run( - ('git', 'diff', '--exit-code', runner.config_file_path), + ( + 'git', 'diff', '--no-ext-diff', '--exit-code', + runner.config_file_path, + ), retcode=None, ) # be explicit, other git errors don't mean it has an unstaged config. diff --git a/pre_commit/git.py b/pre_commit/git.py index 2ed02993..754514aa 100644 --- a/pre_commit/git.py +++ b/pre_commit/git.py @@ -68,7 +68,8 @@ def get_conflicted_files(): # this will also include the conflicted files tree_hash = cmd_output('git', 'write-tree')[1].strip() merge_diff_filenames = cmd_output( - 'git', 'diff', '-m', tree_hash, 'HEAD', 'MERGE_HEAD', '--name-only', + 'git', 'diff', '--no-ext-diff', + '-m', tree_hash, 'HEAD', 'MERGE_HEAD', '--name-only', )[1].splitlines() return set(merge_conflict_filenames) | set(merge_diff_filenames) @@ -76,7 +77,7 @@ def get_conflicted_files(): @memoize_by_cwd def get_staged_files(): return cmd_output( - 'git', 'diff', '--staged', '--name-only', + 'git', 'diff', '--staged', '--name-only', '--no-ext-diff', # Everything except for D '--diff-filter=ACMRTUXB' )[1].splitlines() diff --git a/pre_commit/staged_files_only.py b/pre_commit/staged_files_only.py index a63662bf..d6ace66f 100644 --- a/pre_commit/staged_files_only.py +++ b/pre_commit/staged_files_only.py @@ -21,10 +21,10 @@ def staged_files_only(cmd_runner): """ # Determine if there are unstaged files retcode, diff_stdout_binary, _ = cmd_runner.run( - [ + ( 'git', 'diff', '--ignore-submodules', '--binary', '--exit-code', '--no-color', '--no-ext-diff', - ], + ), retcode=None, encoding=None, )