Introduce is_bare_repository() and core.bare configuration variable
This removes the old is_bare_git_dir(const char *) to ask if a directory, if it is a GIT_DIR, is a bare repository, and replaces it with is_bare_repository(void *). The function looks at core.bare configuration variable if exists but uses the old heuristics: if it is ".git" or ends with "/.git", then it does not look like a bare repository, otherwise it does. Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
		| @ -252,9 +252,13 @@ static int create_default_files(const char *git_dir, const char *template_path) | |||||||
| 	} | 	} | ||||||
| 	git_config_set("core.filemode", filemode ? "true" : "false"); | 	git_config_set("core.filemode", filemode ? "true" : "false"); | ||||||
|  |  | ||||||
| 	/* Enable logAllRefUpdates if a working tree is attached */ | 	if (is_bare_repository()) { | ||||||
| 	if (!is_bare_git_dir(git_dir)) | 		git_config_set("core.bare", "true"); | ||||||
|  | 	} | ||||||
|  | 	else { | ||||||
|  | 		git_config_set("core.bare", "false"); | ||||||
| 		git_config_set("core.logallrefupdates", "true"); | 		git_config_set("core.logallrefupdates", "true"); | ||||||
|  | 	} | ||||||
| 	return reinit; | 	return reinit; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								cache.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								cache.h
									
									
									
									
									
								
							| @ -127,7 +127,8 @@ extern int cache_errno; | |||||||
| #define CONFIG_LOCAL_ENVIRONMENT "GIT_CONFIG_LOCAL" | #define CONFIG_LOCAL_ENVIRONMENT "GIT_CONFIG_LOCAL" | ||||||
| #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH" | #define EXEC_PATH_ENVIRONMENT "GIT_EXEC_PATH" | ||||||
|  |  | ||||||
| extern int is_bare_git_dir(const char *dir); | extern int is_bare_repository_cfg; | ||||||
|  | extern int is_bare_repository(void); | ||||||
| extern const char *get_git_dir(void); | extern const char *get_git_dir(void); | ||||||
| extern char *get_object_directory(void); | extern char *get_object_directory(void); | ||||||
| extern char *get_refs_directory(void); | extern char *get_refs_directory(void); | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								config.c
									
									
									
									
									
								
							| @ -269,6 +269,11 @@ int git_default_config(const char *var, const char *value) | |||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if (!strcmp(var, "core.bare")) { | ||||||
|  | 		is_bare_repository_cfg = git_config_bool(var, value); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (!strcmp(var, "core.ignorestat")) { | 	if (!strcmp(var, "core.ignorestat")) { | ||||||
| 		assume_unchanged = git_config_bool(var, value); | 		assume_unchanged = git_config_bool(var, value); | ||||||
| 		return 0; | 		return 0; | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ int use_legacy_headers = 1; | |||||||
| int trust_executable_bit = 1; | int trust_executable_bit = 1; | ||||||
| int assume_unchanged; | int assume_unchanged; | ||||||
| int prefer_symlink_refs; | int prefer_symlink_refs; | ||||||
|  | int is_bare_repository_cfg = -1; /* unspecified */ | ||||||
| int log_all_ref_updates = -1; /* unspecified */ | int log_all_ref_updates = -1; /* unspecified */ | ||||||
| int warn_ambiguous_refs = 1; | int warn_ambiguous_refs = 1; | ||||||
| int repository_format_version; | int repository_format_version; | ||||||
| @ -53,9 +54,13 @@ static void setup_git_env(void) | |||||||
| 		git_graft_file = xstrdup(git_path("info/grafts")); | 		git_graft_file = xstrdup(git_path("info/grafts")); | ||||||
| } | } | ||||||
|  |  | ||||||
| int is_bare_git_dir(const char *dir) | int is_bare_repository(void) | ||||||
| { | { | ||||||
| 	const char *s; | 	const char *dir, *s; | ||||||
|  | 	if (0 <= is_bare_repository_cfg) | ||||||
|  | 		return is_bare_repository_cfg; | ||||||
|  |  | ||||||
|  | 	dir = get_git_dir(); | ||||||
| 	if (!strcmp(dir, DEFAULT_GIT_DIR_ENVIRONMENT)) | 	if (!strcmp(dir, DEFAULT_GIT_DIR_ENVIRONMENT)) | ||||||
| 		return 0; | 		return 0; | ||||||
| 	s = strrchr(dir, '/'); | 	s = strrchr(dir, '/'); | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								refs.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								refs.c
									
									
									
									
									
								
							| @ -924,7 +924,7 @@ static int log_ref_write(struct ref_lock *lock, | |||||||
| 	const char *committer; | 	const char *committer; | ||||||
|  |  | ||||||
| 	if (log_all_ref_updates < 0) | 	if (log_all_ref_updates < 0) | ||||||
| 		log_all_ref_updates = !is_bare_git_dir(get_git_dir()); | 		log_all_ref_updates = !is_bare_repository(); | ||||||
|  |  | ||||||
| 	if (log_all_ref_updates && | 	if (log_all_ref_updates && | ||||||
| 	    (!strncmp(lock->ref_name, "refs/heads/", 11) || | 	    (!strncmp(lock->ref_name, "refs/heads/", 11) || | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Junio C Hamano
					Junio C Hamano