mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 00:04:42 +04:00
staged_files_only can handle a crlf-only diff
This commit is contained in:
parent
73848383f2
commit
032d8e2704
2 changed files with 20 additions and 0 deletions
|
|
@ -59,6 +59,11 @@ def _unstaged_changes_cleared(patch_dir: str) -> Generator[None, None, None]:
|
||||||
# There weren't any staged files so we don't need to do anything
|
# There weren't any staged files so we don't need to do anything
|
||||||
# special
|
# special
|
||||||
yield
|
yield
|
||||||
|
elif retcode == 1 and not diff_stdout.strip():
|
||||||
|
# due to behaviour (probably a bug?) in git with crlf endings and
|
||||||
|
# autocrlf set to either `true` or `input` sometimes git will refuse
|
||||||
|
# to show a crlf-only diff to us :(
|
||||||
|
yield
|
||||||
elif retcode == 1 and diff_stdout.strip():
|
elif retcode == 1 and diff_stdout.strip():
|
||||||
patch_filename = f'patch{int(time.time())}-{os.getpid()}'
|
patch_filename = f'patch{int(time.time())}-{os.getpid()}'
|
||||||
patch_filename = os.path.join(patch_dir, patch_filename)
|
patch_filename = os.path.join(patch_dir, patch_filename)
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,21 @@ def test_crlf(in_git_dir, patch_dir, crlf_before, crlf_after, autocrlf):
|
||||||
assert_no_diff()
|
assert_no_diff()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('autocrlf', ('true', 'input'))
|
||||||
|
def test_crlf_diff_only(in_git_dir, patch_dir, autocrlf):
|
||||||
|
# due to a quirk (?) in git -- a diff only in crlf does not show but
|
||||||
|
# still results in an exit code of `1`
|
||||||
|
# we treat this as "no diff" -- though ideally it would discard the diff
|
||||||
|
# while committing
|
||||||
|
cmd_output('git', 'config', '--local', 'core.autocrlf', autocrlf)
|
||||||
|
|
||||||
|
_write(b'1\r\n2\r\n3\r\n')
|
||||||
|
cmd_output('git', 'add', 'foo')
|
||||||
|
_write(b'1\n2\n3\n')
|
||||||
|
with staged_files_only(patch_dir):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def test_whitespace_errors(in_git_dir, patch_dir):
|
def test_whitespace_errors(in_git_dir, patch_dir):
|
||||||
cmd_output('git', 'config', '--local', 'apply.whitespace', 'error')
|
cmd_output('git', 'config', '--local', 'apply.whitespace', 'error')
|
||||||
test_crlf(in_git_dir, patch_dir, True, True, 'true')
|
test_crlf(in_git_dir, patch_dir, True, True, 'true')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue