Skip to content

Commit f0acf0b

Browse files
committed
scalar reconfigure: help users remove buggy repos
When running 'scalar reconfigure -a', such as at install time, Scalar has warning messages about the repository missing (or not containing a .git directory). Failures can also happen while trying to modify the repository-local config for that repository. These warnings may seem confusing to users who don't understand what they mean or how to stop them. Add a warning that instructs the user how to remove the warning in future installations. Signed-off-by: Derrick Stolee <derrickstolee@github.com>
1 parent 86a4baf commit f0acf0b

File tree

1 file changed

+39
-17
lines changed

1 file changed

+39
-17
lines changed

scalar.c

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,7 @@ static int cmd_reconfigure(int argc, const char **argv)
10201020
git_config(get_scalar_repos, &scalar_repos);
10211021

10221022
for (i = 0; i < scalar_repos.nr; i++) {
1023+
int failed = 0;
10231024
const char *dir = scalar_repos.items[i].string;
10241025

10251026
strbuf_reset(&commondir);
@@ -1030,30 +1031,51 @@ static int cmd_reconfigure(int argc, const char **argv)
10301031

10311032
if (errno != ENOENT) {
10321033
warning_errno(_("could not switch to '%s'"), dir);
1033-
res = -1;
1034-
continue;
1034+
failed = -1;
1035+
goto loop_end;
10351036
}
10361037

10371038
strbuf_addstr(&buf, dir);
10381039
if (remove_deleted_enlistment(&buf))
1039-
res = error(_("could not remove stale "
1040-
"scalar.repo '%s'"), dir);
1040+
failed = error(_("could not remove stale "
1041+
"scalar.repo '%s'"), dir);
10411042
else
1042-
warning(_("removing stale scalar.repo '%s'"),
1043+
warning(_("removed stale scalar.repo '%s'"),
10431044
dir);
10441045
strbuf_release(&buf);
1045-
} else if (discover_git_directory(&commondir, &gitdir) < 0) {
1046-
warning_errno(_("git repository gone in '%s'"), dir);
1047-
res = -1;
1048-
} else {
1049-
git_config_clear();
1050-
1051-
the_repository = &r;
1052-
r.commondir = commondir.buf;
1053-
r.gitdir = gitdir.buf;
1054-
1055-
if (set_recommended_config(1) < 0)
1056-
res = -1;
1046+
goto loop_end;
1047+
}
1048+
1049+
switch (discover_git_directory_reason(&commondir, &gitdir)) {
1050+
case GIT_DIR_INVALID_OWNERSHIP:
1051+
warning(_("repository at '%s' has different owner"), dir);
1052+
failed = -1;
1053+
goto loop_end;
1054+
1055+
case GIT_DIR_DISCOVERED:
1056+
break;
1057+
1058+
default:
1059+
warning(_("repository not found in '%s'"), dir);
1060+
failed = -1;
1061+
break;
1062+
}
1063+
1064+
git_config_clear();
1065+
1066+
the_repository = &r;
1067+
r.commondir = commondir.buf;
1068+
r.gitdir = gitdir.buf;
1069+
1070+
if (set_recommended_config(1) < 0)
1071+
failed = -1;
1072+
1073+
loop_end:
1074+
if (failed) {
1075+
res = failed;
1076+
warning(_("to unregister this repository from Scalar, run\n"
1077+
"\tgit config --global --unset --fixed-value scalar.repo \"%s\""),
1078+
dir);
10571079
}
10581080
}
10591081

0 commit comments

Comments
 (0)