Commit 4b000fc0 by Edward Thomson Committed by GitHub

Merge pull request #4305 from pks-t/pks/submodule-with-bare-repo

Submodules with bare repo
parents bcb7e92d 477b3e04
......@@ -209,6 +209,11 @@ int git_submodule_lookup(
assert(repo && name);
if (repo->is_bare) {
giterr_set(GITERR_SUBMODULE, "cannot get submodules without a working tree");
return -1;
}
if (repo->submodule_cache != NULL) {
khiter_t pos = git_strmap_lookup_index(repo->submodule_cache, name);
if (git_strmap_valid_index(repo->submodule_cache, pos)) {
......@@ -549,6 +554,11 @@ int git_submodule_foreach(
int error;
size_t i;
if (repo->is_bare) {
giterr_set(GITERR_SUBMODULE, "cannot get submodules without a working tree");
return -1;
}
if ((error = git_strmap_alloc(&submodules)) < 0)
return error;
......
[core]
repositoryformatversion = 0
filemode = true
bare = true
P pack-b69d04bb39ac274669e2184e45bd90015d02ef5b.pack
97896810b3210244a62a82458b8e0819ecfc6850
......@@ -11,6 +11,11 @@ void test_submodule_lookup__initialize(void)
g_repo = setup_fixture_submod2();
}
void test_submodule_lookup__cleanup(void)
{
cl_git_sandbox_cleanup();
}
void test_submodule_lookup__simple_lookup(void)
{
assert_submodule_exists(g_repo, "sm_unchanged");
......@@ -389,7 +394,8 @@ void test_submodule_lookup__renamed(void)
cl_assert_equal_i(8, data.count);
}
void test_submodule_lookup_cached(void) {
void test_submodule_lookup__cached(void)
{
git_submodule *sm;
git_submodule *sm2;
/* See that the simple tests still pass. */
......@@ -413,3 +419,29 @@ void test_submodule_lookup_cached(void) {
git_submodule_free(sm);
git_submodule_free(sm2);
}
void test_submodule_lookup__lookup_in_bare_repository_fails(void)
{
git_submodule *sm;
cl_git_sandbox_cleanup();
g_repo = cl_git_sandbox_init("submodules.git");
cl_git_fail(git_submodule_lookup(&sm, g_repo, "nonexisting"));
}
static int foreach_cb(git_submodule *sm, const char *name, void *payload)
{
GIT_UNUSED(sm);
GIT_UNUSED(name);
GIT_UNUSED(payload);
return 0;
}
void test_submodule_lookup__foreach_in_bare_repository_fails(void)
{
cl_git_sandbox_cleanup();
g_repo = cl_git_sandbox_init("submodules.git");
cl_git_fail(git_submodule_foreach(g_repo, foreach_cb, NULL));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment