Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

executable file 163 lines (136 sloc) 3.316 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
#!/bin/sh
#
# Copyright (c) 2008 Nguyễn Thái Ngọc Duy
#

test_description='skip-worktree bit test'

. ./test-lib.sh

cat >expect.full <<EOF
H 1
H 2
H init.t
H sub/1
H sub/2
EOF

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

NULL_SHA1=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391

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

test_absent() {
echo "100644 $NULL_SHA1 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 $NULL_SHA1 1 &&
git update-index --skip-worktree 1
}

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

test_expect_success 'setup' '
test_commit 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 expect.skip result
'

test_expect_success 'update-index' '
setup_absent &&
git update-index 1 &&
test_absent
'

test_expect_success 'update-index' '
setup_dirty &&
git update-index 1 &&
test_dirty
'

test_expect_success 'update-index --remove' '
setup_absent &&
git update-index --remove 1 &&
test -z "$(git ls-files 1)" &&
test ! -f 1
'

test_expect_success 'update-index --remove' '
setup_dirty &&
git update-index --remove 1 &&
test -z "$(git ls-files 1)" &&
echo dirty > expected &&
test_cmp expected 1
'

test_expect_success 'ls-files --delete' '
setup_absent &&
test -z "$(git ls-files -d)"
'

test_expect_success 'ls-files --delete' '
setup_dirty &&
test -z "$(git ls-files -d)"
'

test_expect_success 'ls-files --modified' '
setup_absent &&
test -z "$(git ls-files -m)"
'

test_expect_success 'ls-files --modified' '
setup_dirty &&
test -z "$(git ls-files -m)"
'

test_expect_success 'grep with skip-worktree file' '
git update-index --no-skip-worktree 1 &&
echo test > 1 &&
git update-index 1 &&
git update-index --skip-worktree 1 &&
rm 1 &&
test "$(git grep --no-ext-grep test)" = "1:test"
'

echo ":000000 100644 $_z40 $NULL_SHA1 A 1" > expected
test_expect_success 'diff-index does not examine skip-worktree absent entries' '
setup_absent &&
git diff-index HEAD -- 1 > result &&
test_cmp expected result
'

test_expect_success 'diff-index does not examine skip-worktree dirty entries' '
setup_dirty &&
git diff-index HEAD -- 1 > result &&
test_cmp expected result
'

test_expect_success 'diff-files does not examine skip-worktree absent entries' '
setup_absent &&
test -z "$(git diff-files -- one)"
'

test_expect_success 'diff-files does not examine skip-worktree dirty entries' '
setup_dirty &&
test -z "$(git diff-files -- one)"
'

test_expect_success 'git-rm succeeds on skip-worktree absent entries' '
setup_absent &&
git rm 1
'

test_expect_success 'commit on skip-worktree absent entries' '
git reset &&
setup_absent &&
test_must_fail git commit -m null 1
'

test_expect_success 'commit on skip-worktree dirty entries' '
git reset &&
setup_dirty &&
test_must_fail git commit -m null 1
'

test_done
Something went wrong with that request. Please try again.