summaryrefslogtreecommitdiff
path: root/tests/submodule
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2017-07-10 12:25:43 +0200
committerPatrick Steinhardt <ps@pks.im>2017-08-25 18:15:12 +0200
commit477b3e047426d7ccddb6028416ff0fcc2541a0fd (patch)
tree2385384349066ce5dd5b3fcc41164d9af8825983 /tests/submodule
parenta889c05f2abfec5e45fa50faf7307c06c7c9b25b (diff)
downloadlibgit2-477b3e047426d7ccddb6028416ff0fcc2541a0fd.tar.gz
submodule: refuse lookup in bare repositories
While it is technically possible to look up submodules inside of a bare repository by reading the submodule configuration of a specific commit, we do not offer this functionality right now. As such, calling both `git_submodule_lookup` and `git_submodule_foreach` should error out early when these functions encounter a bare repository. While `git_submodule_lookup` already does return an error due to not being able to parse the configuration, `git_submodule_foreach` simply returns success and never invokes the callback function. Fix the issue by having both functions check whether the repository is bare and returning an error in that case.
Diffstat (limited to 'tests/submodule')
-rw-r--r--tests/submodule/lookup.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/submodule/lookup.c b/tests/submodule/lookup.c
index aa812fb98..f84f07c60 100644
--- a/tests/submodule/lookup.c
+++ b/tests/submodule/lookup.c
@@ -419,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));
+}