setup: add support for reading extensions.objectformat

The transition plan specifies extensions.objectFormat as the indication
that we're using a given hash in a certain repo.  Read this as one of
the extensions we support.  If the user has specified an invalid value,
fail.

Ensure that we reject the extension if the repository format version is
0.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
brian m. carlson 2020-07-29 23:14:21 +00:00 committed by Junio C Hamano
parent c5aecfc866
commit b5b46d7973

16
setup.c
View file

@ -470,7 +470,16 @@ static int check_repo_format(const char *var, const char *value, void *vdata)
data->partial_clone = xstrdup(value);
} else if (!strcmp(ext, "worktreeconfig"))
data->worktree_config = git_config_bool(var, value);
else
else if (!strcmp(ext, "objectformat")) {
int format;
if (!value)
return config_error_nonbool(var);
format = hash_algo_by_name(value);
if (format == GIT_HASH_UNKNOWN)
return error("invalid value for 'extensions.objectformat'");
data->hash_algo = format;
} else
string_list_append(&data->unknown_extensions, ext);
}
@ -613,6 +622,11 @@ int verify_repository_format(const struct repository_format *format,
return -1;
}
if (format->version <= 0 && format->hash_algo != GIT_HASH_SHA1) {
strbuf_addstr(err, _("extensions.objectFormat is not valid in repo v0"));
return -1;
}
return 0;
}