#!/bin/sh
#
# Copyright (c) 2008 Nguyễn Thái Ngọc Duy
#

test_description='test worktree writing operations when skip-worktree is used'

. ./test-lib.sh

test_expect_success 'setup' '
	test_commit init &&
	echo modified >> init.t &&
	touch added &&
	git add init.t added &&
	git commit -m "modified and added" &&
	git tag top
'

test_expect_success 'read-tree updates worktree, absent case' '
	git checkout -f top &&
	git update-index --skip-worktree init.t &&
	rm init.t &&
	git read-tree -m -u HEAD^ &&
	echo init > expected &&
	test_cmp expected init.t
'

test_expect_success 'read-tree updates worktree, dirty case' '
	git checkout -f top &&
	git update-index --skip-worktree init.t &&
	echo dirty >> init.t &&
	test_must_fail git read-tree -m -u HEAD^ &&
	grep -q dirty init.t &&
	test "$(git ls-files -t init.t)" = "S init.t" &&
	git update-index --no-skip-worktree init.t
'

test_expect_success 'read-tree removes worktree, absent case' '
	git checkout -f top &&
	git update-index --skip-worktree added &&
	rm added &&
	git read-tree -m -u HEAD^ &&
	test ! -f added
'

test_expect_success 'read-tree removes worktree, dirty case' '
	git checkout -f top &&
	git update-index --skip-worktree added &&
	echo dirty >> added &&
	test_must_fail git read-tree -m -u HEAD^ &&
	grep -q dirty added &&
	test "$(git ls-files -t added)" = "S added" &&
	git update-index --no-skip-worktree added
'

setup_absent() {
	test -f 1 && rm 1
	git update-index --remove 1 &&
	git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 &&
	git update-index --skip-worktree 1
}

test_absent() {
	echo "100644 $EMPTY_BLOB 0	1" > expected &&
	git ls-files --stage 1 > result &&
	test_cmp expected result &&
	test ! -f 1
}

setup_dirty() {
	git update-index --force-remove 1 &&
	echo dirty > 1 &&
	git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 &&
	git update-index --skip-worktree 1
}

test_dirty() {
	echo "100644 $EMPTY_BLOB 0	1" > expected &&
	git ls-files --stage 1 > result &&
	test_cmp expected result &&
	echo dirty > expected
	test_cmp expected 1
}

cat >expected <<EOF
S 1
H 2
H init.t
S sub/1
H sub/2
EOF

test_expect_success 'index setup' '
	git checkout -f init &&
	mkdir sub &&
	touch ./1 ./2 sub/1 sub/2 &&
	git add 1 2 sub/1 sub/2 &&
	git update-index --skip-worktree 1 sub/1 &&
	git ls-files -t > result &&
	test_cmp expected result
'

test_expect_success 'git-add ignores worktree content' '
	setup_absent &&
	git add 1 &&
	test_absent
'

test_expect_success 'git-add ignores worktree content' '
	setup_dirty &&
	git add 1 &&
	test_dirty
'

test_expect_success 'git-rm fails if worktree is dirty' '
	setup_dirty &&
	test_must_fail git rm 1 &&
	test_dirty
'

cat >expected <<EOF
Would remove expected
Would remove result
EOF
test_expect_success 'git-clean, absent case' '
	setup_absent &&
	git clean -n > result &&
	test_i18ncmp expected result
'

test_expect_success 'git-clean, dirty case' '
	setup_dirty &&
	git clean -n > result &&
	test_i18ncmp expected result
'

test_expect_success '--ignore-skip-worktree-entries leaves worktree alone' '
	test_commit keep-me &&
	git update-index --skip-worktree keep-me.t &&
	rm keep-me.t &&

	: ignoring the worktree &&
	git update-index --remove --ignore-skip-worktree-entries keep-me.t &&
	git diff-index --cached --exit-code HEAD &&

	: not ignoring the worktree, a deletion is staged &&
	git update-index --remove keep-me.t &&
	test_must_fail git diff-index --cached --exit-code HEAD \
		--diff-filter=D -- keep-me.t
'

#TODO test_expect_failure 'git-apply adds file' false
#TODO test_expect_failure 'git-apply updates file' false
#TODO test_expect_failure 'git-apply removes file' false
#TODO test_expect_failure 'git-mv to skip-worktree' false
#TODO test_expect_failure 'git-mv from skip-worktree' false
#TODO test_expect_failure 'git-checkout' false

test_done
