Skip to content

Commit fbf7164

Browse files
jrngitster
authored andcommitted
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 <[email protected]> Signed-off-by: Stefan Beller <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4b9ab0e commit fbf7164

File tree

2 files changed

+27
-26
lines changed

2 files changed

+27
-26
lines changed

submodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ int fetch_populated_submodules(const struct argv_array *options,
689689
git_dir = submodule_git_dir.buf;
690690
if (is_directory(git_dir)) {
691691
if (!quiet)
692-
printf("Fetching submodule %s%s\n", prefix, ce->name);
692+
fprintf(stderr, "Fetching submodule %s%s\n", prefix, ce->name);
693693
cp.dir = submodule_path.buf;
694694
argv_array_push(&argv, default_argv);
695695
argv_array_push(&argv, "--submodule-prefix");

t/t5526-fetch-submodules.sh

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ add_upstream_commit() {
1616
git add subfile &&
1717
git commit -m new subfile &&
1818
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 &&
2021
echo " $head1..$head2 master -> origin/master" >> ../expect.err
2122
) &&
2223
(
@@ -27,6 +28,7 @@ add_upstream_commit() {
2728
git add deepsubfile &&
2829
git commit -m new deepsubfile &&
2930
head2=$(git rev-parse --short HEAD) &&
31+
echo "Fetching submodule submodule/subdir/deepsubmodule" >> ../expect.err
3032
echo "From $pwd/deepsubmodule" >> ../expect.err &&
3133
echo " $head1..$head2 master -> origin/master" >> ../expect.err
3234
)
@@ -56,9 +58,7 @@ test_expect_success setup '
5658
(
5759
cd downstream &&
5860
git submodule update --init --recursive
59-
) &&
60-
echo "Fetching submodule submodule" > expect.out &&
61-
echo "Fetching submodule submodule/subdir/deepsubmodule" >> expect.out
61+
)
6262
'
6363

6464
test_expect_success "fetch --recurse-submodules recurses into submodules" '
@@ -67,7 +67,7 @@ test_expect_success "fetch --recurse-submodules recurses into submodules" '
6767
cd downstream &&
6868
git fetch --recurse-submodules >../actual.out 2>../actual.err
6969
) &&
70-
test_i18ncmp expect.out actual.out &&
70+
test_must_be_empty actual.out &&
7171
test_i18ncmp expect.err actual.err
7272
'
7373

@@ -96,7 +96,7 @@ test_expect_success "using fetchRecurseSubmodules=true in .gitmodules recurses i
9696
git config -f .gitmodules submodule.submodule.fetchRecurseSubmodules true &&
9797
git fetch >../actual.out 2>../actual.err
9898
) &&
99-
test_i18ncmp expect.out actual.out &&
99+
test_must_be_empty actual.out &&
100100
test_i18ncmp expect.err actual.err
101101
'
102102

@@ -127,7 +127,7 @@ test_expect_success "--recurse-submodules overrides fetchRecurseSubmodules setti
127127
git config --unset -f .gitmodules submodule.submodule.fetchRecurseSubmodules &&
128128
git config --unset submodule.submodule.fetchRecurseSubmodules
129129
) &&
130-
test_i18ncmp expect.out actual.out &&
130+
test_must_be_empty actual.out &&
131131
test_i18ncmp expect.err actual.err
132132
'
133133

@@ -146,7 +146,7 @@ test_expect_success "--dry-run propagates to submodules" '
146146
cd downstream &&
147147
git fetch --recurse-submodules --dry-run >../actual.out 2>../actual.err
148148
) &&
149-
test_i18ncmp expect.out actual.out &&
149+
test_must_be_empty actual.out &&
150150
test_i18ncmp expect.err actual.err
151151
'
152152

@@ -155,7 +155,7 @@ test_expect_success "Without --dry-run propagates to submodules" '
155155
cd downstream &&
156156
git fetch --recurse-submodules >../actual.out 2>../actual.err
157157
) &&
158-
test_i18ncmp expect.out actual.out &&
158+
test_must_be_empty actual.out &&
159159
test_i18ncmp expect.err actual.err
160160
'
161161

@@ -166,7 +166,7 @@ test_expect_success "recurseSubmodules=true propagates into submodules" '
166166
git config fetch.recurseSubmodules true
167167
git fetch >../actual.out 2>../actual.err
168168
) &&
169-
test_i18ncmp expect.out actual.out &&
169+
test_must_be_empty actual.out &&
170170
test_i18ncmp expect.err actual.err
171171
'
172172

