t2023-checkout-m.sh   [plain text]


#!/bin/sh

test_description='checkout -m -- <conflicted path>

Ensures that checkout -m on a resolved file restores the conflicted file'

. ./test-lib.sh

test_expect_success setup '
	test_tick &&
	test_commit both.txt both.txt initial &&
	git branch topic &&
	test_commit modified_in_master both.txt in_master &&
	test_commit added_in_master each.txt in_master &&
	git checkout topic &&
	test_commit modified_in_topic both.txt in_topic &&
	test_commit added_in_topic each.txt in_topic
'

test_expect_success 'git merge master' '
    test_must_fail git merge master
'

clean_branchnames () {
	# Remove branch names after conflict lines
	sed 's/^\([<>]\{5,\}\) .*$/\1/'
}

test_expect_success '-m restores 2-way conflicted+resolved file' '
	cp each.txt each.txt.conflicted &&
	echo resolved >each.txt &&
	git add each.txt &&
	git checkout -m -- each.txt &&
	clean_branchnames <each.txt >each.txt.cleaned &&
	clean_branchnames <each.txt.conflicted >each.txt.conflicted.cleaned &&
	test_cmp each.txt.conflicted.cleaned each.txt.cleaned
'

test_expect_success '-m restores 3-way conflicted+resolved file' '
	cp both.txt both.txt.conflicted &&
	echo resolved >both.txt &&
	git add both.txt &&
	git checkout -m -- both.txt &&
	clean_branchnames <both.txt >both.txt.cleaned &&
	clean_branchnames <both.txt.conflicted >both.txt.conflicted.cleaned &&
	test_cmp both.txt.conflicted.cleaned both.txt.cleaned
'

test_done