#!/bin/sh

test_description="merges with unrelated index changes"

. ./test-lib.sh

# Testcase for some simple merges
#   A
#   o-------o B
#    \
#     \-----o C
#      \
#       \---o D
#        \
#         \-o E
#          \
#           o F
#   Commit A: some file a
#   Commit B: adds file b, modifies end of a
#   Commit C: adds file c
#   Commit D: adds file d, modifies beginning of a
#   Commit E: renames a->subdir/a, adds subdir/e
#   Commit F: empty commit

test_expect_success 'setup trivial merges' '
	test_seq 1 10 >a &&
	git add a &&
	test_tick && git commit -m A &&

	git branch A &&
	git branch B &&
	git branch C &&
	git branch D &&
	git branch E &&
	git branch F &&

	git checkout B &&
	echo b >b &&
	echo 11 >>a &&
	git add a b &&
	test_tick && git commit -m B &&

	git checkout C &&
	echo c >c &&
	git add c &&
	test_tick && git commit -m C &&

	git checkout D &&
	test_seq 2 10 >a &&
	echo d >d &&
	git add a d &&
	test_tick && git commit -m D &&

	git checkout E &&
	mkdir subdir &&
	git mv a subdir/a &&
	echo e >subdir/e &&
	git add subdir &&
	test_tick && git commit -m E &&

	git checkout F &&
	test_tick && git commit --allow-empty -m F
'

test_expect_success 'ff update' '
	git reset --hard &&
	git checkout A^0 &&

	touch random_file && git add random_file &&

	git merge E^0 &&

	test_must_fail git rev-parse HEAD:random_file &&
	test "$(git diff --name-only --cached E)" = "random_file"
'

test_expect_success 'ff update, important file modified' '
	git reset --hard &&
	git checkout A^0 &&

	mkdir subdir &&
	touch subdir/e &&
	git add subdir/e &&

	test_must_fail git merge E^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'resolve, trivial' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s resolve C^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'resolve, non-trivial' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s resolve D^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'recursive' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s recursive C^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'recursive, when merge branch matches merge base' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s recursive F^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'merge-recursive, when index==head but head!=HEAD' '
	git reset --hard &&
	git checkout C^0 &&

	# Make index match B
	git diff C B -- | git apply --cached &&
	# Merge B & F, with B as "head"
	git merge-recursive A -- B F > out &&
	test_i18ngrep "Already up to date" out
'

test_expect_success 'recursive, when file has staged changes not matching HEAD nor what a merge would give' '
	git reset --hard &&
	git checkout B^0 &&

	mkdir subdir &&
	test_seq 1 10 >subdir/a &&
	git add subdir/a &&

	# We have staged changes; merge should error out
	test_must_fail git merge -s recursive E^0 2>err &&
	test_i18ngrep "changes to the following files would be overwritten" err
'

test_expect_success 'recursive, when file has staged changes matching what a merge would give' '
	git reset --hard &&
	git checkout B^0 &&

	mkdir subdir &&
	test_seq 1 11 >subdir/a &&
	git add subdir/a &&

	# We have staged changes; merge should error out
	test_must_fail git merge -s recursive E^0 2>err &&
	test_i18ngrep "changes to the following files would be overwritten" err
'

test_expect_success 'octopus, unrelated file touched' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'octopus, related file removed' '
	git reset --hard &&
	git checkout B^0 &&

	git rm b &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'octopus, related file modified' '
	git reset --hard &&
	git checkout B^0 &&

	echo 12 >>a && git add a &&

	test_must_fail git merge C^0 D^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'ours' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s ours C^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_expect_success 'subtree' '
	git reset --hard &&
	git checkout B^0 &&

	touch random_file && git add random_file &&

	test_must_fail git merge -s subtree E^0 &&
	test_path_is_missing .git/MERGE_HEAD
'

test_done
