diff options
Diffstat (limited to 'src/submodule.c')
| -rw-r--r-- | src/submodule.c | 35 |
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) */ |
