builtin/maintenance: add a `--detach` flag
Same as the preceding commit, add a `--[no-]detach` flag to the git-maintenance(1) command. This will be used in a subsequent commit to fix backgrounding of that command when configured with a non-standard set of tasks. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
c7185df01b
commit
a6affd3343
|
|
@ -1426,6 +1426,10 @@ static int maintenance_run_tasks(struct maintenance_run_opts *opts,
|
|||
}
|
||||
free(lock_path);
|
||||
|
||||
/* Failure to daemonize is ok, we'll continue in foreground. */
|
||||
if (opts->detach > 0)
|
||||
daemonize();
|
||||
|
||||
for (i = 0; !found_selected && i < TASK__COUNT; i++)
|
||||
found_selected = tasks[i].selected_order >= 0;
|
||||
|
||||
|
|
@ -1552,6 +1556,8 @@ static int maintenance_run(int argc, const char **argv, const char *prefix)
|
|||
struct option builtin_maintenance_run_options[] = {
|
||||
OPT_BOOL(0, "auto", &opts.auto_flag,
|
||||
N_("run tasks based on the state of the repository")),
|
||||
OPT_BOOL(0, "detach", &opts.detach,
|
||||
N_("perform maintenance in the background")),
|
||||
OPT_CALLBACK(0, "schedule", &opts.schedule, N_("frequency"),
|
||||
N_("run tasks based on frequency"),
|
||||
maintenance_opt_schedule),
|
||||
|
|
|
|||
|
|
@ -908,4 +908,43 @@ test_expect_success 'failed schedule prevents config change' '
|
|||
done
|
||||
'
|
||||
|
||||
test_expect_success '--no-detach causes maintenance to not run in background' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init repo &&
|
||||
(
|
||||
cd repo &&
|
||||
|
||||
# Prepare the repository such that git-maintenance(1) ends up
|
||||
# outputting something.
|
||||
test_commit something &&
|
||||
git config set maintenance.gc.enabled false &&
|
||||
git config set maintenance.loose-objects.enabled true &&
|
||||
git config set maintenance.loose-objects.auto 1 &&
|
||||
git config set maintenance.incremental-repack.enabled true &&
|
||||
|
||||
# We have no better way to check whether or not the task ran in
|
||||
# the background than to verify whether it output anything. The
|
||||
# next testcase checks the reverse, making this somewhat safer.
|
||||
git maintenance run --no-detach >out 2>&1 &&
|
||||
test_line_count = 1 out
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success '--detach causes maintenance to run in background' '
|
||||
test_when_finished "rm -rf repo" &&
|
||||
git init repo &&
|
||||
(
|
||||
cd repo &&
|
||||
|
||||
test_commit something &&
|
||||
git config set maintenance.gc.enabled false &&
|
||||
git config set maintenance.loose-objects.enabled true &&
|
||||
git config set maintenance.loose-objects.auto 1 &&
|
||||
git config set maintenance.incremental-repack.enabled true &&
|
||||
|
||||
git maintenance run --detach >out 2>&1 &&
|
||||
test_must_be_empty out
|
||||
)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
|
|||
Loading…
Reference in New Issue