diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-06-29 15:22:47 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-06-29 15:22:47 -0500 |
commit | 4a0313bc4e9b20a55aa6d0922312f97df743df72 (patch) | |
tree | 8e0256a5ada24dcfcb137eec1c0f4d0bfaceb06a | |
parent | ca2466ff4022cd539e8126ac9746fd25977fc1cc (diff) | |
parent | 8b3800601866b8a579a1787089673edc6380c1eb (diff) | |
download | libgit2-4a0313bc4e9b20a55aa6d0922312f97df743df72.tar.gz |
Merge pull request #3269 from libgit2/cmn/release-fixups
Submodule and http fixes
-rw-r--r-- | src/submodule.c | 35 | ||||
-rw-r--r-- | src/transports/http.c | 3 | ||||
-rw-r--r-- | tests/submodule/lookup.c | 3 |
3 files changed, 16 insertions, 25 deletions
diff --git a/src/submodule.c b/src/submodule.c index 796364bb8..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) { @@ -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) */ diff --git a/src/transports/http.c b/src/transports/http.c index bae2a328d..2110f3226 100644 --- a/src/transports/http.c +++ b/src/transports/http.c @@ -336,8 +336,7 @@ static int on_headers_complete(http_parser *parser) if (!t->owner->cred_acquire_cb) { no_callback = 1; } else { - if (allowed_auth_types && - (!t->cred || 0 == (t->cred->credtype & allowed_auth_types))) { + if (allowed_auth_types) { error = t->owner->cred_acquire_cb(&t->cred, t->owner->url, 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) |