Merge branch 'jn/maint-plug-leak'
[git] / t / t1011-read-tree-sparse-checkout.sh
1 #!/bin/sh
2
3 test_description='sparse checkout tests'
4
5 . ./test-lib.sh
6
7 cat >expected <<EOF
8 100644 77f0ba1734ed79d12881f81b36ee134de6a3327b 0       init.t
9 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       sub/added
10 EOF
11 test_expect_success 'setup' '
12         test_commit init &&
13         echo modified >> init.t &&
14         mkdir sub &&
15         touch sub/added &&
16         git add init.t sub/added &&
17         git commit -m "modified and added" &&
18         git tag top &&
19         git rm sub/added &&
20         git commit -m removed &&
21         git tag removed &&
22         git checkout top &&
23         git ls-files --stage > result &&
24         test_cmp expected result
25 '
26
27 cat >expected.swt <<EOF
28 H init.t
29 H sub/added
30 EOF
31 test_expect_success 'read-tree without .git/info/sparse-checkout' '
32         git read-tree -m -u HEAD &&
33         git ls-files --stage > result &&
34         test_cmp expected result &&
35         git ls-files -t > result &&
36         test_cmp expected.swt result
37 '
38
39 test_expect_success 'read-tree with .git/info/sparse-checkout but disabled' '
40         echo > .git/info/sparse-checkout
41         git read-tree -m -u HEAD &&
42         git ls-files -t > result &&
43         test_cmp expected.swt result &&
44         test -f init.t &&
45         test -f sub/added
46 '
47
48 test_expect_success 'read-tree --no-sparse-checkout with empty .git/info/sparse-checkout and enabled' '
49         git config core.sparsecheckout true &&
50         echo > .git/info/sparse-checkout &&
51         git read-tree --no-sparse-checkout -m -u HEAD &&
52         git ls-files -t > result &&
53         test_cmp expected.swt result &&
54         test -f init.t &&
55         test -f sub/added
56 '
57
58 test_expect_success 'read-tree with empty .git/info/sparse-checkout' '
59         git config core.sparsecheckout true &&
60         echo > .git/info/sparse-checkout &&
61         test_must_fail git read-tree -m -u HEAD &&
62         git ls-files --stage > result &&
63         test_cmp expected result &&
64         git ls-files -t > result &&
65         test_cmp expected.swt result &&
66         test -f init.t &&
67         test -f sub/added
68 '
69
70 cat >expected.swt <<EOF
71 S init.t
72 H sub/added
73 EOF
74 test_expect_success 'match directories with trailing slash' '
75         echo sub/ > .git/info/sparse-checkout &&
76         git read-tree -m -u HEAD &&
77         git ls-files -t > result &&
78         test_cmp expected.swt result &&
79         test ! -f init.t &&
80         test -f sub/added
81 '
82
83 cat >expected.swt <<EOF
84 H init.t
85 H sub/added
86 EOF
87 test_expect_failure 'match directories without trailing slash' '
88         echo init.t > .git/info/sparse-checkout &&
89         echo sub >> .git/info/sparse-checkout &&
90         git read-tree -m -u HEAD &&
91         git ls-files -t > result &&
92         test_cmp expected.swt result &&
93         test ! -f init.t &&
94         test -f sub/added
95 '
96
97 cat >expected.swt <<EOF
98 H init.t
99 S sub/added
100 EOF
101 test_expect_success 'checkout area changes' '
102         echo init.t > .git/info/sparse-checkout &&
103         git read-tree -m -u HEAD &&
104         git ls-files -t > result &&
105         test_cmp expected.swt result &&
106         test -f init.t &&
107         test ! -f sub/added
108 '
109
110 test_expect_success 'read-tree updates worktree, absent case' '
111         echo sub/added > .git/info/sparse-checkout &&
112         git checkout -f top &&
113         git read-tree -m -u HEAD^ &&
114         test ! -f init.t
115 '
116
117 test_expect_success 'read-tree updates worktree, dirty case' '
118         echo sub/added > .git/info/sparse-checkout &&
119         git checkout -f top &&
120         echo dirty > init.t &&
121         git read-tree -m -u HEAD^ &&
122         grep -q dirty init.t &&
123         rm init.t
124 '
125
126 test_expect_success 'read-tree removes worktree, dirty case' '
127         echo init.t > .git/info/sparse-checkout &&
128         git checkout -f top &&
129         echo dirty > added &&
130         git read-tree -m -u HEAD^ &&
131         grep -q dirty added
132 '
133
134 test_expect_success 'read-tree adds to worktree, absent case' '
135         echo init.t > .git/info/sparse-checkout &&
136         git checkout -f removed &&
137         git read-tree -u -m HEAD^ &&
138         test ! -f sub/added
139 '
140
141 test_expect_success 'read-tree adds to worktree, dirty case' '
142         echo init.t > .git/info/sparse-checkout &&
143         git checkout -f removed &&
144         mkdir sub &&
145         echo dirty > sub/added &&
146         git read-tree -u -m HEAD^ &&
147         grep -q dirty sub/added
148 '
149
150 test_done