setup: make ref storage format configurable via config
Similar to the preceding commit, introduce a new "init.defaultRefFormat" config that allows the user to globally set the ref storage format used by newly created repositories. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
0c22e09b73
commit
d2511eeae5
|
@ -13,3 +13,8 @@ endif::[]
|
||||||
`--object-format=` in linkgit:git-init[1]. Both the command line option
|
`--object-format=` in linkgit:git-init[1]. Both the command line option
|
||||||
and the `GIT_DEFAULT_HASH` environment variable take precedence over
|
and the `GIT_DEFAULT_HASH` environment variable take precedence over
|
||||||
this config.
|
this config.
|
||||||
|
`init.defaultRefFormat`::
|
||||||
|
Allows overriding the default ref storage format for new repositories.
|
||||||
|
See `--ref-format=` in linkgit:git-init[1]. Both the command line
|
||||||
|
option and the `GIT_DEFAULT_REF_FORMAT` environment variable take
|
||||||
|
precedence over this config.
|
||||||
|
|
14
setup.c
14
setup.c
|
@ -2286,6 +2286,7 @@ static void separate_git_dir(const char *git_dir, const char *git_link)
|
||||||
|
|
||||||
struct default_format_config {
|
struct default_format_config {
|
||||||
int hash;
|
int hash;
|
||||||
|
enum ref_storage_format ref_format;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int read_default_format_config(const char *key, const char *value,
|
static int read_default_format_config(const char *key, const char *value,
|
||||||
|
@ -2306,6 +2307,16 @@ static int read_default_format_config(const char *key, const char *value,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(key, "init.defaultrefformat")) {
|
||||||
|
ret = git_config_string(&str, key, value);
|
||||||
|
if (ret)
|
||||||
|
goto out;
|
||||||
|
cfg->ref_format = ref_storage_format_by_name(str);
|
||||||
|
if (cfg->ref_format == REF_STORAGE_FORMAT_UNKNOWN)
|
||||||
|
warning(_("unknown ref storage format '%s'"), str);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
out:
|
out:
|
||||||
free(str);
|
free(str);
|
||||||
|
@ -2317,6 +2328,7 @@ static void repository_format_configure(struct repository_format *repo_fmt,
|
||||||
{
|
{
|
||||||
struct default_format_config cfg = {
|
struct default_format_config cfg = {
|
||||||
.hash = GIT_HASH_UNKNOWN,
|
.hash = GIT_HASH_UNKNOWN,
|
||||||
|
.ref_format = REF_STORAGE_FORMAT_UNKNOWN,
|
||||||
};
|
};
|
||||||
struct config_options opts = {
|
struct config_options opts = {
|
||||||
.respect_includes = 1,
|
.respect_includes = 1,
|
||||||
|
@ -2359,6 +2371,8 @@ static void repository_format_configure(struct repository_format *repo_fmt,
|
||||||
if (ref_format == REF_STORAGE_FORMAT_UNKNOWN)
|
if (ref_format == REF_STORAGE_FORMAT_UNKNOWN)
|
||||||
die(_("unknown ref storage format '%s'"), env);
|
die(_("unknown ref storage format '%s'"), env);
|
||||||
repo_fmt->ref_storage_format = ref_format;
|
repo_fmt->ref_storage_format = ref_format;
|
||||||
|
} else if (cfg.ref_format != REF_STORAGE_FORMAT_UNKNOWN) {
|
||||||
|
repo_fmt->ref_storage_format = cfg.ref_format;
|
||||||
}
|
}
|
||||||
repo_set_ref_storage_format(the_repository, repo_fmt->ref_storage_format);
|
repo_set_ref_storage_format(the_repository, repo_fmt->ref_storage_format);
|
||||||
}
|
}
|
||||||
|
|
|
@ -620,6 +620,19 @@ test_expect_success 'init with GIT_DEFAULT_REF_FORMAT=garbage' '
|
||||||
test_cmp expect err
|
test_cmp expect err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'init warns about invalid init.defaultRefFormat' '
|
||||||
|
test_when_finished "rm -rf repo" &&
|
||||||
|
test_config_global init.defaultRefFormat garbage &&
|
||||||
|
|
||||||
|
echo "warning: unknown ref storage format ${SQ}garbage${SQ}" >expect &&
|
||||||
|
git init repo 2>err &&
|
||||||
|
test_cmp expect err &&
|
||||||
|
|
||||||
|
git -C repo rev-parse --show-ref-format >actual &&
|
||||||
|
echo $GIT_DEFAULT_REF_FORMAT >expected &&
|
||||||
|
test_cmp expected actual
|
||||||
|
'
|
||||||
|
|
||||||
backends="files reftable"
|
backends="files reftable"
|
||||||
for format in $backends
|
for format in $backends
|
||||||
do
|
do
|
||||||
|
@ -650,6 +663,27 @@ do
|
||||||
git -C refformat rev-parse --show-ref-format >actual &&
|
git -C refformat rev-parse --show-ref-format >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success "init with init.defaultRefFormat=$format" '
|
||||||
|
test_when_finished "rm -rf refformat" &&
|
||||||
|
test_config_global init.defaultRefFormat $format &&
|
||||||
|
(
|
||||||
|
sane_unset GIT_DEFAULT_REF_FORMAT &&
|
||||||
|
git init refformat
|
||||||
|
) &&
|
||||||
|
|
||||||
|
echo $format >expect &&
|
||||||
|
git -C refformat rev-parse --show-ref-format >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success "--ref-format=$format overrides GIT_DEFAULT_REF_FORMAT" '
|
||||||
|
test_when_finished "rm -rf refformat" &&
|
||||||
|
GIT_DEFAULT_REF_FORMAT=garbage git init --ref-format=$format refformat &&
|
||||||
|
echo $format >expect &&
|
||||||
|
git -C refformat rev-parse --show-ref-format >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
done
|
done
|
||||||
|
|
||||||
test_expect_success "--ref-format= overrides GIT_DEFAULT_REF_FORMAT" '
|
test_expect_success "--ref-format= overrides GIT_DEFAULT_REF_FORMAT" '
|
||||||
|
@ -660,6 +694,16 @@ test_expect_success "--ref-format= overrides GIT_DEFAULT_REF_FORMAT" '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success "GIT_DEFAULT_REF_FORMAT= overrides init.defaultRefFormat" '
|
||||||
|
test_when_finished "rm -rf refformat" &&
|
||||||
|
test_config_global init.defaultRefFormat files &&
|
||||||
|
|
||||||
|
GIT_DEFAULT_REF_FORMAT=reftable git init refformat &&
|
||||||
|
echo reftable >expect &&
|
||||||
|
git -C refformat rev-parse --show-ref-format >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
for from_format in $backends
|
for from_format in $backends
|
||||||
do
|
do
|
||||||
test_expect_success "re-init with same format ($from_format)" '
|
test_expect_success "re-init with same format ($from_format)" '
|
||||||
|
|
Loading…
Reference in New Issue