f4609b896f
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
159 lines
3.7 KiB
Bash
Executable file
159 lines
3.7 KiB
Bash
Executable file
#!/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
|