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