diff --git a/pre_commit_hooks/check_merge_conflict.py b/pre_commit_hooks/check_merge_conflict.py index ec094734..4a988432 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 @@ def detect_merge_conflict(argv=None): 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 00000000..dea42627 Binary files /dev/null and b/testing/resources/img1.jpg differ diff --git a/tests/check_merge_conflict_test.py b/tests/check_merge_conflict_test.py index 07805b16..be1d51fd 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 @@ def test_merge_conflicts_ok(ok_contents): 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: