Merge pull request #6106 from ammgws/fixtemplateerr Fix repo init when template dir is non-existent
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
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);
+}