diff options
| author | Carson Howard <carsonh@axosoft.com> | 2018-03-28 06:48:55 -0700 |
|---|---|---|
| committer | Carson Howard <carsonh@axosoft.com> | 2018-03-28 06:48:55 -0700 |
| commit | 69a282da2713ddf524112910e27f8e874bcabd4d (patch) | |
| tree | fb5457e24b78f46430d536f572b1593368c5f3ef | |
| parent | c07abd6509cc1d22bcddd377c0e49de4e7c7ced9 (diff) | |
| download | libgit2-69a282da2713ddf524112910e27f8e874bcabd4d.tar.gz | |
submodule: add more robust error handling when a submodule path is found on add
| -rw-r--r-- | src/submodule.c | 25 | ||||
| -rw-r--r-- | tests/submodule/add.c | 4 |
2 files changed, 16 insertions, 13 deletions
diff --git a/src/submodule.c b/src/submodule.c index cfde81a23..37434669c 100644 --- a/src/submodule.c +++ b/src/submodule.c @@ -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) goto out; - if ((error = git_index_find(NULL, index, path)) == 0) { - giterr_set(GITERR_SUBMODULE, - "File '%s' already exists in the index", path); - *occupied = true; + if ((error = git_index_find(NULL, index, path)) != GIT_ENOTFOUND) { + if (!error) { + giterr_set(GITERR_SUBMODULE, + "File '%s' already exists in the index", path); + *occupied = true; + } goto out; } @@ -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) goto out; - if ((error = git_index_find_prefix(NULL, index, dir.ptr)) < 0 && error != GIT_ENOTFOUND) - goto out; - - if (!error) { - giterr_set(GITERR_SUBMODULE, - "Directory '%s' already exists in the index", path); - *occupied = true; + if ((error = git_index_find_prefix(NULL, index, dir.ptr)) != GIT_ENOTFOUND) { + if (!error) { + giterr_set(GITERR_SUBMODULE, + "Directory '%s' already exists in the index", path); + *occupied = true; + } + goto out; } + error = 0; out: diff --git a/tests/submodule/add.c b/tests/submodule/add.c index 383b5e57f..ebb9d6292 100644 --- a/tests/submodule/add.c +++ b/tests/submodule/add.c @@ -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_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); @@ -174,7 +174,7 @@ void test_submodule_add__file_exists_in_index(void) 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); |
