Skip to content

Commit c4e4c2d

Browse files
committed
Fix merge conflict detection for cherry-pick conflict.
1 parent 5a1accd commit c4e4c2d

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

pre_commit/git.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ def get_root():
2323

2424

2525
def is_in_merge_conflict():
26-
return os.path.exists(os.path.join('.git', 'MERGE_MSG'))
26+
return (
27+
os.path.exists(os.path.join('.git', 'MERGE_MSG')) and
28+
os.path.exists(os.path.join('.git', 'MERGE_HEAD'))
29+
)
2730

2831

2932
def parse_merge_msg_for_conflicts(merge_msg):

tests/git_test.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,21 @@ def test_get_root(empty_git_dir):
1414
assert git.get_root() == empty_git_dir
1515

1616

17-
def test_is_in_merge_conflict(empty_git_dir):
17+
def test_is_not_in_merge_conflict(empty_git_dir):
1818
assert git.is_in_merge_conflict() is False
1919

2020

21-
def test_is_not_in_merge_conflict(in_merge_conflict):
21+
def test_is_in_merge_conflict(in_merge_conflict):
2222
assert git.is_in_merge_conflict() is True
2323

2424

25+
def test_cherry_pick_conflict(in_merge_conflict):
26+
local['git']('merge', '--abort')
27+
foo_ref = local['git']('rev-parse', 'foo').strip()
28+
local['git']('cherry-pick', foo_ref, retcode=None)
29+
assert git.is_in_merge_conflict() is False
30+
31+
2532
@pytest.fixture
2633
def get_files_matching_func():
2734
def get_filenames():

0 commit comments

Comments
 (0)