Skip to content
/ git Public
forked from git/git

Commit

Permalink
submodule-config: "goto" removal in parse_config()
Browse files Browse the repository at this point in the history
Many components in if/else if/... cascade jumped to a shared
clean-up with "goto release_return", but we can restructure the
function a bit and make them disappear, which reduces the line count
as well.  Also reformat overlong lines and poorly indented ones
while at it.

The order of rules to verify the value for "ignore" used to be to
complain on multiple values first and then complain to boolean, but
swap the order to match how the values for "path" and "url" are
verified.

CC: Eric Sunshine <sunshine@sunshineco.com>
CC: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
stefanbeller authored and gitster committed Oct 12, 2015
1 parent 22f698c commit 147875f
Showing 1 changed file with 29 additions and 45 deletions.
74 changes: 29 additions & 45 deletions submodule-config.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,78 +257,62 @@ static int parse_config(const char *var, const char *value, void *data)
if (!name_and_item_from_var(var, &name, &item))
return 0;

submodule = lookup_or_create_by_name(me->cache, me->gitmodules_sha1,
name.buf);
submodule = lookup_or_create_by_name(me->cache,
me->gitmodules_sha1,
name.buf);

if (!strcmp(item.buf, "path")) {
struct strbuf path = STRBUF_INIT;
if (!value) {
if (!value)
ret = config_error_nonbool(var);
goto release_return;
}
if (!me->overwrite && submodule->path != NULL) {
else if (!me->overwrite && submodule->path != NULL)
warn_multiple_config(me->commit_sha1, submodule->name,
"path");
goto release_return;
else {
if (submodule->path)
cache_remove_path(me->cache, submodule);
free((void *) submodule->path);
submodule->path = xstrdup(value);
cache_put_path(me->cache, submodule);
}

if (submodule->path)
cache_remove_path(me->cache, submodule);
free((void *) submodule->path);
strbuf_addstr(&path, value);
submodule->path = strbuf_detach(&path, NULL);
cache_put_path(me->cache, submodule);
} else if (!strcmp(item.buf, "fetchrecursesubmodules")) {
/* when parsing worktree configurations we can die early */
int die_on_error = is_null_sha1(me->gitmodules_sha1);
if (!me->overwrite &&
submodule->fetch_recurse != RECURSE_SUBMODULES_NONE) {
submodule->fetch_recurse != RECURSE_SUBMODULES_NONE)
warn_multiple_config(me->commit_sha1, submodule->name,
"fetchrecursesubmodules");
goto release_return;
}

submodule->fetch_recurse = parse_fetch_recurse(var, value,
else
submodule->fetch_recurse = parse_fetch_recurse(
var, value,
die_on_error);
} else if (!strcmp(item.buf, "ignore")) {
struct strbuf ignore = STRBUF_INIT;
if (!me->overwrite && submodule->ignore != NULL) {
if (!value)
ret = config_error_nonbool(var);
else if (!me->overwrite && submodule->ignore != NULL)
warn_multiple_config(me->commit_sha1, submodule->name,
"ignore");
goto release_return;
}
if (!value) {
ret = config_error_nonbool(var);
goto release_return;
}
if (strcmp(value, "untracked") && strcmp(value, "dirty") &&
strcmp(value, "all") && strcmp(value, "none")) {
else if (strcmp(value, "untracked") &&
strcmp(value, "dirty") &&
strcmp(value, "all") &&
strcmp(value, "none"))
warning("Invalid parameter '%s' for config option "
"'submodule.%s.ignore'", value, var);
goto release_return;
else {
free((void *) submodule->ignore);
submodule->ignore = xstrdup(value);
}

free((void *) submodule->ignore);
strbuf_addstr(&ignore, value);
submodule->ignore = strbuf_detach(&ignore, NULL);
} else if (!strcmp(item.buf, "url")) {
struct strbuf url = STRBUF_INIT;
if (!value) {
ret = config_error_nonbool(var);
goto release_return;
}
if (!me->overwrite && submodule->url != NULL) {
} else if (!me->overwrite && submodule->url != NULL) {
warn_multiple_config(me->commit_sha1, submodule->name,
"url");
goto release_return;
} else {
free((void *) submodule->url);
submodule->url = xstrdup(value);
}

free((void *) submodule->url);
strbuf_addstr(&url, value);
submodule->url = strbuf_detach(&url, NULL);
}

release_return:
strbuf_release(&name);
strbuf_release(&item);

Expand Down

0 comments on commit 147875f

Please sign in to comment.