Skip to content

Commit

Permalink
scalar: teach 'reconfigure' to optionally handle all registered enlis…
Browse files Browse the repository at this point in the history
…tments

After a Scalar upgrade, it can come in really handy if there is an easy
way to reconfigure all Scalar enlistments. This new option offers this
functionality.

Signed-off-by: Johannes Schindelin <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
dscho authored and gitster committed Dec 5, 2021
1 parent cb59d55 commit 4582676
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 6 deletions.
61 changes: 58 additions & 3 deletions contrib/scalar/scalar.c
Original file line number Diff line number Diff line change
Expand Up @@ -488,22 +488,77 @@ static int cmd_register(int argc, const char **argv)
return register_dir();
}

static int get_scalar_repos(const char *key, const char *value, void *data)
{
struct string_list *list = data;

if (!strcmp(key, "scalar.repo"))
string_list_append(list, value);

return 0;
}

static int cmd_reconfigure(int argc, const char **argv)
{
int all = 0;
struct option options[] = {
OPT_BOOL('a', "all", &all,
N_("reconfigure all registered enlistments")),
OPT_END(),
};
const char * const usage[] = {
N_("scalar reconfigure [<enlistment>]"),
N_("scalar reconfigure [--all | <enlistment>]"),
NULL
};
struct string_list scalar_repos = STRING_LIST_INIT_DUP;
int i, res = 0;
struct repository r = { NULL };
struct strbuf commondir = STRBUF_INIT, gitdir = STRBUF_INIT;

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

setup_enlistment_directory(argc, argv, usage, options, NULL);
if (!all) {
setup_enlistment_directory(argc, argv, usage, options, NULL);

return set_recommended_config(1);
}

if (argc > 0)
usage_msg_opt(_("--all or <enlistment>, but not both"),
usage, options);

git_config(get_scalar_repos, &scalar_repos);

return set_recommended_config(1);
for (i = 0; i < scalar_repos.nr; i++) {
const char *dir = scalar_repos.items[i].string;

strbuf_reset(&commondir);
strbuf_reset(&gitdir);

if (chdir(dir) < 0) {
warning_errno(_("could not switch to '%s'"), dir);
res = -1;
} else if (discover_git_directory(&commondir, &gitdir) < 0) {
warning_errno(_("git repository gone in '%s'"), dir);
res = -1;
} else {
git_config_clear();

the_repository = &r;
r.commondir = commondir.buf;
r.gitdir = gitdir.buf;

if (set_recommended_config(1) < 0)
res = -1;
}
}

string_list_clear(&scalar_repos, 1);
strbuf_release(&commondir);
strbuf_release(&gitdir);

return res;
}

static int cmd_run(int argc, const char **argv)
Expand Down
9 changes: 6 additions & 3 deletions contrib/scalar/scalar.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ scalar list
scalar register [<enlistment>]
scalar unregister [<enlistment>]
scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]
scalar reconfigure <enlistment>
scalar reconfigure [ --all | <enlistment> ]

DESCRIPTION
-----------
Expand All @@ -32,8 +32,8 @@ an existing Git worktree with Scalar whose name is not `src`, the enlistment
will be identical to the worktree.

The `scalar` command implements various subcommands, and different options
depending on the subcommand. With the exception of `clone` and `list`, all
subcommands expect to be run in an enlistment.
depending on the subcommand. With the exception of `clone`, `list` and
`reconfigure --all`, all subcommands expect to be run in an enlistment.

COMMANDS
--------
Expand Down Expand Up @@ -125,6 +125,9 @@ After a Scalar upgrade, or when the configuration of a Scalar enlistment
was somehow corrupted or changed by mistake, this subcommand allows to
reconfigure the enlistment.

With the `--all` option, all enlistments currently registered with Scalar
will be reconfigured. Use this option after each Scalar upgrade.

SEE ALSO
--------
linkgit:git-clone[1], linkgit:git-maintenance[1].
Expand Down
3 changes: 3 additions & 0 deletions contrib/scalar/t/t9099-scalar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ test_expect_success 'scalar reconfigure' '
scalar register one &&
git -C one/src config core.preloadIndex false &&
scalar reconfigure one &&
test true = "$(git -C one/src config core.preloadIndex)" &&
git -C one/src config core.preloadIndex false &&
scalar reconfigure -a &&
test true = "$(git -C one/src config core.preloadIndex)"
'

Expand Down

0 comments on commit 4582676

Please sign in to comment.