зеркало из https://github.com/microsoft/git.git
Merge branch 'js/close-packs-before-gc'
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
This commit is contained in:
Коммит
3c809405cb
|
@ -1939,6 +1939,7 @@ next:
|
|||
*/
|
||||
if (!state->rebasing) {
|
||||
am_destroy(state);
|
||||
close_all_packs();
|
||||
run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1225,6 +1225,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");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче