Commit f9c4dc10d90732cfbe2271dd58b01dd8f4003d15

Edward Thomson 2021-11-22T11:23:50

Merge pull request #6106 from ammgws/fixtemplateerr Fix repo init when template dir is non-existent

diff --git a/src/repository.c b/src/repository.c
index 3b3f7ca..8059f10 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -2032,8 +2032,13 @@ static int repo_init_structure(
 		git_str_dispose(&template_buf);
 		git_config_free(cfg);
 
+		/* If tdir does not exist, then do not error out. This matches the
+		 * behaviour of git(1), which just prints a warning and continues.
+		 * TODO: issue warning when warning API is available.
+		 * `git` prints to stderr: 'warning: templates not found in /path/to/tdir'
+		 */
 		if (error < 0) {
-			if (!default_template)
+			if (!default_template && error != GIT_ENOTFOUND)
 				return error;
 
 			/* if template was default, ignore error and use internal */
diff --git a/tests/repo/template.c b/tests/repo/template.c
index b0af96e..e8fe266 100644
--- a/tests/repo/template.c
+++ b/tests/repo/template.c
@@ -293,3 +293,13 @@ void test_repo_template__empty_template_path(void)
 
 	setup_repo("foo", &opts);
 }
+
+void test_repo_template__nonexistent_template_path(void)
+{
+	git_repository_init_options opts = GIT_REPOSITORY_INIT_OPTIONS_INIT;
+
+	opts.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE;
+	opts.template_path = "/tmp/path/that/does/not/exist/for/libgit2/test";
+
+	setup_repo("bar", &opts);
+}