]>
Commit | Line | Data |
---|---|---|
27bfd950 PY |
1 | #!/bin/sh |
2 | ||
47a528ad | 3 | test_description='git status for submodule' |
27bfd950 PY |
4 | |
5 | . ./test-lib.sh | |
6 | ||
44ca0c8e HV |
7 | test_create_repo_with_commit () { |
8 | test_create_repo "$1" && | |
ee6fc514 | 9 | ( |
44ca0c8e | 10 | cd "$1" && |
ee6fc514 JL |
11 | : >bar && |
12 | git add bar && | |
13 | git commit -m " Add bar" && | |
14 | : >foo && | |
15 | git add foo && | |
16 | git commit -m " Add foo" | |
44ca0c8e HV |
17 | ) |
18 | } | |
19 | ||
20 | test_expect_success 'setup' ' | |
21 | test_create_repo_with_commit sub && | |
ee6fc514 JL |
22 | echo output > .gitignore && |
23 | git add sub .gitignore && | |
27bfd950 PY |
24 | git commit -m "Add submodule sub" |
25 | ' | |
26 | ||
7a23d2d2 | 27 | test_expect_success 'status clean' ' |
ee6fc514 | 28 | git status >output && |
7a23d2d2 | 29 | test_i18ngrep "nothing to commit" output |
27bfd950 | 30 | ' |
ee6fc514 | 31 | |
7a23d2d2 | 32 | test_expect_success 'commit --dry-run -a clean' ' |
ee6fc514 | 33 | test_must_fail git commit --dry-run -a >output && |
7a23d2d2 | 34 | test_i18ngrep "nothing to commit" output |
ee6fc514 JL |
35 | ' |
36 | ||
7a23d2d2 | 37 | test_expect_success 'status with modified file in submodule' ' |
ee6fc514 JL |
38 | (cd sub && git reset --hard) && |
39 | echo "changed" >sub/foo && | |
40 | git status >output && | |
7a23d2d2 | 41 | test_i18ngrep "modified: sub (modified content)" output |
ee6fc514 JL |
42 | ' |
43 | ||
44 | test_expect_success 'status with modified file in submodule (porcelain)' ' | |
45 | (cd sub && git reset --hard) && | |
46 | echo "changed" >sub/foo && | |
47 | git status --porcelain >output && | |
48 | diff output - <<-\EOF | |
49 | M sub | |
50 | EOF | |
51 | ' | |
52 | ||
7a23d2d2 | 53 | test_expect_success 'status with added file in submodule' ' |
ee6fc514 JL |
54 | (cd sub && git reset --hard && echo >foo && git add foo) && |
55 | git status >output && | |
7a23d2d2 | 56 | test_i18ngrep "modified: sub (modified content)" output |
ee6fc514 JL |
57 | ' |
58 | ||
59 | test_expect_success 'status with added file in submodule (porcelain)' ' | |
60 | (cd sub && git reset --hard && echo >foo && git add foo) && | |
61 | git status --porcelain >output && | |
62 | diff output - <<-\EOF | |
63 | M sub | |
64 | EOF | |
65 | ' | |
66 | ||
7a23d2d2 | 67 | test_expect_success 'status with untracked file in submodule' ' |
ee6fc514 JL |
68 | (cd sub && git reset --hard) && |
69 | echo "content" >sub/new-file && | |
70 | git status >output && | |
7a23d2d2 | 71 | test_i18ngrep "modified: sub (untracked content)" output |
ee6fc514 JL |
72 | ' |
73 | ||
7a23d2d2 | 74 | test_expect_success 'status -uno with untracked file in submodule' ' |
3bfc4504 | 75 | git status -uno >output && |
7a23d2d2 | 76 | test_i18ngrep "^nothing to commit" output |
3bfc4504 JL |
77 | ' |
78 | ||
ee6fc514 JL |
79 | test_expect_success 'status with untracked file in submodule (porcelain)' ' |
80 | git status --porcelain >output && | |
81 | diff output - <<-\EOF | |
82 | M sub | |
83 | EOF | |
27bfd950 | 84 | ' |
ee6fc514 | 85 | |
7a23d2d2 | 86 | test_expect_success 'status with added and untracked file in submodule' ' |
85adbf2f JL |
87 | (cd sub && git reset --hard && echo >foo && git add foo) && |
88 | echo "content" >sub/new-file && | |
89 | git status >output && | |
7a23d2d2 | 90 | test_i18ngrep "modified: sub (modified content, untracked content)" output |
85adbf2f JL |
91 | ' |
92 | ||
93 | test_expect_success 'status with added and untracked file in submodule (porcelain)' ' | |
94 | (cd sub && git reset --hard && echo >foo && git add foo) && | |
95 | echo "content" >sub/new-file && | |
96 | git status --porcelain >output && | |
97 | diff output - <<-\EOF | |
98 | M sub | |
99 | EOF | |
100 | ' | |
101 | ||
7a23d2d2 | 102 | test_expect_success 'status with modified file in modified submodule' ' |
85adbf2f JL |
103 | (cd sub && git reset --hard) && |
104 | rm sub/new-file && | |
105 | (cd sub && echo "next change" >foo && git commit -m "next change" foo) && | |
106 | echo "changed" >sub/foo && | |
107 | git status >output && | |
7a23d2d2 | 108 | test_i18ngrep "modified: sub (new commits, modified content)" output |
85adbf2f JL |
109 | ' |
110 | ||
111 | test_expect_success 'status with modified file in modified submodule (porcelain)' ' | |
112 | (cd sub && git reset --hard) && | |
113 | echo "changed" >sub/foo && | |
114 | git status --porcelain >output && | |
115 | diff output - <<-\EOF | |
116 | M sub | |
117 | EOF | |
118 | ' | |
119 | ||
7a23d2d2 | 120 | test_expect_success 'status with added file in modified submodule' ' |
85adbf2f JL |
121 | (cd sub && git reset --hard && echo >foo && git add foo) && |
122 | git status >output && | |
7a23d2d2 | 123 | test_i18ngrep "modified: sub (new commits, modified content)" output |
85adbf2f JL |
124 | ' |
125 | ||
126 | test_expect_success 'status with added file in modified submodule (porcelain)' ' | |
127 | (cd sub && git reset --hard && echo >foo && git add foo) && | |
128 | git status --porcelain >output && | |
129 | diff output - <<-\EOF | |
130 | M sub | |
131 | EOF | |
132 | ' | |
133 | ||
7a23d2d2 | 134 | test_expect_success 'status with untracked file in modified submodule' ' |
85adbf2f JL |
135 | (cd sub && git reset --hard) && |
136 | echo "content" >sub/new-file && | |
137 | git status >output && | |
7a23d2d2 | 138 | test_i18ngrep "modified: sub (new commits, untracked content)" output |
85adbf2f JL |
139 | ' |
140 | ||
141 | test_expect_success 'status with untracked file in modified submodule (porcelain)' ' | |
142 | git status --porcelain >output && | |
143 | diff output - <<-\EOF | |
144 | M sub | |
145 | EOF | |
146 | ' | |
147 | ||
7a23d2d2 | 148 | test_expect_success 'status with added and untracked file in modified submodule' ' |
85adbf2f JL |
149 | (cd sub && git reset --hard && echo >foo && git add foo) && |
150 | echo "content" >sub/new-file && | |
151 | git status >output && | |
7a23d2d2 | 152 | test_i18ngrep "modified: sub (new commits, modified content, untracked content)" output |
85adbf2f JL |
153 | ' |
154 | ||
155 | test_expect_success 'status with added and untracked file in modified submodule (porcelain)' ' | |
156 | (cd sub && git reset --hard && echo >foo && git add foo) && | |
157 | echo "content" >sub/new-file && | |
158 | git status --porcelain >output && | |
159 | diff output - <<-\EOF | |
160 | M sub | |
161 | EOF | |
162 | ' | |
163 | ||
eee49b6c JL |
164 | test_expect_success 'setup .git file for sub' ' |
165 | (cd sub && | |
166 | rm -f new-file | |
167 | REAL="$(pwd)/../.real" && | |
168 | mv .git "$REAL" | |
169 | echo "gitdir: $REAL" >.git) && | |
170 | echo .real >>.gitignore && | |
171 | git commit -m "added .real to .gitignore" .gitignore | |
172 | ' | |
173 | ||
7a23d2d2 | 174 | test_expect_success 'status with added file in modified submodule with .git file' ' |
eee49b6c JL |
175 | (cd sub && git reset --hard && echo >foo && git add foo) && |
176 | git status >output && | |
7a23d2d2 | 177 | test_i18ngrep "modified: sub (new commits, modified content)" output |
eee49b6c JL |
178 | ' |
179 | ||
27bfd950 PY |
180 | test_expect_success 'rm submodule contents' ' |
181 | rm -rf sub/* sub/.git | |
182 | ' | |
ee6fc514 | 183 | |
7a23d2d2 | 184 | test_expect_success 'status clean (empty submodule dir)' ' |
ee6fc514 | 185 | git status >output && |
7a23d2d2 | 186 | test_i18ngrep "nothing to commit" output |
27bfd950 | 187 | ' |
ee6fc514 | 188 | |
7a23d2d2 | 189 | test_expect_success 'status -a clean (empty submodule dir)' ' |
ee6fc514 | 190 | test_must_fail git commit --dry-run -a >output && |
7a23d2d2 | 191 | test_i18ngrep "nothing to commit" output |
27bfd950 PY |
192 | ' |
193 | ||
44ca0c8e HV |
194 | cat >status_expect <<\EOF |
195 | AA .gitmodules | |
196 | A sub1 | |
197 | EOF | |
198 | ||
d4e98b58 | 199 | test_expect_success 'status with merge conflict in .gitmodules' ' |
44ca0c8e HV |
200 | git clone . super && |
201 | test_create_repo_with_commit sub1 && | |
202 | test_tick && | |
203 | test_create_repo_with_commit sub2 && | |
204 | ( | |
205 | cd super && | |
206 | prev=$(git rev-parse HEAD) && | |
207 | git checkout -b add_sub1 && | |
208 | git submodule add ../sub1 && | |
209 | git commit -m "add sub1" && | |
210 | git checkout -b add_sub2 $prev && | |
211 | git submodule add ../sub2 && | |
212 | git commit -m "add sub2" && | |
213 | git checkout -b merge_conflict_gitmodules && | |
214 | test_must_fail git merge add_sub1 && | |
215 | git status -s >../status_actual 2>&1 | |
216 | ) && | |
217 | test_cmp status_actual status_expect | |
218 | ' | |
219 | ||
220 | sha1_merge_sub1=$(cd sub1 && git rev-parse HEAD) | |
221 | sha1_merge_sub2=$(cd sub2 && git rev-parse HEAD) | |
222 | short_sha1_merge_sub1=$(cd sub1 && git rev-parse --short HEAD) | |
223 | short_sha1_merge_sub2=$(cd sub2 && git rev-parse --short HEAD) | |
224 | cat >diff_expect <<\EOF | |
225 | diff --cc .gitmodules | |
226 | index badaa4c,44f999a..0000000 | |
227 | --- a/.gitmodules | |
228 | +++ b/.gitmodules | |
229 | @@@ -1,3 -1,3 +1,9 @@@ | |
230 | ++<<<<<<< HEAD | |
231 | +[submodule "sub2"] | |
232 | + path = sub2 | |
233 | + url = ../sub2 | |
234 | ++======= | |
235 | + [submodule "sub1"] | |
236 | + path = sub1 | |
237 | + url = ../sub1 | |
238 | ++>>>>>>> add_sub1 | |
239 | EOF | |
240 | ||
241 | cat >diff_submodule_expect <<\EOF | |
242 | diff --cc .gitmodules | |
243 | index badaa4c,44f999a..0000000 | |
244 | --- a/.gitmodules | |
245 | +++ b/.gitmodules | |
246 | @@@ -1,3 -1,3 +1,9 @@@ | |
247 | ++<<<<<<< HEAD | |
248 | +[submodule "sub2"] | |
249 | + path = sub2 | |
250 | + url = ../sub2 | |
251 | ++======= | |
252 | + [submodule "sub1"] | |
253 | + path = sub1 | |
254 | + url = ../sub1 | |
255 | ++>>>>>>> add_sub1 | |
256 | EOF | |
257 | ||
d4e98b58 | 258 | test_expect_success 'diff with merge conflict in .gitmodules' ' |
44ca0c8e HV |
259 | ( |
260 | cd super && | |
261 | git diff >../diff_actual 2>&1 | |
262 | ) && | |
263 | test_cmp diff_actual diff_expect | |
264 | ' | |
265 | ||
d4e98b58 | 266 | test_expect_success 'diff --submodule with merge conflict in .gitmodules' ' |
44ca0c8e HV |
267 | ( |
268 | cd super && | |
269 | git diff --submodule >../diff_submodule_actual 2>&1 | |
270 | ) && | |
271 | test_cmp diff_submodule_actual diff_submodule_expect | |
272 | ' | |
273 | ||
27bfd950 | 274 | test_done |