diff options
author | Junio C Hamano <gitster@pobox.com> | 2016-02-05 14:54:13 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-02-05 14:54:13 -0800 |
commit | f748e6916749e35fc54c24eb6e02e1182c62a052 (patch) | |
tree | 48c857eefa9b5c985feab4fcbcd38ed26c16a2fd | |
parent | b11a3badf2353d69a244348991ff35f823f6b967 (diff) | |
parent | d5621020c1e0edfa998cb5c5e80cdf47f36ffb1a (diff) | |
download | git-f748e6916749e35fc54c24eb6e02e1182c62a052.tar.gz |
Merge branch 'js/close-packs-before-gc' into maint
Many codepaths that run "gc --auto" before exiting kept packfiles
mapped and left the file descriptors to them open, which was not
friendly to systems that cannot remove files that are open. They
now close the packs before doing so.
* js/close-packs-before-gc:
receive-pack: release pack files before garbage-collecting
merge: release pack files before garbage-collecting
am: release pack files before garbage-collecting
fetch: release pack files before garbage-collecting
-rw-r--r-- | builtin/am.c | 1 | ||||
-rw-r--r-- | builtin/fetch.c | 2 | ||||
-rw-r--r-- | builtin/merge.c | 1 | ||||
-rw-r--r-- | builtin/receive-pack.c | 1 | ||||
-rwxr-xr-x | t/t5510-fetch.sh | 13 |
5 files changed, 18 insertions, 0 deletions
diff --git a/builtin/am.c b/builtin/am.c index 9fb42fdd71..de235cf11a 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1939,6 +1939,7 @@ next: */ if (!state->rebasing) { am_destroy(state); + close_all_packs(); run_command_v_opt(argv_gc_auto, RUN_GIT_CMD); } } diff --git a/builtin/fetch.c b/builtin/fetch.c index 9e24bb485f..17f40e10f6 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/builtin/merge.c b/builtin/merge.c index 15bf95b3ac..b98a3489bf 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); } } diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 2b3b746fb4..f2d6761af6 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) diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 0ba9db0884..e3ee4bd700 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 |