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: