repository: make initialization cope with missing core.worktree
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 38
diff --git a/src/repository.c b/src/repository.c
index c12df25..b9d180d 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -777,8 +777,8 @@ static int repo_init_config(
SET_REPO_CONFIG(string, "core.worktree", work_dir);
}
else if ((opts->flags & GIT_REPOSITORY_INIT__IS_REINIT) != 0) {
- if ((error = git_config_delete(config, "core.worktree")) < 0)
- goto cleanup;
+ if (git_config_delete(config, "core.worktree") < 0)
+ giterr_clear();
}
} else {
if (!are_symlinks_supported(repo_dir))
diff --git a/tests-clar/repo/init.c b/tests-clar/repo/init.c
index 67a9917..f76e8bc 100644
--- a/tests-clar/repo/init.c
+++ b/tests-clar/repo/init.c
@@ -378,3 +378,18 @@ void test_repo_init__extended_with_template(void)
cleanup_repository("templated.git");
}
+
+void test_repo_init__can_reinit_an_initialized_repository(void)
+{
+ git_repository *reinit;
+
+ cl_git_pass(git_futils_mkdir("extended", NULL, 0775, 0));
+ cl_git_pass(git_repository_init(&_repo, "extended", false));
+
+ cl_git_pass(git_repository_init(&reinit, "extended", false));
+
+ cl_assert_equal_s(git_repository_path(_repo), git_repository_path(reinit));
+
+ git_repository_free(reinit);
+ cleanup_repository("extended");
+}