Commit 9371149f1d9446f72d5ef5dfed7ad7361ad9bfd7

Carson Howard 2017-10-20T14:24:01

submodule: fix styling errors

diff --git a/src/submodule.c b/src/submodule.c
index 147d3ae..87b8801 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -149,6 +149,41 @@ static int find_by_path(const git_config_entry *entry, void *payload)
 	return 0;
 }
 
+static int can_add_submodule(git_repository *repo, const char *path) {
+	int error;
+	git_index *index;
+	git_buf dir = GIT_BUF_INIT;
+
+	if ((error = git_buf_sets(&dir, path)) < 0)
+		return error;
+
+	if ((error = git_path_to_dir(&dir)) < 0)
+		return error;
+
+	/* get the index for the repo */
+
+	if ((error = git_repository_index__weakptr(&index, repo)) < 0)
+		return error;
+
+	/* see if the submodule name exists as a file on the index */
+
+	if ((error = git_index_find(NULL, index, path)) == 0) {
+		giterr_set(GITERR_SUBMODULE,
+			"'%s' already exists in the index", path);
+		return GIT_EEXISTS;
+	}
+
+	/* see if the submodule name exists as a directory on the index */
+
+	if ((error = git_index_find_prefix(NULL, index, dir.ptr)) == 0) {
+		giterr_set(GITERR_SUBMODULE,
+			"'%s' already exists in the index", path);
+		return GIT_EEXISTS;
+	}
+
+	return 0;
+}
+
 /**
  * Release the name map returned by 'load_submodule_names'.
  */
@@ -660,10 +695,7 @@ int git_submodule_add_setup(
 	int use_gitlink)
 {
 	int error = 0;
-	size_t path_len;
-	const char *dir;
 	git_config_backend *mods = NULL;
-	git_index *index;
 	git_submodule *sm = NULL;
 	git_buf name = GIT_BUF_INIT, real_url = GIT_BUF_INIT;
 	git_repository *subrepo = NULL;
@@ -691,34 +723,9 @@ int git_submodule_add_setup(
 		goto cleanup;
 	}
 
-	/* get the index for the repo */
-
-	if ((error = git_repository_index__weakptr(&index, repo)) < 0)
+	if ((error = can_add_submodule(repo, path)) < 0)
 		goto cleanup;
 
-	/* see if the submodule name exists as a file on the index */
-
-	if ((error = git_index_find(NULL, index, path)) == 0) {
-		giterr_set(GITERR_SUBMODULE,
-			"'%s' already exists in the index", path);
-		return GIT_EEXISTS;
-	}
-
-	/* We need the path to end with '/' so we can check it as a directory prefix */
-
-	path_len = strlen(path);
-	dir = git__malloc(path_len + 1);
-	strcpy(dir, path);
-	git_path_string_to_dir(dir, path_len + 1);
-
-	/* see if the submodule name exists as a directory on the index */
-
-	if ((error = git_index_find_prefix(NULL, index, dir)) == 0) {
-		giterr_set(GITERR_SUBMODULE,
-			"'%s' already exists in the index", path);
-		return GIT_EEXISTS;
-	}
-
 	/* update .gitmodules */
 
 	if (!(mods = open_gitmodules(repo, GITMODULES_CREATE))) {
diff --git a/tests/submodule/add.c b/tests/submodule/add.c
index 76cdda8..125ac9a 100644
--- a/tests/submodule/add.c
+++ b/tests/submodule/add.c
@@ -135,31 +135,22 @@ void test_submodule_add__path_exists_in_index(void)
 	git_submodule *sm;
 	git_buf dirname = GIT_BUF_INIT;
 	git_buf filename = GIT_BUF_INIT;
-	FILE *fd;
 
 	/* In this repo, HEAD (master) has no remote tracking branc h*/
 	g_repo = cl_git_sandbox_init("testrepo");
 
-	git_buf_joinpath(&dirname, git_repository_workdir(g_repo), "TestGitRepository");
-	git_buf_joinpath(&filename, dirname.ptr, "test.txt");
+	cl_git_pass(git_buf_joinpath(&dirname, git_repository_workdir(g_repo), "TestGitRepository"));
+	cl_git_pass(git_buf_joinpath(&filename, dirname.ptr, "test.txt"));
 
-	p_mkdir(dirname.ptr, 0700);
-	fd = fopen(filename.ptr, "w");
-	fclose(fd);
+	cl_git_pass(p_mkdir(dirname.ptr, 0700));
+	cl_git_mkfile(filename.ptr, "This is some content");
 
-	cl_git_pass(
-		git_repository_index__weakptr(&index, g_repo)
-	);
+	cl_git_pass(git_repository_index__weakptr(&index, g_repo));
+	cl_git_pass(git_index_add_bypath(index, "TestGitRepository/test.txt"));
 
-	cl_git_pass(
-		git_index_add_bypath(index, "TestGitRepository/test.txt")
-	);
-
-	cl_git_fail_with(
-		git_submodule_add_setup(&sm, g_repo, "./", "TestGitRepository", 1),
-		GIT_EEXISTS
-	);
+	cl_git_fail_with(git_submodule_add_setup(&sm, g_repo, "./", "TestGitRepository", 1), GIT_EEXISTS);
 
+	git_submodule_free(sm);
 	git_buf_free(&dirname);
 	git_buf_free(&filename);
 }
@@ -169,28 +160,19 @@ void test_submodule_add__file_exists_in_index(void)
 	git_index *index;
 	git_submodule *sm;
 	git_buf name = GIT_BUF_INIT;
-	FILE *fd;
 
 	/* In this repo, HEAD (master) has no remote tracking branc h*/
 	g_repo = cl_git_sandbox_init("testrepo");
 
-	git_buf_joinpath(&name, git_repository_workdir(g_repo), "TestGitRepository");
+	cl_git_pass(git_buf_joinpath(&name, git_repository_workdir(g_repo), "TestGitRepository"));
 
-	fd = fopen(name.ptr, "w");
-	fclose(fd);
+	cl_git_mkfile(name.ptr, "Test content");
 
-	cl_git_pass(
-		git_repository_index__weakptr(&index, g_repo)
-	);
+	cl_git_pass(git_repository_index__weakptr(&index, g_repo));
+	cl_git_pass(git_index_add_bypath(index, "TestGitRepository"));
 
-	cl_git_pass(
-		git_index_add_bypath(index, "TestGitRepository")
-	);
-
-	cl_git_fail_with(
-		git_submodule_add_setup(&sm, g_repo, "./", "TestGitRepository", 1),
-		GIT_EEXISTS
-	);
+	cl_git_fail_with(git_submodule_add_setup(&sm, g_repo, "./", "TestGitRepository", 1), GIT_EEXISTS);
 
+	git_submodule_free(sm);
 	git_buf_free(&name);
 }