mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
repository: implement extensions.compatObjectFormat
Add a configuration option to enable updating and reading from compatibility hash maps when git accesses the reposotiry. Call the helper function repo_set_compat_hash_algo with the value that compatObjectFormat is set to. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
2328ebaa4e
commit
9ae702faf1
@@ -7,6 +7,18 @@ Note that this setting should only be set by linkgit:git-init[1] or
|
||||
linkgit:git-clone[1]. Trying to change it after initialization will not
|
||||
work and will produce hard-to-diagnose issues.
|
||||
|
||||
extensions.compatObjectFormat::
|
||||
|
||||
Specify a compatitbility hash algorithm to use. The acceptable values
|
||||
are `sha1` and `sha256`. The value specified must be different from the
|
||||
value of extensions.objectFormat. This allows client level
|
||||
interoperability between git repositories whose objectFormat matches
|
||||
this compatObjectFormat. In particular when fully implemented the
|
||||
pushes and pulls from a repository in whose objectFormat matches
|
||||
compatObjectFormat. As well as being able to use oids encoded in
|
||||
compatObjectFormat in addition to oids encoded with objectFormat to
|
||||
locally specify objects.
|
||||
|
||||
extensions.worktreeConfig::
|
||||
If enabled, then worktrees will load config settings from the
|
||||
`$GIT_DIR/config.worktree` file in addition to the
|
||||
|
||||
@@ -194,7 +194,7 @@ int repo_init(struct repository *repo,
|
||||
goto error;
|
||||
|
||||
repo_set_hash_algo(repo, format.hash_algo);
|
||||
repo_set_compat_hash_algo(repo, GIT_HASH_UNKNOWN);
|
||||
repo_set_compat_hash_algo(repo, format.compat_hash_algo);
|
||||
repo->repository_format_worktree_config = format.worktree_config;
|
||||
|
||||
/* take ownership of format.partial_clone */
|
||||
|
||||
23
setup.c
23
setup.c
@@ -590,6 +590,25 @@ static enum extension_result handle_extension(const char *var,
|
||||
"extensions.objectformat", value);
|
||||
data->hash_algo = format;
|
||||
return EXTENSION_OK;
|
||||
} else if (!strcmp(ext, "compatobjectformat")) {
|
||||
struct string_list_item *item;
|
||||
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 '%s': '%s'"),
|
||||
"extensions.compatobjectformat", value);
|
||||
/* For now only support compatObjectFormat being specified once. */
|
||||
for_each_string_list_item(item, &data->v1_only_extensions) {
|
||||
if (!strcmp(item->string, "compatobjectformat"))
|
||||
return error(_("'%s' already specified as '%s'"),
|
||||
"extensions.compatobjectformat",
|
||||
hash_algos[data->compat_hash_algo].name);
|
||||
}
|
||||
data->compat_hash_algo = format;
|
||||
return EXTENSION_OK;
|
||||
}
|
||||
return EXTENSION_UNKNOWN;
|
||||
}
|
||||
@@ -1565,7 +1584,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
if (startup_info->have_repository) {
|
||||
repo_set_hash_algo(the_repository, repo_fmt.hash_algo);
|
||||
repo_set_compat_hash_algo(the_repository,
|
||||
GIT_HASH_UNKNOWN);
|
||||
repo_fmt.compat_hash_algo);
|
||||
the_repository->repository_format_worktree_config =
|
||||
repo_fmt.worktree_config;
|
||||
/* take ownership of repo_fmt.partial_clone */
|
||||
@@ -1659,7 +1678,7 @@ void check_repository_format(struct repository_format *fmt)
|
||||
check_repository_format_gently(get_git_dir(), fmt, NULL);
|
||||
startup_info->have_repository = 1;
|
||||
repo_set_hash_algo(the_repository, fmt->hash_algo);
|
||||
repo_set_compat_hash_algo(the_repository, GIT_HASH_UNKNOWN);
|
||||
repo_set_compat_hash_algo(the_repository, fmt->compat_hash_algo);
|
||||
the_repository->repository_format_worktree_config =
|
||||
fmt->worktree_config;
|
||||
the_repository->repository_format_partial_clone =
|
||||
|
||||
Reference in New Issue
Block a user