]> git.ipfire.org Git - thirdparty/git.git/blob - t/t7011-skip-worktree-reading.sh
The sixth batch
[thirdparty/git.git] / t / t7011-skip-worktree-reading.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2008 Nguyễn Thái Ngọc Duy
4 #
5
6 test_description='skip-worktree bit test'
7
8 . ./test-lib.sh
9
10 cat >expect.full <<EOF
11 H 1
12 H 2
13 H init.t
14 H sub/1
15 H sub/2
16 EOF
17
18 cat >expect.skip <<EOF
19 S 1
20 H 2
21 H init.t
22 S sub/1
23 H sub/2
24 EOF
25
26 setup_absent() {
27 test -f 1 && rm 1
28 git update-index --remove 1 &&
29 git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 &&
30 git update-index --skip-worktree 1
31 }
32
33 test_absent() {
34 echo "100644 $EMPTY_BLOB 0 1" > expected &&
35 git ls-files --stage 1 > result &&
36 test_cmp expected result &&
37 test ! -f 1
38 }
39
40 setup_dirty() {
41 git update-index --force-remove 1 &&
42 echo dirty > 1 &&
43 git update-index --add --cacheinfo 100644 $EMPTY_BLOB 1 &&
44 git update-index --skip-worktree 1
45 }
46
47 test_dirty() {
48 echo "100644 $EMPTY_BLOB 0 1" > expected &&
49 git ls-files --stage 1 > result &&
50 test_cmp expected result &&
51 echo dirty > expected
52 test_cmp expected 1
53 }
54
55 test_expect_success 'setup' '
56 test_commit init &&
57 mkdir sub &&
58 touch ./1 ./2 sub/1 sub/2 &&
59 git add 1 2 sub/1 sub/2 &&
60 git update-index --skip-worktree 1 sub/1 &&
61 git ls-files -t > result &&
62 test_cmp expect.skip result
63 '
64
65 test_expect_success 'update-index' '
66 setup_absent &&
67 git update-index 1 &&
68 test_absent
69 '
70
71 test_expect_success 'update-index' '
72 setup_dirty &&
73 git update-index 1 &&
74 test_dirty
75 '
76
77 test_expect_success 'update-index --remove' '
78 setup_absent &&
79 git update-index --remove 1 &&
80 test -z "$(git ls-files 1)" &&
81 test ! -f 1
82 '
83
84 test_expect_success 'update-index --remove' '
85 setup_dirty &&
86 git update-index --remove 1 &&
87 test -z "$(git ls-files 1)" &&
88 echo dirty > expected &&
89 test_cmp expected 1
90 '
91
92 test_expect_success 'ls-files --deleted' '
93 setup_absent &&
94 test -z "$(git ls-files -d)"
95 '
96
97 test_expect_success 'ls-files --deleted' '
98 setup_dirty &&
99 test -z "$(git ls-files -d)"
100 '
101
102 test_expect_success 'ls-files --modified' '
103 setup_absent &&
104 test -z "$(git ls-files -m)"
105 '
106
107 test_expect_success 'ls-files --modified' '
108 setup_dirty &&
109 test -z "$(git ls-files -m)"
110 '
111
112 test_expect_success 'grep with skip-worktree file' '
113 git update-index --no-skip-worktree 1 &&
114 echo test > 1 &&
115 git update-index 1 &&
116 git update-index --skip-worktree 1 &&
117 rm 1 &&
118 test "$(git grep --no-ext-grep test)" = "1:test"
119 '
120
121 echo ":000000 100644 $ZERO_OID $EMPTY_BLOB A 1" > expected
122 test_expect_success 'diff-index does not examine skip-worktree absent entries' '
123 setup_absent &&
124 git diff-index HEAD -- 1 > result &&
125 test_cmp expected result
126 '
127
128 test_expect_success 'diff-index does not examine skip-worktree dirty entries' '
129 setup_dirty &&
130 git diff-index HEAD -- 1 > result &&
131 test_cmp expected result
132 '
133
134 test_expect_success 'diff-files does not examine skip-worktree absent entries' '
135 setup_absent &&
136 test -z "$(git diff-files -- one)"
137 '
138
139 test_expect_success 'diff-files does not examine skip-worktree dirty entries' '
140 setup_dirty &&
141 test -z "$(git diff-files -- one)"
142 '
143
144 test_expect_success 'git-rm succeeds on skip-worktree absent entries' '
145 setup_absent &&
146 git rm 1
147 '
148
149 test_expect_success 'commit on skip-worktree absent entries' '
150 git reset &&
151 setup_absent &&
152 test_must_fail git commit -m null 1
153 '
154
155 test_expect_success 'commit on skip-worktree dirty entries' '
156 git reset &&
157 setup_dirty &&
158 test_must_fail git commit -m null 1
159 '
160
161 test_done