summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-06-29 21:10:47 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-06-29 21:10:47 +0200
commitc28a5c972d07833f329d319714df8e357caf1108 (patch)
tree2c20bf4e47ad616d59a179ff7518146637a799ad
parentcf4030b04b37425911688fb6a1b9f542b6ad8eab (diff)
downloadlibgit2-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.c16
-rw-r--r--tests/submodule/lookup.c3
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)