Merge branch 'js/run-command-close-packs'
The run-command API has been updated so that the callers can easily ask the file descriptors open for packfiles to be closed immediately before spawning commands that may trigger auto-gc. * js/run-command-close-packs: Close object store closer to spawning child processes run_auto_maintenance(): implicitly close the object store run-command: offer to close the object store before running run-command: prettify the `RUN_COMMAND_*` flags pull: release packs before fetching commit-graph: when closing the graph, also release the slab
This commit is contained in:
@ -1848,7 +1848,6 @@ next:
|
||||
*/
|
||||
if (!state->rebasing) {
|
||||
am_destroy(state);
|
||||
close_object_store(the_repository->objects);
|
||||
run_auto_maintenance(state->quiet);
|
||||
}
|
||||
}
|
||||
|
@ -2148,8 +2148,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||
NULL);
|
||||
}
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
|
||||
if (enable_auto_gc)
|
||||
run_auto_maintenance(verbosity < 0);
|
||||
|
||||
|
18
builtin/gc.c
18
builtin/gc.c
@ -663,8 +663,8 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
|
||||
gc_before_repack();
|
||||
|
||||
if (!repository_format_precious_objects) {
|
||||
close_object_store(the_repository->objects);
|
||||
if (run_command_v_opt(repack.v, RUN_GIT_CMD))
|
||||
if (run_command_v_opt(repack.v,
|
||||
RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE))
|
||||
die(FAILED_RUN, repack.v[0]);
|
||||
|
||||
if (prune_expire) {
|
||||
@ -848,7 +848,7 @@ static int run_write_commit_graph(struct maintenance_run_opts *opts)
|
||||
{
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
|
||||
child.git_cmd = 1;
|
||||
child.git_cmd = child.close_object_store = 1;
|
||||
strvec_pushl(&child.args, "commit-graph", "write",
|
||||
"--split", "--reachable", NULL);
|
||||
|
||||
@ -864,7 +864,6 @@ static int maintenance_task_commit_graph(struct maintenance_run_opts *opts)
|
||||
if (!the_repository->settings.core_commit_graph)
|
||||
return 0;
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
if (run_write_commit_graph(opts)) {
|
||||
error(_("failed to write commit-graph"));
|
||||
return 1;
|
||||
@ -913,7 +912,7 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
|
||||
{
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
|
||||
child.git_cmd = 1;
|
||||
child.git_cmd = child.close_object_store = 1;
|
||||
strvec_push(&child.args, "gc");
|
||||
|
||||
if (opts->auto_flag)
|
||||
@ -923,7 +922,6 @@ static int maintenance_task_gc(struct maintenance_run_opts *opts)
|
||||
else
|
||||
strvec_push(&child.args, "--no-quiet");
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
return run_command(&child);
|
||||
}
|
||||
|
||||
@ -1097,14 +1095,12 @@ static int multi_pack_index_expire(struct maintenance_run_opts *opts)
|
||||
{
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
|
||||
child.git_cmd = 1;
|
||||
child.git_cmd = child.close_object_store = 1;
|
||||
strvec_pushl(&child.args, "multi-pack-index", "expire", NULL);
|
||||
|
||||
if (opts->quiet)
|
||||
strvec_push(&child.args, "--no-progress");
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
|
||||
if (run_command(&child))
|
||||
return error(_("'git multi-pack-index expire' failed"));
|
||||
|
||||
@ -1155,7 +1151,7 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
|
||||
{
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
|
||||
child.git_cmd = 1;
|
||||
child.git_cmd = child.close_object_store = 1;
|
||||
strvec_pushl(&child.args, "multi-pack-index", "repack", NULL);
|
||||
|
||||
if (opts->quiet)
|
||||
@ -1164,8 +1160,6 @@ static int multi_pack_index_repack(struct maintenance_run_opts *opts)
|
||||
strvec_pushf(&child.args, "--batch-size=%"PRIuMAX,
|
||||
(uintmax_t)get_auto_pack_size());
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
|
||||
if (run_command(&child))
|
||||
return error(_("'git multi-pack-index repack' failed"));
|
||||
|
||||
|
@ -469,7 +469,6 @@ static void finish(struct commit *head_commit,
|
||||
* We ignore errors in 'gc --auto', since the
|
||||
* user should see them.
|
||||
*/
|
||||
close_object_store(the_repository->objects);
|
||||
run_auto_maintenance(verbosity < 0);
|
||||
}
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "wt-status.h"
|
||||
#include "commit-reach.h"
|
||||
#include "sequencer.h"
|
||||
#include "packfile.h"
|
||||
|
||||
/**
|
||||
* Parses the value of --rebase. If value is a false value, returns
|
||||
@ -577,7 +578,7 @@ static int run_fetch(const char *repo, const char **refspecs)
|
||||
strvec_pushv(&args, refspecs);
|
||||
} else if (*refspecs)
|
||||
BUG("refspecs without repo?");
|
||||
ret = run_command_v_opt(args.v, RUN_GIT_CMD);
|
||||
ret = run_command_v_opt(args.v, RUN_GIT_CMD | RUN_CLOSE_OBJECT_STORE);
|
||||
strvec_clear(&args);
|
||||
return ret;
|
||||
}
|
||||
|
@ -744,7 +744,6 @@ static int finish_rebase(struct rebase_options *opts)
|
||||
delete_ref(NULL, "REBASE_HEAD", NULL, REF_NO_DEREF);
|
||||
unlink(git_path_auto_merge(the_repository));
|
||||
apply_autostash(state_dir_path("autostash", opts));
|
||||
close_object_store(the_repository->objects);
|
||||
/*
|
||||
* We ignore errors in 'git maintenance run --auto', since the
|
||||
* user should see them.
|
||||
|
@ -2578,10 +2578,9 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix)
|
||||
proc.no_stdin = 1;
|
||||
proc.stdout_to_stderr = 1;
|
||||
proc.err = use_sideband ? -1 : 0;
|
||||
proc.git_cmd = 1;
|
||||
proc.git_cmd = proc.close_object_store = 1;
|
||||
proc.argv = argv_gc_auto;
|
||||
|
||||
close_object_store(the_repository->objects);
|
||||
if (!start_command(&proc)) {
|
||||
if (use_sideband)
|
||||
copy_to_sideband(proc.err, -1, NULL);
|
||||
|
Reference in New Issue
Block a user