+3
-10
index da3f2ca261..d24081dc21 100644
--- a/promisor-remote.c
+++ b/promisor-remote.c
#include "transport.h"
#include "strvec.h"
-static char *repository_format_partial_clone;
-
-void set_repository_format_partial_clone(char *partial_clone)
-{
- repository_format_partial_clone = xstrdup_or_null(partial_clone);
-}
-
static int fetch_objects(const char *remote_name,
const struct object_id *oids,
int oid_nr)
git_config(promisor_remote_config, NULL);
- if (repository_format_partial_clone) {
+ if (the_repository->repository_format_partial_clone) {
struct promisor_remote *o, *previous;
- o = promisor_remote_lookup(repository_format_partial_clone,
+ o = promisor_remote_lookup(the_repository->repository_format_partial_clone,
&previous);
if (o)
promisor_remote_move_to_tail(o, previous);
else
- promisor_remote_new(repository_format_partial_clone);
+ promisor_remote_new(the_repository->repository_format_partial_clone);
}
}
-6
index c7a14063c5..687210ab87 100644
--- a/promisor-remote.h
+++ b/promisor-remote.h
const struct object_id *oids,
int oid_nr);
-/*
- * This should be used only once from setup.c to set the value we got
- * from the extensions.partialclone config option.
- */
-void set_repository_format_partial_clone(char *partial_clone);
-
#endif /* PROMISOR_REMOTE_H */
+4
index 448cd557d4..057a4748a0 100644
--- a/repository.c
+++ b/repository.c
repo_set_hash_algo(repo, format.hash_algo);
+ /* take ownership of format.partial_clone */
+ repo->repository_format_partial_clone = format.partial_clone;
+ format.partial_clone = NULL;
+
if (worktree)
repo_set_worktree(repo, worktree);
+3
index a45f7520fd..6fb16ed336 100644
--- a/repository.h
+++ b/repository.h
/* True if commit-graph has been disabled within this process. */
int commit_graph_disabled;
+ /* Configurations related to promisor remotes. */
+ char *repository_format_partial_clone;
+
/* Configurations */
/* Indicate if a repository has a different 'commondir' from 'gitdir' */
+13
-4
index 59e2facd9d..5a2dd95f00 100644
--- a/setup.c
+++ b/setup.c
data->precious_objects = git_config_bool(var, value);
return EXTENSION_OK;
} else if (!strcmp(ext, "partialclone")) {
- if (!value)
- return config_error_nonbool(var);
data->partial_clone = xstrdup(value);
return EXTENSION_OK;
} else if (!strcmp(ext, "worktreeconfig")) {
}
repository_format_precious_objects = candidate->precious_objects;
- set_repository_format_partial_clone(candidate->partial_clone);
repository_format_worktree_config = candidate->worktree_config;
string_list_clear(&candidate->unknown_extensions, 0);
string_list_clear(&candidate->v1_only_extensions, 0);
return -1;
}
+ /* take ownership of candidate.partial_clone */
+ the_repository->repository_format_partial_clone =
+ candidate.partial_clone;
+ candidate.partial_clone = NULL;
+
clear_repository_format(&candidate);
return 0;
}
gitdir = DEFAULT_GIT_DIR_ENVIRONMENT;
setup_git_env(gitdir);
}
- if (startup_info->have_repository)
+ if (startup_info->have_repository) {
repo_set_hash_algo(the_repository, repo_fmt.hash_algo);
+ /* take ownership of repo_fmt.partial_clone */
+ the_repository->repository_format_partial_clone =
+ repo_fmt.partial_clone;
+ repo_fmt.partial_clone = NULL;
+ }
}
/*
* Since precompose_string_if_needed() needs to look at
check_repository_format_gently(get_git_dir(), fmt, NULL);
startup_info->have_repository = 1;
repo_set_hash_algo(the_repository, fmt->hash_algo);
+ the_repository->repository_format_partial_clone =
+ xstrdup_or_null(fmt->partial_clone);
clear_repository_format(&repo_fmt);
}