Fix non-ascii merge commit messages in python2

This commit is contained in:
Anthony Sottile 2017-05-10 12:49:39 -07:00
parent e3b14c35f7
commit 964948b33d
3 changed files with 18 additions and 5 deletions

View file

@ -48,10 +48,10 @@ def is_in_merge_conflict():
def parse_merge_msg_for_conflicts(merge_msg): def parse_merge_msg_for_conflicts(merge_msg):
# Conflicted files start with tabs # Conflicted files start with tabs
return [ return [
line.lstrip('#').strip() line.lstrip(b'#').strip().decode('UTF-8')
for line in merge_msg.splitlines() for line in merge_msg.splitlines()
# '#\t' for git 2.4.1 # '#\t' for git 2.4.1
if line.startswith(('\t', '#\t')) if line.startswith((b'\t', b'#\t'))
] ]
@ -60,7 +60,7 @@ def get_conflicted_files():
logger.info('Checking merge-conflict files only.') logger.info('Checking merge-conflict files only.')
# Need to get the conflicted files from the MERGE_MSG because they could # Need to get the conflicted files from the MERGE_MSG because they could
# have resolved the conflict by choosing one side or the other # have resolved the conflict by choosing one side or the other
merge_msg = open(os.path.join(get_git_dir('.'), 'MERGE_MSG')).read() merge_msg = open(os.path.join(get_git_dir('.'), 'MERGE_MSG'), 'rb').read()
merge_conflict_filenames = parse_merge_msg_for_conflicts(merge_msg) merge_conflict_filenames = parse_merge_msg_for_conflicts(merge_msg)
# This will get the rest of the changes made after the merge. # This will get the rest of the changes made after the merge.

View file

@ -1,3 +1,4 @@
# -*- coding: UTF-8 -*-
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import unicode_literals from __future__ import unicode_literals
@ -190,6 +191,18 @@ def test_commit_am(tempdir_factory):
assert ret == 0 assert ret == 0
def test_unicode_merge_commit_message(tempdir_factory):
path = make_consuming_repo(tempdir_factory, 'script_hooks_repo')
with cwd(path):
assert install(Runner(path, C.CONFIG_FILE)) == 0
cmd_output('git', 'checkout', 'master', '-b', 'foo')
cmd_output('git', 'commit', '--allow-empty', '-m', 'branch2')
cmd_output('git', 'checkout', 'master')
cmd_output('git', 'merge', 'foo', '--no-ff', '--no-commit', '-m', '')
# Used to crash
cmd_output('git', 'commit', '--no-edit')
def test_install_idempotent(tempdir_factory): def test_install_idempotent(tempdir_factory):
path = make_consuming_repo(tempdir_factory, 'script_hooks_repo') path = make_consuming_repo(tempdir_factory, 'script_hooks_repo')
with cwd(path): with cwd(path):

View file

@ -142,8 +142,8 @@ def test_get_conflicted_files_unstaged_files(in_merge_conflict):
assert ret == {'conflict_file'} assert ret == {'conflict_file'}
MERGE_MSG = "Merge branch 'foo' into bar\n\nConflicts:\n\tconflict_file\n" MERGE_MSG = b"Merge branch 'foo' into bar\n\nConflicts:\n\tconflict_file\n"
OTHER_MERGE_MSG = MERGE_MSG + '\tother_conflict_file\n' OTHER_MERGE_MSG = MERGE_MSG + b'\tother_conflict_file\n'
@pytest.mark.parametrize( @pytest.mark.parametrize(