Fix check-merge-conflict against binary files
diff --git a/pre_commit_hooks/check_merge_conflict.py b/pre_commit_hooks/check_merge_conflict.py index ec09473..4a98843 100644 --- a/pre_commit_hooks/check_merge_conflict.py +++ b/pre_commit_hooks/check_merge_conflict.py
@@ -5,10 +5,10 @@ import sys CONFLICT_PATTERNS = [ - '<<<<<<< ', - '======= ', - '=======\n', - '>>>>>>> ' + b'<<<<<<< ', + b'======= ', + b'=======\n', + b'>>>>>>> ' ] WARNING_MSG = 'Merge conflict string "{0}" found in {1}:{2}' @@ -30,11 +30,13 @@ retcode = 0 for filename in args.filenames: - with open(filename) as inputfile: + with open(filename, 'rb') as inputfile: for i, line in enumerate(inputfile): for pattern in CONFLICT_PATTERNS: if line.startswith(pattern): - print(WARNING_MSG.format(pattern, filename, i + 1)) + print(WARNING_MSG.format( + pattern.decode(), filename, i + 1, + )) retcode = 1 return retcode
diff --git a/testing/resources/img1.jpg b/testing/resources/img1.jpg new file mode 100644 index 0000000..dea4262 --- /dev/null +++ b/testing/resources/img1.jpg Binary files differ
diff --git a/tests/check_merge_conflict_test.py b/tests/check_merge_conflict_test.py index 07805b1..be1d51f 100644 --- a/tests/check_merge_conflict_test.py +++ b/tests/check_merge_conflict_test.py
@@ -3,12 +3,14 @@ import io import os +import shutil import pytest from pre_commit_hooks.check_merge_conflict import detect_merge_conflict from pre_commit_hooks.util import cmd_output from testing.util import cwd +from testing.util import get_resource_path from testing.util import write_file @@ -109,6 +111,12 @@ assert detect_merge_conflict(['f1']) == 0 +@pytest.mark.usefixtures('f1_is_a_conflict_file') +def test_ignores_binary_files(): + shutil.copy(get_resource_path('img1.jpg'), 'f1') + assert detect_merge_conflict(['f1']) == 0 + + @pytest.mark.usefixtures('in_tmpdir') def test_does_not_care_when_not_in_a_merge(): with io.open('README.md', 'w') as readme_file: