Skip to content

Commit

Permalink
Merge branch 'bc/receive-pack-stdout-protection' into maint-1.7.11
Browse files Browse the repository at this point in the history
When "git push" triggered the automatic gc on the receiving end, a
message from "git prune" that said it was removing cruft leaked to
the standard output, breaking the communication protocol.

* bc/receive-pack-stdout-protection:
  receive-pack: do not leak output from auto-gc to standard output
  t/t5400: demonstrate breakage caused by informational message from prune
  • Loading branch information
gitster committed Sep 10, 2012
2 parents 03adeea + 4b7f2fa commit 3f66463
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
3 changes: 2 additions & 1 deletion builtin/receive-pack.c
Expand Up @@ -977,7 +977,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
const char *argv_gc_auto[] = {
"gc", "--auto", "--quiet", NULL,
};
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
int opt = RUN_GIT_CMD | RUN_COMMAND_STDOUT_TO_STDERR;
run_command_v_opt(argv_gc_auto, opt);
}
if (auto_update_server_info)
update_server_info(0);
Expand Down
35 changes: 35 additions & 0 deletions t/t5400-send-pack.sh
Expand Up @@ -145,6 +145,41 @@ test_expect_success 'push --all excludes remote-tracking hierarchy' '
)
'

test_expect_success 'receive-pack runs auto-gc in remote repo' '
rm -rf parent child &&
git init parent &&
(
# Setup a repo with 2 packs
cd parent &&
echo "Some text" >file.txt &&
git add . &&
git commit -m "Initial commit" &&
git repack -adl &&
echo "Some more text" >>file.txt &&
git commit -a -m "Second commit" &&
git repack
) &&
cp -a parent child &&
(
# Set the child to auto-pack if more than one pack exists
cd child &&
git config gc.autopacklimit 1 &&
git branch test_auto_gc &&
# And create a file that follows the temporary object naming
# convention for the auto-gc to remove
: >.git/objects/tmp_test_object &&
test-chmtime =-1209601 .git/objects/tmp_test_object
) &&
(
cd parent &&
echo "Even more text" >>file.txt &&
git commit -a -m "Third commit" &&
git send-pack ../child HEAD:refs/heads/test_auto_gc >output 2>&1 &&
grep "Auto packing the repository for optimum performance." output
) &&
test ! -e child/.git/objects/tmp_test_object
'

rewound_push_setup() {
rm -rf parent child &&
mkdir parent &&
Expand Down

0 comments on commit 3f66463

Please sign in to comment.