mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-14 04:50:20 -06:00
Merge pull request #2743 from adamchainz/issue_2742
Add `--no-textconv` to `git diff` calls
This commit is contained in:
@@ -272,7 +272,8 @@ def _all_filenames(args: argparse.Namespace) -> Collection[str]:
|
||||
|
||||
def _get_diff() -> bytes:
|
||||
_, out, _ = cmd_output_b(
|
||||
'git', 'diff', '--no-ext-diff', '--ignore-submodules', check=False,
|
||||
'git', 'diff', '--no-ext-diff', '--no-textconv', '--ignore-submodules',
|
||||
check=False,
|
||||
)
|
||||
return out
|
||||
|
||||
@@ -326,8 +327,7 @@ def _has_unmerged_paths() -> bool:
|
||||
|
||||
def _has_unstaged_config(config_file: str) -> bool:
|
||||
retcode, _, _ = cmd_output_b(
|
||||
'git', 'diff', '--no-ext-diff', '--exit-code', config_file,
|
||||
check=False,
|
||||
'git', 'diff', '--quiet', '--no-ext-diff', config_file, check=False,
|
||||
)
|
||||
# be explicit, other git errors don't mean it has an unstaged config.
|
||||
return retcode == 1
|
||||
|
||||
@@ -766,6 +766,47 @@ def test_lots_of_files(store, tempdir_factory):
|
||||
)
|
||||
|
||||
|
||||
def test_no_textconv(cap_out, store, repo_with_passing_hook):
|
||||
# git textconv filters can hide changes from hooks
|
||||
with open('.gitattributes', 'w') as fp:
|
||||
fp.write('*.jpeg diff=empty\n')
|
||||
|
||||
with open('.git/config', 'a') as fp:
|
||||
fp.write('[diff "empty"]\n')
|
||||
fp.write('textconv = "true"\n')
|
||||
|
||||
config = {
|
||||
'repo': 'local',
|
||||
'hooks': [
|
||||
{
|
||||
'id': 'extend-jpeg',
|
||||
'name': 'extend-jpeg',
|
||||
'language': 'system',
|
||||
'entry': (
|
||||
f'{shlex.quote(sys.executable)} -c "import sys; '
|
||||
'open(sys.argv[1], \'ab\').write(b\'\\x00\')"'
|
||||
),
|
||||
'types': ['jpeg'],
|
||||
},
|
||||
],
|
||||
}
|
||||
add_config_to_repo(repo_with_passing_hook, config)
|
||||
|
||||
stage_a_file('example.jpeg')
|
||||
|
||||
_test_run(
|
||||
cap_out,
|
||||
store,
|
||||
repo_with_passing_hook,
|
||||
{},
|
||||
(
|
||||
b'Failed',
|
||||
),
|
||||
expected_ret=1,
|
||||
stage=False,
|
||||
)
|
||||
|
||||
|
||||
def test_stages(cap_out, store, repo_with_passing_hook):
|
||||
config = {
|
||||
'repo': 'local',
|
||||
|
||||
Reference in New Issue
Block a user