Commit 89cd5708d94d8eb68a5e3a7b0fbda6ee904fb148

nulltoken 2012-08-29T14:20:53

repository: make initialization cope with missing core.worktree

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");
+}