Commit 85f40312765f7d8df8d28a7dd61d7d5107071eeb

Sebastian Bauer 2013-01-13T11:30:05

Do not use GIT_CPDIR_CHMOD flag when copying the template. This is an intermin solution. While this essentially disables the --shared flag feature, previously external templates did not work at all. This change fixes the previously corrected, and since then failing, repo_init__extended_with_template() test. The problem is now documented in the source code comments.

diff --git a/src/repository.c b/src/repository.c
index 2c567c8..014b40a 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1005,8 +1005,17 @@ static int repo_init_structure(
 			tdir = GIT_TEMPLATE_DIR;
 		}
 
+		/* FIXME: GIT_CPDIR_CHMOD cannot applied here as an attempt
+		 * would be made to chmod() all directories up to the last
+		 * component of repo_dir, e.g., also /home etc. Recall that
+		 * repo_dir is prettified at this point.
+		 *
+		 * Best probably would be to have the same logic as in
+		 * git_futils_mkdir(), i.e., to separate the base from
+		 * the path.
+		 */
 		error = git_futils_cp_r(tdir, repo_dir,
-			GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_CHMOD, dmode);
+			GIT_CPDIR_COPY_SYMLINKS /*| GIT_CPDIR_CHMOD*/, dmode);
 
 		if (error < 0) {
 			if (strcmp(tdir, GIT_TEMPLATE_DIR) != 0)