]>
git.proxmox.com Git - libgit2.git/blob - tests/libgit2/submodule/open.c
1 #include "clar_libgit2.h"
2 #include "submodule_helpers.h"
5 static git_repository
*g_parent
;
6 static git_repository
*g_child
;
7 static git_submodule
*g_module
;
9 void test_submodule_open__initialize(void)
11 g_parent
= setup_fixture_submod2();
14 void test_submodule_open__cleanup(void)
16 git_submodule_free(g_module
);
17 git_repository_free(g_child
);
18 cl_git_sandbox_cleanup();
24 static void assert_sm_valid(git_repository
*parent
, git_repository
*child
, const char *sm_name
)
26 git_str expected
= GIT_STR_INIT
, actual
= GIT_STR_INIT
;
28 /* assert working directory */
29 cl_git_pass(git_str_joinpath(&expected
, git_repository_workdir(parent
), sm_name
));
30 cl_git_pass(git_fs_path_prettify_dir(&expected
, expected
.ptr
, NULL
));
31 cl_git_pass(git_str_sets(&actual
, git_repository_workdir(child
)));
32 cl_git_pass(git_fs_path_prettify_dir(&actual
, actual
.ptr
, NULL
));
33 cl_assert_equal_s(expected
.ptr
, actual
.ptr
);
35 git_str_clear(&expected
);
36 git_str_clear(&actual
);
38 /* assert common directory */
39 cl_git_pass(git_str_joinpath(&expected
, git_repository_commondir(parent
), "modules"));
40 cl_git_pass(git_str_joinpath(&expected
, expected
.ptr
, sm_name
));
41 cl_git_pass(git_fs_path_prettify_dir(&expected
, expected
.ptr
, NULL
));
42 cl_git_pass(git_str_sets(&actual
, git_repository_commondir(child
)));
43 cl_git_pass(git_fs_path_prettify_dir(&actual
, actual
.ptr
, NULL
));
44 cl_assert_equal_s(expected
.ptr
, actual
.ptr
);
46 /* assert git directory */
47 cl_git_pass(git_str_sets(&actual
, git_repository_path(child
)));
48 cl_git_pass(git_fs_path_prettify_dir(&actual
, actual
.ptr
, NULL
));
49 cl_assert_equal_s(expected
.ptr
, actual
.ptr
);
51 git_str_dispose(&expected
);
52 git_str_dispose(&actual
);
55 void test_submodule_open__opening_via_lookup_succeeds(void)
57 cl_git_pass(git_submodule_lookup(&g_module
, g_parent
, "sm_unchanged"));
58 cl_git_pass(git_submodule_open(&g_child
, g_module
));
59 assert_sm_valid(g_parent
, g_child
, "sm_unchanged");
62 void test_submodule_open__direct_open_succeeds(void)
64 git_str path
= GIT_STR_INIT
;
66 cl_git_pass(git_str_joinpath(&path
, git_repository_workdir(g_parent
), "sm_unchanged"));
67 cl_git_pass(git_repository_open(&g_child
, path
.ptr
));
68 assert_sm_valid(g_parent
, g_child
, "sm_unchanged");
70 git_str_dispose(&path
);
73 void test_submodule_open__direct_open_succeeds_for_broken_sm_with_gitdir(void)
75 git_str path
= GIT_STR_INIT
;
78 * This is actually not a valid submodule, but we
79 * encountered at least one occasion where the gitdir
80 * file existed inside of a submodule's gitdir. As we are
81 * now able to open these submodules correctly, we still
82 * add a test for this.
84 cl_git_mkfile("submod2/.git/modules/sm_unchanged/gitdir", ".git");
85 cl_git_pass(git_str_joinpath(&path
, git_repository_workdir(g_parent
), "sm_unchanged"));
86 cl_git_pass(git_repository_open(&g_child
, path
.ptr
));
87 assert_sm_valid(g_parent
, g_child
, "sm_unchanged");
89 git_str_dispose(&path
);