Commit 848d77dc8314895d6ad1a9b36f30a36fc505e230

Russell Belfer 2013-01-14T10:05:35

Merge pull request #1242 from sba1/init-with-template-fix Some fixes for external template support

diff --git a/src/repository.c b/src/repository.c
index 46b7f8f..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)
@@ -1015,6 +1024,7 @@ static int repo_init_structure(
 			/* if template was default, ignore error and use internal */
 			giterr_clear();
 			external_tpl = false;
+			error = 0;
 		}
 	}
 
diff --git a/tests-clar/repo/init.c b/tests-clar/repo/init.c
index c0acbed..9ddb395 100644
--- a/tests-clar/repo/init.c
+++ b/tests-clar/repo/init.c
@@ -365,9 +365,12 @@ void test_repo_init__extended_1(void)
 
 void test_repo_init__extended_with_template(void)
 {
+	git_buf expected = GIT_BUF_INIT;
+	git_buf actual = GIT_BUF_INIT;
+
 	git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
 
-	opts.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_BARE;
+	opts.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_BARE | GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE;
 	opts.template_path = cl_fixture("template");
 
 	cl_git_pass(git_repository_init_ext(&_repo, "templated.git", &opts));
@@ -375,6 +378,14 @@ void test_repo_init__extended_with_template(void)
 	cl_assert(git_repository_is_bare(_repo));
 	cl_assert(!git__suffixcmp(git_repository_path(_repo), "/templated.git/"));
 
+	cl_assert(git_futils_readbuffer(&expected,cl_fixture("template/description")) == GIT_OK);
+	cl_assert(git_futils_readbuffer(&actual,"templated.git/description") == GIT_OK);
+
+	cl_assert(!git_buf_cmp(&expected,&actual));
+
+	git_buf_free(&expected);
+	git_buf_free(&actual);
+
 	cleanup_repository("templated.git");
 }
 
diff --git a/tests-clar/resources/template/description b/tests-clar/resources/template/description
index 498b267..ff04c4c 100644
--- a/tests-clar/resources/template/description
+++ b/tests-clar/resources/template/description
@@ -1 +1 @@
-Unnamed repository; edit this file 'description' to name the repository.
+Edit this file 'description' to name the repository.