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>maint
							parent
							
								
									ebf3c04b26
								
							
						
					
					
						commit
						ebaf3bcf1a
					
				|  | @ -5,13 +5,6 @@ | ||||||
| #include "transport.h" | #include "transport.h" | ||||||
| #include "strvec.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, | static int fetch_objects(const char *remote_name, | ||||||
| 			 const struct object_id *oids, | 			 const struct object_id *oids, | ||||||
| 			 int oid_nr) | 			 int oid_nr) | ||||||
|  | @ -145,15 +138,15 @@ static void promisor_remote_init(void) | ||||||
|  |  | ||||||
| 	git_config(promisor_remote_config, NULL); | 	git_config(promisor_remote_config, NULL); | ||||||
|  |  | ||||||
| 	if (repository_format_partial_clone) { | 	if (the_repository->repository_format_partial_clone) { | ||||||
| 		struct promisor_remote *o, *previous; | 		struct promisor_remote *o, *previous; | ||||||
|  |  | ||||||
| 		o = promisor_remote_lookup(repository_format_partial_clone, | 		o = promisor_remote_lookup(the_repository->repository_format_partial_clone, | ||||||
| 					   &previous); | 					   &previous); | ||||||
| 		if (o) | 		if (o) | ||||||
| 			promisor_remote_move_to_tail(o, previous); | 			promisor_remote_move_to_tail(o, previous); | ||||||
| 		else | 		else | ||||||
| 			promisor_remote_new(repository_format_partial_clone); | 			promisor_remote_new(the_repository->repository_format_partial_clone); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -32,10 +32,4 @@ int promisor_remote_get_direct(struct repository *repo, | ||||||
| 			       const struct object_id *oids, | 			       const struct object_id *oids, | ||||||
| 			       int oid_nr); | 			       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 */ | #endif /* PROMISOR_REMOTE_H */ | ||||||
|  |  | ||||||
|  | @ -172,6 +172,10 @@ int repo_init(struct repository *repo, | ||||||
|  |  | ||||||
| 	repo_set_hash_algo(repo, format.hash_algo); | 	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) | 	if (worktree) | ||||||
| 		repo_set_worktree(repo, worktree); | 		repo_set_worktree(repo, worktree); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -139,6 +139,9 @@ struct repository { | ||||||
| 	/* True if commit-graph has been disabled within this process. */ | 	/* True if commit-graph has been disabled within this process. */ | ||||||
| 	int commit_graph_disabled; | 	int commit_graph_disabled; | ||||||
|  |  | ||||||
|  | 	/* Configurations related to promisor remotes. */ | ||||||
|  | 	char *repository_format_partial_clone; | ||||||
|  |  | ||||||
| 	/* Configurations */ | 	/* Configurations */ | ||||||
|  |  | ||||||
| 	/* Indicate if a repository has a different 'commondir' from 'gitdir' */ | 	/* Indicate if a repository has a different 'commondir' from 'gitdir' */ | ||||||
|  |  | ||||||
							
								
								
									
										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); | 			data->precious_objects = git_config_bool(var, value); | ||||||
| 			return EXTENSION_OK; | 			return EXTENSION_OK; | ||||||
| 		} else if (!strcmp(ext, "partialclone")) { | 		} else if (!strcmp(ext, "partialclone")) { | ||||||
| 			if (!value) |  | ||||||
| 				return config_error_nonbool(var); |  | ||||||
| 			data->partial_clone = xstrdup(value); | 			data->partial_clone = xstrdup(value); | ||||||
| 			return EXTENSION_OK; | 			return EXTENSION_OK; | ||||||
| 		} else if (!strcmp(ext, "worktreeconfig")) { | 		} 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; | 	repository_format_precious_objects = candidate->precious_objects; | ||||||
| 	set_repository_format_partial_clone(candidate->partial_clone); |  | ||||||
| 	repository_format_worktree_config = candidate->worktree_config; | 	repository_format_worktree_config = candidate->worktree_config; | ||||||
| 	string_list_clear(&candidate->unknown_extensions, 0); | 	string_list_clear(&candidate->unknown_extensions, 0); | ||||||
| 	string_list_clear(&candidate->v1_only_extensions, 0); | 	string_list_clear(&candidate->v1_only_extensions, 0); | ||||||
|  | @ -1193,6 +1190,11 @@ int discover_git_directory(struct strbuf *commondir, | ||||||
| 		return -1; | 		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); | 	clear_repository_format(&candidate); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | @ -1300,8 +1302,13 @@ const char *setup_git_directory_gently(int *nongit_ok) | ||||||
| 				gitdir = DEFAULT_GIT_DIR_ENVIRONMENT; | 				gitdir = DEFAULT_GIT_DIR_ENVIRONMENT; | ||||||
| 			setup_git_env(gitdir); | 			setup_git_env(gitdir); | ||||||
| 		} | 		} | ||||||
| 		if (startup_info->have_repository) | 		if (startup_info->have_repository) { | ||||||
| 			repo_set_hash_algo(the_repository, repo_fmt.hash_algo); | 			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 | 	 * 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); | 	check_repository_format_gently(get_git_dir(), fmt, NULL); | ||||||
| 	startup_info->have_repository = 1; | 	startup_info->have_repository = 1; | ||||||
| 	repo_set_hash_algo(the_repository, fmt->hash_algo); | 	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); | 	clear_repository_format(&repo_fmt); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Jonathan Tan
						Jonathan Tan