submodule.c: write "Fetching submodule <foo>" to stderr
The "Pushing submodule <foo>" progress output correctly goes to stderr, but "Fetching submodule <foo>" is going to stdout by mistake. Fix it to write to stderr. Noticed while trying to implement a parallel submodule fetch. When this particular output line went to a different file descriptor, it was buffered separately, resulting in wrongly interleaved output if we copied it to the terminal naively. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jonathan Nieder committed
Dec 15, 2015 at 16:04 UTC
fbf71645d12d30219e88598c4867ef7c2fe48cee
2 files changed
+27
-26
submodule.c
+1
-1
@@ -689,7 +689,7 @@ int fetch_populated_submodules(const struct argv_array *options,
689
git_dir = submodule_git_dir.buf;
690
if (is_directory(git_dir)) {
691
if (!quiet)
692
- printf("Fetching submodule %s%s\n", prefix, ce->name);
692
+ fprintf(stderr, "Fetching submodule %s%s\n", prefix, ce->name);
693
cp.dir = submodule_path.buf;
694
argv_array_push(&argv, default_argv);
695
argv_array_push(&argv, "--submodule-prefix");
t/t5526-fetch-submodules.sh
+26
-25
@@ -16,7 +16,8 @@ add_upstream_commit() {
16
git add subfile &&
17
git commit -m new subfile &&
18
head2=$(git rev-parse --short HEAD) &&
19
- echo "From $pwd/submodule" > ../expect.err &&
19
+ echo "Fetching submodule submodule" > ../expect.err &&
20
+ echo "From $pwd/submodule" >> ../expect.err &&
21
echo " $head1..$head2 master -> origin/master" >> ../expect.err
22
) &&
23
(
@@ -27,6 +28,7 @@ add_upstream_commit() {
28
git add deepsubfile &&
29
git commit -m new deepsubfile &&
30
head2=$(git rev-parse --short HEAD) &&
31
+ echo "Fetching submodule submodule/subdir/deepsubmodule" >> ../expect.err
32
echo "From $pwd/deepsubmodule" >> ../expect.err &&
33
echo " $head1..$head2 master -> origin/master" >> ../expect.err
34
)
@@ -56,9 +58,7 @@ test_expect_success setup '
58
(
59
cd downstream &&
60
git submodule update --init --recursive
59
- ) &&
60
- echo "Fetching submodule submodule" > expect.out &&
61
- echo "Fetching submodule submodule/subdir/deepsubmodule" >> expect.out
61
+ )
62
'
63
64
test_expect_success "fetch --recurse-submodules recurses into submodules" '
@@ -67,7 +67,7 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
67
cd downstream &&
68
git fetch --recurse-submodules >../actual.out 2>../actual.err
69
) &&
70
- test_i18ncmp expect.out actual.out &&
70
+ test_must_be_empty actual.out &&
71
test_i18ncmp expect.err actual.err
72
'
73
@@ -96,7 +96,7 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
96
git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
97
git fetch >../actual.out 2>../actual.err
98
) &&
99
- test_i18ncmp expect.out actual.out &&
99
+ test_must_be_empty actual.out &&
100
test_i18ncmp expect.err actual.err
101
'
102
@@ -127,7 +127,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
127
git config --unset -f .gitmodules submodule.submodule.fetchRecurseSubmodules &&
128
git config --unset submodule.submodule.fetchRecurseSubmodules
129
) &&
130
- test_i18ncmp expect.out actual.out &&
130
+ test_must_be_empty actual.out &&
131
test_i18ncmp expect.err actual.err
132
'
133
@@ -146,7 +146,7 @@ test_expect_success "--dry-run propagates to submodules" '
146
cd downstream &&
147
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
148
) &&
149
- test_i18ncmp expect.out actual.out &&
149
+ test_must_be_empty actual.out &&
150
test_i18ncmp expect.err actual.err
151
'
152
@@ -155,7 +155,7 @@ test_expect_success "Without --dry-run propagates to submodules" '
155
cd downstream &&
156
git fetch --recurse-submodules >../actual.out 2>../actual.err
157
) &&
158
- test_i18ncmp expect.out actual.out &&
158
+ test_must_be_empty actual.out &&
159
test_i18ncmp expect.err actual.err
160
'
161
@@ -166,7 +166,7 @@ test_expect_success "recurseSubmodules=true propagates into submodules" '
166
git config fetch.recurseSubmodules true
167
git fetch >../actual.out 2>../actual.err
168
) &&
169
- test_i18ncmp expect.out actual.out &&
169
+ test_must_be_empty actual.out &&
170
test_i18ncmp expect.err actual.err
171
'
172
@@ -180,7 +180,7 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
180
) &&
181
git fetch --recurse-submodules >../actual.out 2>../actual.err
182
) &&
183
- test_i18ncmp expect.out actual.out &&
183
+ test_must_be_empty actual.out &&
184
test_i18ncmp expect.err actual.err
185
'
186
@@ -214,16 +214,15 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
214
git add submodule &&
215
git commit -m "new submodule" &&
216
head2=$(git rev-parse --short HEAD) &&
217
- echo "Fetching submodule submodule" > expect.out.sub &&
217
echo "From $pwd/." > expect.err.sub &&
218
echo " $head1..$head2 master -> origin/master" >>expect.err.sub &&
220
- head -2 expect.err >> expect.err.sub &&
219
+ head -3 expect.err >> expect.err.sub &&
220
(
221
cd downstream &&
222
git fetch >../actual.out 2>../actual.err
223
) &&
224
test_i18ncmp expect.err.sub actual.err &&
226
- test_i18ncmp expect.out.sub actual.out
225
+ test_must_be_empty actual.out
226
'
227
228
test_expect_success "Recursion doesn't happen when new superproject commits don't change any submodules" '
@@ -269,7 +268,7 @@ test_expect_success "Recursion picks up config in submodule" '
268
)
269
) &&
270
test_i18ncmp expect.err.sub actual.err &&
272
- test_i18ncmp expect.out actual.out
271
+ test_must_be_empty actual.out
272
'
273
274
test_expect_success "Recursion picks up all submodules when necessary" '
@@ -285,7 +284,8 @@ test_expect_success "Recursion picks up all submodules when necessary" '
284
git add subdir/deepsubmodule &&
285
git commit -m "new deepsubmodule"
286
head2=$(git rev-parse --short HEAD) &&
288
- echo "From $pwd/submodule" > ../expect.err.sub &&
287
+ echo "Fetching submodule submodule" > ../expect.err.sub &&
288
+ echo "From $pwd/submodule" >> ../expect.err.sub &&
289
echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
290
) &&
291
head1=$(git rev-parse --short HEAD) &&
@@ -295,13 +295,13 @@ test_expect_success "Recursion picks up all submodules when necessary" '
295
echo "From $pwd/." > expect.err.2 &&
296
echo " $head1..$head2 master -> origin/master" >> expect.err.2 &&
297
cat expect.err.sub >> expect.err.2 &&
298
- tail -2 expect.err >> expect.err.2 &&
298
+ tail -3 expect.err >> expect.err.2 &&
299
(
300
cd downstream &&
301
git fetch >../actual.out 2>../actual.err
302
) &&
303
test_i18ncmp expect.err.2 actual.err &&
304
- test_i18ncmp expect.out actual.out
304
+ test_must_be_empty actual.out
305
'
306
307
test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no new commits are fetched in the superproject (and ignores config)" '
@@ -317,7 +317,8 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne
317
git add subdir/deepsubmodule &&
318
git commit -m "new deepsubmodule" &&
319
head2=$(git rev-parse --short HEAD) &&
320
- echo "From $pwd/submodule" > ../expect.err.sub &&
320
+ echo Fetching submodule submodule > ../expect.err.sub &&
321
+ echo "From $pwd/submodule" >> ../expect.err.sub &&
322
echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
323
) &&
324
(
@@ -335,7 +336,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
336
git add submodule &&
337
git commit -m "new submodule" &&
338
head2=$(git rev-parse --short HEAD) &&
338
- tail -2 expect.err > expect.err.deepsub &&
339
+ tail -3 expect.err > expect.err.deepsub &&
340
echo "From $pwd/." > expect.err &&
341
echo " $head1..$head2 master -> origin/master" >>expect.err &&
342
cat expect.err.sub >> expect.err &&
@@ -354,7 +355,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
355
git config --unset -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive
356
)
357
) &&
357
- test_i18ncmp expect.out actual.out &&
358
+ test_must_be_empty actual.out &&
359
test_i18ncmp expect.err actual.err
360
'
361
@@ -388,7 +389,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
389
head2=$(git rev-parse --short HEAD) &&
390
echo "From $pwd/." > expect.err.2 &&
391
echo " $head1..$head2 master -> origin/master" >>expect.err.2 &&
391
- head -2 expect.err >> expect.err.2 &&
392
+ head -3 expect.err >> expect.err.2 &&
393
(
394
cd downstream &&
395
git config fetch.recurseSubmodules on-demand &&
@@ -399,7 +400,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
400
cd downstream &&
401
git config --unset fetch.recurseSubmodules
402
) &&
402
- test_i18ncmp expect.out.sub actual.out &&
403
+ test_must_be_empty actual.out &&
404
test_i18ncmp expect.err.2 actual.err
405
'
406
@@ -416,7 +417,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
417
head2=$(git rev-parse --short HEAD) &&
418
echo "From $pwd/." > expect.err.2 &&
419
echo " $head1..$head2 master -> origin/master" >>expect.err.2 &&
419
- head -2 expect.err >> expect.err.2 &&
420
+ head -3 expect.err >> expect.err.2 &&
421
(
422
cd downstream &&
423
git config submodule.submodule.fetchRecurseSubmodules on-demand &&
@@ -427,7 +428,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
428
cd downstream &&
429
git config --unset submodule.submodule.fetchRecurseSubmodules
430
) &&
430
- test_i18ncmp expect.out.sub actual.out &&
431
+ test_must_be_empty actual.out &&
432
test_i18ncmp expect.err.2 actual.err
433
'
434