Commit bafaf790cd26e6dd827599f2d07d76e82f346e1a

Edward Lee 2014-05-16T08:09:20

Fixed permissions on template directories.

diff --git a/src/repository.c b/src/repository.c
index b0db548..6953519 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1190,6 +1190,7 @@ static int repo_init_structure(
 	bool external_tpl =
 		((opts->flags & GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE) != 0);
 	mode_t dmode = pick_dir_mode(opts);
+	bool chmod = opts->mode != GIT_REPOSITORY_INIT_SHARED_UMASK;
 
 	/* Hide the ".git" directory */
 #ifdef GIT_WIN32
@@ -1230,10 +1231,17 @@ static int repo_init_structure(
 			default_template = true;
 		}
 
-		if (tdir)
-			error = git_futils_cp_r(tdir, repo_dir,
-				GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_CHMOD_DIRS |
-				GIT_CPDIR_SIMPLE_TO_MODE, dmode);
+		if (tdir) {
+			if (chmod) {
+				error = git_futils_cp_r(tdir, repo_dir,
+					GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_CHMOD_DIRS |
+					GIT_CPDIR_SIMPLE_TO_MODE, dmode);
+			} else {
+				error = git_futils_cp_r(tdir, repo_dir,
+					GIT_CPDIR_COPY_SYMLINKS |
+					GIT_CPDIR_SIMPLE_TO_MODE, dmode);
+			}
+		}
 
 		git_buf_free(&template_buf);
 		git_config_free(cfg);
@@ -1254,9 +1262,15 @@ static int repo_init_structure(
 	 * - only create files if no external template was specified
 	 */
 	for (tpl = repo_template; !error && tpl->path; ++tpl) {
-		if (!tpl->content)
-			error = git_futils_mkdir(
-				tpl->path, repo_dir, dmode, GIT_MKDIR_PATH | GIT_MKDIR_CHMOD);
+		if (!tpl->content) {
+			if (chmod) {
+				error = git_futils_mkdir(
+					tpl->path, repo_dir, dmode, GIT_MKDIR_PATH | GIT_MKDIR_CHMOD);
+			} else {
+				error = git_futils_mkdir(
+					tpl->path, repo_dir, dmode, GIT_MKDIR_PATH);
+			}
+		}
 		else if (!external_tpl) {
 			const char *content = tpl->content;