#!/bin/sh

test_description='git add -u

This test creates a working tree state with three files:

  top (previously committed, modified)
  dir/sub (previously committed, modified)
  dir/other (untracked)

and issues a git add -u with path limiting on "dir" to add
only the updates to dir/sub.

Also tested are "git add -u" without limiting, and "git add -u"
without contents changes, and other conditions'

TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh

test_expect_success setup '
	echo initial >check &&
	echo initial >top &&
	echo initial >foo &&
	mkdir dir1 dir2 &&
	echo initial >dir1/sub1 &&
	echo initial >dir1/sub2 &&
	echo initial >dir2/sub3 &&
	git add check dir1 dir2 top foo &&
	test_tick &&
	git commit -m initial &&

	echo changed >check &&
	echo changed >top &&
	echo changed >dir2/sub3 &&
	rm -f dir1/sub1 &&
	echo other >dir2/other
'

test_expect_success update '
	git add -u dir1 dir2
'

test_expect_success 'update noticed a removal' '
	git ls-files dir1/sub1 >out &&
	test_must_be_empty out
'

test_expect_success 'update touched correct path' '
	git diff-files --name-status dir2/sub3 >out &&
	test_must_be_empty out
'

test_expect_success 'update did not touch other tracked files' '
	echo "M	check" >expect &&
	git diff-files --name-status check >actual &&
	test_cmp expect actual &&

	echo "M	top" >expect &&
	git diff-files --name-status top >actual &&
	test_cmp expect actual
'

test_expect_success 'update did not touch untracked files' '
	git ls-files dir2/other >out &&
	test_must_be_empty out
'

test_expect_success 'cache tree has not been corrupted' '

	git ls-files -s |
	sed -e "s/ 0	/	/" >expect &&
	git ls-tree -r $(git write-tree) |
	sed -e "s/ blob / /" >current &&
	test_cmp expect current

'

test_expect_success 'update from a subdirectory' '
	(
		cd dir1 &&
		echo more >sub2 &&
		git add -u sub2
	)
'

test_expect_success 'change gets noticed' '
	git diff-files --name-status dir1 >out &&
	test_must_be_empty out
'

test_expect_success 'non-qualified update in subdir updates from the root' '
	(
		cd dir1 &&
		echo even more >>sub2 &&
		git --literal-pathspecs add -u &&
		echo even more >>sub2 &&
		git add -u
	) &&
	git diff-files --name-only >actual &&
	test_must_be_empty actual
'

test_expect_success 'replace a file with a symlink' '

	rm foo &&
	test_ln_s_add top foo

'

test_expect_success 'add everything changed' '

	git add -u &&
	git diff-files >out &&
	test_must_be_empty out

'

test_expect_success 'touch and then add -u' '

	touch check &&
	git add -u &&
	git diff-files >out &&
	test_must_be_empty out

'

test_expect_success 'touch and then add explicitly' '

	touch check &&
	git add check &&
	git diff-files >out &&
	test_must_be_empty out

'

test_expect_success 'add -n -u should not add but just report' '

	(
		echo "add '\''check'\''" &&
		echo "remove '\''top'\''"
	) >expect &&
	before=$(git ls-files -s check top) &&
	git count-objects -v >objects_before &&
	echo changed >>check &&
	rm -f top &&
	git add -n -u >actual &&
	after=$(git ls-files -s check top) &&
	git count-objects -v >objects_after &&

	test "$before" = "$after" &&
	test_cmp objects_before objects_after &&
	test_cmp expect actual

'

test_expect_success 'add -u resolves unmerged paths' '
	git reset --hard &&
	one=$(echo 1 | git hash-object -w --stdin) &&
	two=$(echo 2 | git hash-object -w --stdin) &&
	three=$(echo 3 | git hash-object -w --stdin) &&
	{
		for path in path1 path2
		do
			echo "100644 $one 1	$path" &&
			echo "100644 $two 2	$path" &&
			echo "100644 $three 3	$path" || return 1
		done &&
		echo "100644 $one 1	path3" &&
		echo "100644 $one 1	path4" &&
		echo "100644 $one 3	path5" &&
		echo "100644 $one 3	path6"
	} |
	git update-index --index-info &&
	echo 3 >path1 &&
	echo 2 >path3 &&
	echo 2 >path5 &&

	# Fail to explicitly resolve removed paths with "git add"
	test_must_fail git add --no-all path4 &&
	test_must_fail git add --no-all path6 &&

	# "add -u" should notice removals no matter what stages
	# the index entries are in.
	git add -u &&
	git ls-files -s path1 path2 path3 path4 path5 path6 >actual &&
	{
		echo "100644 $three 0	path1" &&
		echo "100644 $two 0	path3" &&
		echo "100644 $two 0	path5"
	} >expect &&
	test_cmp expect actual
'

test_expect_success '"add -u non-existent" should fail' '
	test_must_fail git add -u non-existent &&
	git ls-files >actual &&
	! grep "non-existent" actual
'

test_expect_success '"commit -a" implies "add -u" if index becomes empty' '
	git rm -rf \* &&
	git commit -m clean-slate &&
	test_commit file1 &&
	rm file1.t &&
	test_tick &&
	git commit -a -m remove &&
	git ls-tree HEAD: >out &&
	test_must_be_empty out
'

test_done