@@ -180,7 +180,7 @@ test_expect_success "--recurse-submodules overrides config in submodule" '
180180
) &&
181181
git fetch --recurse-submodules >../actual.out 2>../actual.err
182182
) &&
183-
test_i18ncmp expect.out actual.out &&
183+
test_must_be_empty actual.out &&
184184
test_i18ncmp expect.err actual.err
185185
'
186186

@@ -214,16 +214,15 @@ test_expect_success "Recursion stops when no new submodule commits are fetched"
214214
git add submodule &&
215215
git commit -m "new submodule" &&
216216
head2=$(git rev-parse --short HEAD) &&
217-
echo "Fetching submodule submodule" > expect.out.sub &&
218217
echo "From $pwd/." > expect.err.sub &&
219218
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 &&
221220
(
222221
cd downstream &&
223222
git fetch >../actual.out 2>../actual.err
224223
) &&
225224
test_i18ncmp expect.err.sub actual.err &&
226-
test_i18ncmp expect.out.sub actual.out
225+
test_must_be_empty actual.out
227226
'
228227

229228
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" '
269268
)
270269
) &&
271270
test_i18ncmp expect.err.sub actual.err &&
272-
test_i18ncmp expect.out actual.out
271+
test_must_be_empty actual.out
273272
'
274273

275274
test_expect_success "Recursion picks up all submodules when necessary" '
@@ -285,7 +284,8 @@ test_expect_success "Recursion picks up all submodules when necessary" '
285284
git add subdir/deepsubmodule &&
286285
git commit -m "new deepsubmodule"
287286
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 &&
289289
echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
290290
) &&
291291
head1=$(git rev-parse --short HEAD) &&
@@ -295,13 +295,13 @@ test_expect_success "Recursion picks up all submodules when necessary" '
295295
echo "From $pwd/." > expect.err.2 &&
296296
echo " $head1..$head2 master -> origin/master" >> expect.err.2 &&
297297
cat expect.err.sub >> expect.err.2 &&
298-
tail -2 expect.err >> expect.err.2 &&
298+
tail -3 expect.err >> expect.err.2 &&
299299
(
300300
cd downstream &&
301301
git fetch >../actual.out 2>../actual.err
302302
) &&
303303
test_i18ncmp expect.err.2 actual.err &&
304-
test_i18ncmp expect.out actual.out
304+
test_must_be_empty actual.out
305305
'
306306

307307
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
317317
git add subdir/deepsubmodule &&
318318
git commit -m "new deepsubmodule" &&
319319
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 &&
321322
echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub
322323
) &&
323324
(
@@ -335,7 +336,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
335336
git add submodule &&
336337
git commit -m "new submodule" &&
337338
head2=$(git rev-parse --short HEAD) &&
338-
tail -2 expect.err > expect.err.deepsub &&
339+
tail -3 expect.err > expect.err.deepsub &&
339340
echo "From $pwd/." > expect.err &&
340341
echo " $head1..$head2 master -> origin/master" >>expect.err &&
341342
cat expect.err.sub >> expect.err &&
@@ -354,7 +355,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess
354355
git config --unset -f .gitmodules submodule.subdir/deepsubmodule.fetchRecursive
355356
)
356357
) &&
357-
test_i18ncmp expect.out actual.out &&
358+
test_must_be_empty actual.out &&
358359
test_i18ncmp expect.err actual.err
359360
'
360361

@@ -388,7 +389,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
388389
head2=$(git rev-parse --short HEAD) &&
389390
echo "From $pwd/." > expect.err.2 &&
390391
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 &&
392393
(
393394
cd downstream &&
394395
git config fetch.recurseSubmodules on-demand &&
@@ -399,7 +400,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config
399400
cd downstream &&
400401
git config --unset fetch.recurseSubmodules
401402
) &&
402-
test_i18ncmp expect.out.sub actual.out &&
403+
test_must_be_empty actual.out &&
403404
test_i18ncmp expect.err.2 actual.err
404405
'
405406

@@ -416,7 +417,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
416417
head2=$(git rev-parse --short HEAD) &&
417418
echo "From $pwd/." > expect.err.2 &&
418419
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 &&
420421
(
421422
cd downstream &&
422423
git config submodule.submodule.fetchRecurseSubmodules on-demand &&
@@ -427,7 +428,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override
427428
cd downstream &&
428429
git config --unset submodule.submodule.fetchRecurseSubmodules
429430
) &&
430-
test_i18ncmp expect.out.sub actual.out &&
431+
test_must_be_empty actual.out &&
431432
test_i18ncmp expect.err.2 actual.err
432433
'
433434

0 commit comments

Comments
 (0)