diff options
author | Carlos Martín Nieto <cmn@dwim.me> | 2015-06-29 21:10:47 +0200 |
---|---|---|
committer | Carlos Martín Nieto <cmn@dwim.me> | 2015-06-29 21:10:47 +0200 |
commit | c28a5c972d07833f329d319714df8e357caf1108 (patch) | |
tree | 2c20bf4e47ad616d59a179ff7518146637a799ad | |
parent | cf4030b04b37425911688fb6a1b9f542b6ad8eab (diff) | |
download | libgit2-c28a5c972d07833f329d319714df8e357caf1108.tar.gz |
submodule: remove trailing slashes from submodule paths
We allow looking up a submodule by path, but we lost the path
normalisation during the recent changes. Bring it back.
-rw-r--r-- | src/submodule.c | 16 | ||||
-rw-r--r-- | tests/submodule/lookup.c | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/submodule.c b/src/submodule.c index f710f8d98..0cd6bb913 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) { diff --git a/tests/submodule/lookup.c b/tests/submodule/lookup.c index 666f56ef1..cddbdcfc2 100644 --- a/tests/submodule/lookup.c +++ b/tests/submodule/lookup.c @@ -31,6 +31,9 @@ void test_submodule_lookup__simple_lookup(void) /* lookup non-existent item */ refute_submodule_exists(g_repo, "no_such_file", GIT_ENOTFOUND); + + /* lookup a submodule by path with a trailing slash */ + assert_submodule_exists(g_repo, "sm_added_and_uncommited/"); } void test_submodule_lookup__accessors(void) |