submodule: add more robust error handling when a submodule path is found on add

parent c07abd65
...@@ -163,10 +163,12 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa ...@@ -163,10 +163,12 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
if ((error = git_repository_index__weakptr(&index, repo)) < 0) if ((error = git_repository_index__weakptr(&index, repo)) < 0)
goto out; goto out;
if ((error = git_index_find(NULL, index, path)) == 0) { if ((error = git_index_find(NULL, index, path)) != GIT_ENOTFOUND) {
giterr_set(GITERR_SUBMODULE, if (!error) {
"File '%s' already exists in the index", path); giterr_set(GITERR_SUBMODULE,
*occupied = true; "File '%s' already exists in the index", path);
*occupied = true;
}
goto out; goto out;
} }
...@@ -176,14 +178,15 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa ...@@ -176,14 +178,15 @@ static int is_path_occupied(bool *occupied, git_repository *repo, const char *pa
if ((error = git_path_to_dir(&dir)) < 0) if ((error = git_path_to_dir(&dir)) < 0)
goto out; goto out;
if ((error = git_index_find_prefix(NULL, index, dir.ptr)) < 0 && error != GIT_ENOTFOUND) if ((error = git_index_find_prefix(NULL, index, dir.ptr)) != GIT_ENOTFOUND) {
goto out; if (!error) {
giterr_set(GITERR_SUBMODULE,
if (!error) { "Directory '%s' already exists in the index", path);
giterr_set(GITERR_SUBMODULE, *occupied = true;
"Directory '%s' already exists in the index", path); }
*occupied = true; goto out;
} }
error = 0; error = 0;
out: out:
......
...@@ -156,7 +156,7 @@ void test_submodule_add__path_exists_in_index(void) ...@@ -156,7 +156,7 @@ void test_submodule_add__path_exists_in_index(void)
cl_git_pass(git_buf_joinpath(&filename, "subdirectory", "test.txt")); cl_git_pass(git_buf_joinpath(&filename, "subdirectory", "test.txt"));
cl_git_pass(git_repository_index(&index, g_repo)); cl_git_pass(git_repository_index__weakptr(&index, g_repo));
test_add_entry(index, valid_blob_id, filename.ptr, GIT_FILEMODE_BLOB); test_add_entry(index, valid_blob_id, filename.ptr, GIT_FILEMODE_BLOB);
...@@ -174,7 +174,7 @@ void test_submodule_add__file_exists_in_index(void) ...@@ -174,7 +174,7 @@ void test_submodule_add__file_exists_in_index(void)
g_repo = cl_git_sandbox_init("testrepo"); g_repo = cl_git_sandbox_init("testrepo");
cl_git_pass(git_repository_index(&index, g_repo)); cl_git_pass(git_repository_index__weakptr(&index, g_repo));
test_add_entry(index, valid_blob_id, "subdirectory", GIT_FILEMODE_BLOB); test_add_entry(index, valid_blob_id, "subdirectory", GIT_FILEMODE_BLOB);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment