scalar: 'unregister' stops background maintenance

Just like `scalar register` starts the scheduled background maintenance,
`scalar unregister` stops it. Note that we use `git maintenance start`
in `scalar register`, but we do not use `git maintenance stop` in
`scalar unregister`: this would stop maintenance for _all_ repositories,
not just for the one we want to unregister.

The `unregister` command also removes the corresponding entry from the
`[scalar]` section in the global Git config.

Co-authored-by: Victoria Dye <vdye@github.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Derrick Stolee 2021-12-03 13:34:20 +00:00 committed by Junio C Hamano
parent d0feac4e8c
commit c76a53eb71
2 changed files with 50 additions and 8 deletions

View File

@ -198,12 +198,12 @@ static int set_recommended_config(void)
return 0; return 0;
} }


static int start_maintenance(void) static int toggle_maintenance(int enable)
{ {
return run_git("maintenance", "start", NULL); return run_git("maintenance", enable ? "start" : "unregister", NULL);
} }


static int add_enlistment(void) static int add_or_remove_enlistment(int add)
{ {
int res; int res;


@ -214,24 +214,39 @@ static int add_enlistment(void)
"scalar.repo", the_repository->worktree, NULL); "scalar.repo", the_repository->worktree, NULL);


/* /*
* If the setting is already there, then do nothing. * If we want to add and the setting is already there, then do nothing.
* If we want to remove and the setting is not there, then do nothing.
*/ */
if (!res) if ((add && !res) || (!add && res))
return 0; return 0;


return run_git("config", "--global", "--add", return run_git("config", "--global", add ? "--add" : "--unset",
add ? "--no-fixed-value" : "--fixed-value",
"scalar.repo", the_repository->worktree, NULL); "scalar.repo", the_repository->worktree, NULL);
} }


static int register_dir(void) static int register_dir(void)
{ {
int res = add_enlistment(); int res = add_or_remove_enlistment(1);


if (!res) if (!res)
res = set_recommended_config(); res = set_recommended_config();


if (!res) if (!res)
res = start_maintenance(); res = toggle_maintenance(1);

return res;
}

static int unregister_dir(void)
{
int res = 0;

if (toggle_maintenance(0) < 0)
res = -1;

if (add_or_remove_enlistment(0) < 0)
res = -1;


return res; return res;
} }
@ -254,11 +269,30 @@ static int cmd_register(int argc, const char **argv)
return register_dir(); return register_dir();
} }


static int cmd_unregister(int argc, const char **argv)
{
struct option options[] = {
OPT_END(),
};
const char * const usage[] = {
N_("scalar unregister [<enlistment>]"),
NULL
};

argc = parse_options(argc, argv, NULL, options,
usage, 0);

setup_enlistment_directory(argc, argv, usage, options, NULL);

return unregister_dir();
}

static struct { static struct {
const char *name; const char *name;
int (*fn)(int, const char **); int (*fn)(int, const char **);
} builtins[] = { } builtins[] = {
{ "register", cmd_register }, { "register", cmd_register },
{ "unregister", cmd_unregister },
{ NULL, NULL}, { NULL, NULL},
}; };



View File

@ -9,6 +9,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
scalar register [<enlistment>] scalar register [<enlistment>]
scalar unregister [<enlistment>]


DESCRIPTION DESCRIPTION
----------- -----------
@ -45,6 +46,13 @@ Note: when this subcommand is called in a worktree that is called `src/`, its
parent directory is considered to be the Scalar enlistment. If the worktree is parent directory is considered to be the Scalar enlistment. If the worktree is
_not_ called `src/`, it itself will be considered to be the Scalar enlistment. _not_ called `src/`, it itself will be considered to be the Scalar enlistment.


Unregister
~~~~~~~~~~

unregister [<enlistment>]::
Remove the specified repository from the list of repositories
registered with Scalar and stop the scheduled background maintenance.

SEE ALSO SEE ALSO
-------- --------
linkgit:git-maintenance[1]. linkgit:git-maintenance[1].