repository: move global r_f_p_c to repo struct
Move repository_format_partial_clone, which is currently a global variable, into struct repository. (Full support for per-repository partial clone config will be done in a subsequent commit - this is split into its own commit because of the extent of the changes needed.) The new repo-specific variable cannot be set in check_repository_format_gently() (as is currently), because that function does not know which repo it is operating on (or even whether the value is important); therefore this responsibility is delegated to the outermost caller that knows. Of all the outermost callers that know (found by looking at all functions that call clear_repository_format()), I looked at those that either read from the main Git directory or write into a struct repository. These callers have been modified accordingly (write to the_repository in the former case and write to the given struct repository in the latter case). Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
ebf3c04b26
commit
ebaf3bcf1a
17
setup.c
17
setup.c
@ -468,8 +468,6 @@ static enum extension_result handle_extension_v0(const char *var,
|
||||
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")) {
|
||||
@ -566,7 +564,6 @@ static int check_repository_format_gently(const char *gitdir, struct repository_
|
||||
}
|
||||
|
||||
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);
|
||||
@ -1193,6 +1190,11 @@ int discover_git_directory(struct strbuf *commondir,
|
||||
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;
|
||||
}
|
||||
@ -1300,8 +1302,13 @@ const char *setup_git_directory_gently(int *nongit_ok)
|
||||
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
|
||||
@ -1386,6 +1393,8 @@ 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);
|
||||
the_repository->repository_format_partial_clone =
|
||||
xstrdup_or_null(fmt->partial_clone);
|
||||
clear_repository_format(&repo_fmt);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user