diff options
| -rw-r--r-- | builtin-init-db.c | 12 | ||||
| -rwxr-xr-x | t/t0001-init.sh | 32 | 
2 files changed, 42 insertions, 2 deletions
diff --git a/builtin-init-db.c b/builtin-init-db.c index 8140c1299a..d30c3fe2ca 100644 --- a/builtin-init-db.c +++ b/builtin-init-db.c @@ -17,6 +17,9 @@  #define TEST_FILEMODE 1  #endif +static int init_is_bare_repository = 0; +static int init_shared_repository = -1; +  static void safe_create_dir(const char *dir, int share)  {  	if (mkdir(dir, 0777) < 0) { @@ -191,6 +194,9 @@ static int create_default_files(const char *template_path)  	copy_templates(template_path);  	git_config(git_default_config, NULL); +	is_bare_repository_cfg = init_is_bare_repository; +	if (init_shared_repository != -1) +		shared_repository = init_shared_repository;  	/*  	 * We would have created the above under user's umask -- under @@ -277,6 +283,8 @@ int init_db(const char *template_dir, unsigned int flags)  	safe_create_dir(get_git_dir(), 0); +	init_is_bare_repository = is_bare_repository(); +  	/* Check to see if the repository version is right.  	 * Note that a newly created repository does not have  	 * config file, so this will not fail.  What we are catching @@ -381,9 +389,9 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)  			setenv(GIT_DIR_ENVIRONMENT, getcwd(git_dir,  						sizeof(git_dir)), 0);  		} else if (!strcmp(arg, "--shared")) -			shared_repository = PERM_GROUP; +			init_shared_repository = PERM_GROUP;  		else if (!prefixcmp(arg, "--shared=")) -			shared_repository = git_config_perm("arg", arg+9); +			init_shared_repository = git_config_perm("arg", arg+9);  		else if (!strcmp(arg, "-q") || !strcmp(arg, "--quiet"))  			flags |= INIT_DB_QUIET;  		else diff --git a/t/t0001-init.sh b/t/t0001-init.sh index 620da5b320..5ac0a273a9 100755 --- a/t/t0001-init.sh +++ b/t/t0001-init.sh @@ -167,4 +167,36 @@ test_expect_success 'init with --template (blank)' '  	! test -f template-blank/.git/info/exclude  ' +test_expect_success 'init --bare/--shared overrides system/global config' ' +	( +		HOME="`pwd`" && +		export HOME && +		test_config="$HOME"/.gitconfig && +		unset GIT_CONFIG_NOGLOBAL && +		git config -f "$test_config" core.bare false && +		git config -f "$test_config" core.sharedRepository 0640 && +		mkdir init-bare-shared-override && +		cd init-bare-shared-override && +		git init --bare --shared=0666 +	) && +	check_config init-bare-shared-override true unset && +	test x0666 = \ +	x`git config -f init-bare-shared-override/config core.sharedRepository` +' + +test_expect_success 'init honors global core.sharedRepository' ' +	( +		HOME="`pwd`" && +		export HOME && +		test_config="$HOME"/.gitconfig && +		unset GIT_CONFIG_NOGLOBAL && +		git config -f "$test_config" core.sharedRepository 0666 && +		mkdir shared-honor-global && +		cd shared-honor-global && +		git init +	) && +	test x0666 = \ +	x`git config -f shared-honor-global/.git/config core.sharedRepository` +' +  test_done  | 
