Merge branch 'js/remove-stale-scalar-repos'
'scalar reconfigure -a' is taught to automatically remove scalar.repo entires which no longer exist. * js/remove-stale-scalar-repos: tests(scalar): tighten the stale `scalar.repo` test some scalar reconfigure -a: remove stale `scalar.repo` entries
This commit is contained in:
54
scalar.c
54
scalar.c
@ -596,6 +596,24 @@ static int get_scalar_repos(const char *key, const char *value, void *data)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int remove_deleted_enlistment(struct strbuf *path)
|
||||||
|
{
|
||||||
|
int res = 0;
|
||||||
|
strbuf_realpath_forgiving(path, path->buf, 1);
|
||||||
|
|
||||||
|
if (run_git("config", "--global",
|
||||||
|
"--unset", "--fixed-value",
|
||||||
|
"scalar.repo", path->buf, NULL) < 0)
|
||||||
|
res = -1;
|
||||||
|
|
||||||
|
if (run_git("config", "--global",
|
||||||
|
"--unset", "--fixed-value",
|
||||||
|
"maintenance.repo", path->buf, NULL) < 0)
|
||||||
|
res = -1;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int cmd_reconfigure(int argc, const char **argv)
|
static int cmd_reconfigure(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
int all = 0;
|
int all = 0;
|
||||||
@ -635,8 +653,22 @@ static int cmd_reconfigure(int argc, const char **argv)
|
|||||||
strbuf_reset(&gitdir);
|
strbuf_reset(&gitdir);
|
||||||
|
|
||||||
if (chdir(dir) < 0) {
|
if (chdir(dir) < 0) {
|
||||||
warning_errno(_("could not switch to '%s'"), dir);
|
struct strbuf buf = STRBUF_INIT;
|
||||||
res = -1;
|
|
||||||
|
if (errno != ENOENT) {
|
||||||
|
warning_errno(_("could not switch to '%s'"), dir);
|
||||||
|
res = -1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
strbuf_addstr(&buf, dir);
|
||||||
|
if (remove_deleted_enlistment(&buf))
|
||||||
|
res = error(_("could not remove stale "
|
||||||
|
"scalar.repo '%s'"), dir);
|
||||||
|
else
|
||||||
|
warning(_("removing stale scalar.repo '%s'"),
|
||||||
|
dir);
|
||||||
|
strbuf_release(&buf);
|
||||||
} else if (discover_git_directory(&commondir, &gitdir) < 0) {
|
} else if (discover_git_directory(&commondir, &gitdir) < 0) {
|
||||||
warning_errno(_("git repository gone in '%s'"), dir);
|
warning_errno(_("git repository gone in '%s'"), dir);
|
||||||
res = -1;
|
res = -1;
|
||||||
@ -722,24 +754,6 @@ static int cmd_run(int argc, const char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int remove_deleted_enlistment(struct strbuf *path)
|
|
||||||
{
|
|
||||||
int res = 0;
|
|
||||||
strbuf_realpath_forgiving(path, path->buf, 1);
|
|
||||||
|
|
||||||
if (run_git("config", "--global",
|
|
||||||
"--unset", "--fixed-value",
|
|
||||||
"scalar.repo", path->buf, NULL) < 0)
|
|
||||||
res = -1;
|
|
||||||
|
|
||||||
if (run_git("config", "--global",
|
|
||||||
"--unset", "--fixed-value",
|
|
||||||
"maintenance.repo", path->buf, NULL) < 0)
|
|
||||||
res = -1;
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cmd_unregister(int argc, const char **argv)
|
static int cmd_unregister(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
|
@ -166,6 +166,20 @@ test_expect_success 'scalar reconfigure' '
|
|||||||
test true = "$(git -C one/src config core.preloadIndex)"
|
test true = "$(git -C one/src config core.preloadIndex)"
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '`reconfigure -a` removes stale config entries' '
|
||||||
|
git init stale/src &&
|
||||||
|
scalar register stale &&
|
||||||
|
scalar list >scalar.repos &&
|
||||||
|
grep stale scalar.repos &&
|
||||||
|
|
||||||
|
grep -v stale scalar.repos >expect &&
|
||||||
|
|
||||||
|
rm -rf stale &&
|
||||||
|
scalar reconfigure -a &&
|
||||||
|
scalar list >scalar.repos &&
|
||||||
|
test_cmp expect scalar.repos
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'scalar delete without enlistment shows a usage' '
|
test_expect_success 'scalar delete without enlistment shows a usage' '
|
||||||
test_expect_code 129 scalar delete
|
test_expect_code 129 scalar delete
|
||||||
'
|
'
|
||||||
|
Reference in New Issue
Block a user