Add tests for sparse checkout
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Nguyễn Thái Ngọc Duy committed
Aug 20, 2009 at 20:47 UTC
d6b38f61c8125423abdf2b9c10f2187c5fecd80e
1 file changed
+154
t/t1009-read-tree-sparse-checkout.sh
new
+154
@@ -0,0 +1,154 @@
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
+cat >expected.swt <<EOF
59
+S init.t
60
+S sub/added
61
+EOF
62
+test_expect_success 'read-tree with empty .git/info/sparse-checkout' '
63
+ git config core.sparsecheckout true &&
64
+ echo > .git/info/sparse-checkout &&
65
+ git read-tree -m -u HEAD &&
66
+ git ls-files --stage > result &&
67
+ test_cmp expected result &&
68
+ git ls-files -t > result &&
69
+ test_cmp expected.swt result &&
70
+ test ! -f init.t &&
71
+ test ! -f sub/added
72
+'
73
+
74
+cat >expected.swt <<EOF
75
+S init.t
76
+H sub/added
77
+EOF
78
+test_expect_success 'match directories with trailing slash' '
79
+ echo sub/ > .git/info/sparse-checkout &&
80
+ git read-tree -m -u HEAD &&
81
+ git ls-files -t > result &&
82
+ test_cmp expected.swt result &&
83
+ test ! -f init.t &&
84
+ test -f sub/added
85
+'
86
+
87
+cat >expected.swt <<EOF
88
+H init.t
89
+H sub/added
90
+EOF
91
+test_expect_failure 'match directories without trailing slash' '
92
+ echo init.t > .git/info/sparse-checkout &&
93
+ echo sub >> .git/info/sparse-checkout &&
94
+ git read-tree -m -u HEAD &&
95
+ git ls-files -t > result &&
96
+ test_cmp expected.swt result &&
97
+ test ! -f init.t &&
98
+ test -f sub/added
99
+'
100
+
101
+cat >expected.swt <<EOF
102
+H init.t
103
+S sub/added
104
+EOF
105
+test_expect_success 'checkout area changes' '
106
+ echo init.t > .git/info/sparse-checkout &&
107
+ git read-tree -m -u HEAD &&
108
+ git ls-files -t > result &&
109
+ test_cmp expected.swt result &&
110
+ test -f init.t &&
111
+ test ! -f sub/added
112
+'
113
+
114
+test_expect_success 'read-tree updates worktree, absent case' '
115
+ echo sub/added > .git/info/sparse-checkout &&
116
+ git checkout -f top &&
117
+ git read-tree -m -u HEAD^ &&
118
+ test ! -f init.t
119
+'
120
+
121
+test_expect_success 'read-tree updates worktree, dirty case' '
122
+ echo sub/added > .git/info/sparse-checkout &&
123
+ git checkout -f top &&
124
+ echo dirty > init.t &&
125
+ git read-tree -m -u HEAD^ &&
126
+ grep -q dirty init.t &&
127
+ rm init.t
128
+'
129
+
130
+test_expect_success 'read-tree removes worktree, dirty case' '
131
+ echo init.t > .git/info/sparse-checkout &&
132
+ git checkout -f top &&
133
+ echo dirty > added &&
134
+ git read-tree -m -u HEAD^ &&
135
+ grep -q dirty added
136
+'
137
+
138
+test_expect_success 'read-tree adds to worktree, absent case' '
139
+ echo init.t > .git/info/sparse-checkout &&
140
+ git checkout -f removed &&
141
+ git read-tree -u -m HEAD^ &&
142
+ test ! -f sub/added
143
+'
144
+
145
+test_expect_success 'read-tree adds to worktree, dirty case' '
146
+ echo init.t > .git/info/sparse-checkout &&
147
+ git checkout -f removed &&
148
+ mkdir sub &&
149
+ echo dirty > sub/added &&
150
+ git read-tree -u -m HEAD^ &&
151
+ grep -q dirty sub/added
152
+'
153
+
154
+test_done