summaryrefslogtreecommitdiff
path: root/src/submodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/submodule.c')
-rw-r--r--src/submodule.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/src/submodule.c b/src/submodule.c
index 2a12a97e8..17e1a3561 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -168,11 +168,18 @@ int git_submodule_lookup(
return error;
}
- /* If it's not configured, we need to check for the path */
+ /* If it's not configured or we're looking by path */
if (location == 0 || location == GIT_SUBMODULE_STATUS_IN_WD) {
git_config_backend *mods;
const char *pattern = "submodule\\..*\\.path";
- fbp_data data = { name, NULL };
+ git_buf path = GIT_BUF_INIT;
+ fbp_data data = { NULL, NULL };
+
+ git_buf_puts(&path, name);
+ while (path.ptr[path.size-1] == '/') {
+ path.ptr[--path.size] = '\0';
+ }
+ data.path = path.ptr;
mods = open_gitmodules(repo, GITMODULES_EXISTING);
@@ -189,8 +196,7 @@ int git_submodule_lookup(
if (data.name) {
git__free(sm->name);
sm->name = data.name;
- sm->path = git__strdup(name);
- GITERR_CHECK_ALLOC(sm->path);
+ sm->path = git_buf_detach(&path);
/* Try to load again with the right name */
if ((error = git_submodule_reload(sm, false)) < 0) {
@@ -198,6 +204,8 @@ int git_submodule_lookup(
return error;
}
}
+
+ git_buf_free(&path);
}
if ((error = git_submodule_location(&location, sm)) < 0) {
@@ -1691,28 +1699,9 @@ static int submodule_load_from_config(
/* Deregister under name being replaced */
if (replaced) {
- git_submodule_free(sm);
git__free(replaced);
}
- /* Insert under alternate key */
- if (alternate) {
- void *old_sm = NULL;
-
- if (error < 0)
- goto done;
- if (error > 0)
- error = 0;
-
- GIT_REFCOUNT_INC(sm); /* increase refcount for new key */
-
- /* if we replaced an old module under this key, release the old one */
- if (old_sm && ((git_submodule *)old_sm) != sm) {
- git_submodule_free(old_sm);
- /* TODO: log warning about multiple submodules with same path */
- }
- }
-
/* TODO: Look up path in index and if it is present but not a GITLINK
* then this should be deleted (at least to match git's behavior)
*/