From 59fd7b222a3dcab6c9e03366afe8d12af985aaa1 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 13 Jan 2016 18:20:11 +0100 Subject: [PATCH 1/4] fetch: release pack files before garbage-collecting Before auto-gc'ing, we need to make sure that the pack files are released in case they need to be repacked and garbage-collected. This fixes https://github.com/git-for-windows/git/issues/500 Signed-off-by: Johannes Schindelin Reviewed-by: Jeff King Signed-off-by: Junio C Hamano --- builtin/fetch.c | 2 ++ t/t5510-fetch.sh | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/builtin/fetch.c b/builtin/fetch.c index c85f3471d4b53c..5b58001a982d0c 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1221,6 +1221,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) list.strdup_strings = 1; string_list_clear(&list, 0); + close_all_packs(); + argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL); if (verbosity < 0) argv_array_push(&argv_gc_auto, "--quiet"); diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 0ba9db08847255..e3ee4bd700c3e7 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -708,4 +708,17 @@ test_expect_success 'fetching a one-level ref works' ' ) ' +test_expect_success 'fetching with auto-gc does not lock up' ' + write_script askyesno <<-\EOF && + echo "$*" && + false + EOF + git clone "file://$D" auto-gc && + test_commit test2 && + cd auto-gc && + git config gc.autoPackLimit 1 && + GIT_ASK_YESNO="$D/askyesno" git fetch >fetch.out 2>&1 && + ! grep "Should I try again" fetch.out +' + test_done From 185b3583888715dda8d1e843fa56c2ecf95f50e2 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 13 Jan 2016 18:20:16 +0100 Subject: [PATCH 2/4] am: release pack files before garbage-collecting Before auto-gc'ing, we need to make sure that the pack files are released in case they need to be repacked and garbage-collected. Signed-off-by: Johannes Schindelin Reviewed-by: Jeff King Signed-off-by: Junio C Hamano --- builtin/am.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/am.c b/builtin/am.c index 9fb42fdd714a77..de235cf11a9df9 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1939,6 +1939,7 @@ static void am_run(struct am_state *state, int resume) */ if (!state->rebasing) { am_destroy(state); + close_all_packs(); run_command_v_opt(argv_gc_auto, RUN_GIT_CMD); } } From d1ccdf1cc48a0de0186af05fb0148d57000becfb Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 13 Jan 2016 18:20:21 +0100 Subject: [PATCH 3/4] merge: release pack files before garbage-collecting Before auto-gc'ing, we need to make sure that the pack files are released in case they need to be repacked and garbage-collected. Signed-off-by: Johannes Schindelin Reviewed-by: Jeff King Signed-off-by: Junio C Hamano --- builtin/merge.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/merge.c b/builtin/merge.c index 15bf95b3ac6c54..b98a3489bf24c0 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -404,6 +404,7 @@ static void finish(struct commit *head_commit, * We ignore errors in 'gc --auto', since the * user should see them. */ + close_all_packs(); run_command_v_opt(argv_gc_auto, RUN_GIT_CMD); } } From 13ed4f18d07c817c29c3ce8ee1a4d599ed1bf70b Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Wed, 13 Jan 2016 18:20:26 +0100 Subject: [PATCH 4/4] receive-pack: release pack files before garbage-collecting Before auto-gc'ing, we need to make sure that the pack files are released in case they need to be repacked and garbage-collected. Signed-off-by: Johannes Schindelin Reviewed-by: Jeff King Signed-off-by: Junio C Hamano --- builtin/receive-pack.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index ca38131873aad1..b3104433ed6923 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -1796,6 +1796,7 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) "gc", "--auto", "--quiet", NULL, }; int opt = RUN_GIT_CMD | RUN_COMMAND_STDOUT_TO_STDERR; + close_all_packs(); run_command_v_opt(argv_gc_auto, opt); } if (auto_update_server_info)