]> git.proxmox.com Git - libgit2.git/commitdiff
submdule: reproduce double-reporting of a submodule in foreach
authorCarlos Martín Nieto <cmn@dwim.me>
Sat, 11 Jul 2015 11:32:57 +0000 (13:32 +0200)
committerCarlos Martín Nieto <cmn@dwim.me>
Sat, 11 Jul 2015 11:32:57 +0000 (13:32 +0200)
When we rename a submodule, we should be merging two sets of information
based on whether their path is the same. We currently only deduplicate
on equal name, which causes us to double-report.

tests/submodule/lookup.c

index 4d40e2279087839004732c85b2b46526246383cf..9b2b3aa196438befee753effb6b2c5d83f20a2db 100644 (file)
@@ -1,6 +1,7 @@
 #include "clar_libgit2.h"
 #include "submodule_helpers.h"
 #include "git2/sys/repository.h"
+#include "repository.h"
 #include "fileops.h"
 
 static git_repository *g_repo = NULL;
@@ -103,8 +104,25 @@ static int sm_lookup_cb(git_submodule *sm, const char *name, void *payload)
 
 void test_submodule_lookup__foreach(void)
 {
+       git_config *cfg;
        sm_lookup_data data;
+
+       memset(&data, 0, sizeof(data));
+       cl_git_pass(git_submodule_foreach(g_repo, sm_lookup_cb, &data));
+       cl_assert_equal_i(8, data.count);
+
        memset(&data, 0, sizeof(data));
+
+       /* Change the path for a submodule so it doesn't match the name */
+       cl_git_pass(git_config_open_ondisk(&cfg, "submod2/.gitmodules"));
+
+       cl_git_pass(git_config_set_string(cfg, "submodule.smchangedindex.path", "sm_changed_index"));
+       cl_git_pass(git_config_set_string(cfg, "submodule.smchangedindex.url", "../submod2_target"));
+       cl_git_pass(git_config_delete_entry(cfg, "submodule.sm_changed_index.path"));
+       cl_git_pass(git_config_delete_entry(cfg, "submodule.sm_changed_index.url"));
+
+       git_config_free(cfg);
+
        cl_git_pass(git_submodule_foreach(g_repo, sm_lookup_cb, &data));
        cl_assert_equal_i(8, data.count);
 }