]>
git.proxmox.com Git - libgit2.git/blob - tests/worktree/submodule.c
6b0c074526c54969dc1125804c1960501f00708f
1 #include "clar_libgit2.h"
2 #include "repository.h"
4 #include "worktree_helpers.h"
6 #define WORKTREE_PARENT "submodules-worktree-parent"
7 #define WORKTREE_CHILD "submodules-worktree-child"
9 static worktree_fixture parent
10 = WORKTREE_FIXTURE_INIT("submodules", WORKTREE_PARENT
);
11 static worktree_fixture child
12 = WORKTREE_FIXTURE_INIT(NULL
, WORKTREE_CHILD
);
14 void test_worktree_submodule__initialize(void)
16 setup_fixture_worktree(&parent
);
19 "submodules/testrepo/.gitted",
20 "submodules/testrepo/.git"));
22 setup_fixture_worktree(&child
);
25 void test_worktree_submodule__cleanup(void)
27 cleanup_fixture_worktree(&child
);
28 cleanup_fixture_worktree(&parent
);
31 void test_worktree_submodule__submodule_worktree_parent(void)
33 cl_assert(git_repository_path(parent
.worktree
) != NULL
);
34 cl_assert(git_repository_workdir(parent
.worktree
) != NULL
);
36 cl_assert(!parent
.repo
->is_worktree
);
37 cl_assert(parent
.worktree
->is_worktree
);
40 void test_worktree_submodule__submodule_worktree_child(void)
42 cl_assert(!parent
.repo
->is_worktree
);
43 cl_assert(parent
.worktree
->is_worktree
);
44 cl_assert(child
.worktree
->is_worktree
);
47 void test_worktree_submodule__open_discovered_submodule_worktree(void)
49 git_buf path
= GIT_BUF_INIT
;
52 cl_git_pass(git_repository_discover(&path
,
53 git_repository_workdir(child
.worktree
), false, NULL
));
54 cl_git_pass(git_repository_open(&repo
, path
.ptr
));
55 cl_assert_equal_s(git_repository_workdir(child
.worktree
),
56 git_repository_workdir(repo
));
58 git_buf_dispose(&path
);
59 git_repository_free(repo
);
62 void test_worktree_submodule__resolve_relative_url(void)
64 git_str wt_path
= GIT_STR_INIT
;
65 git_buf sm_relative_path
= GIT_BUF_INIT
, wt_relative_path
= GIT_BUF_INIT
;
69 cl_git_pass(git_futils_mkdir("subdir", 0755, GIT_MKDIR_PATH
));
70 cl_git_pass(git_fs_path_prettify_dir(&wt_path
, "subdir", NULL
));
71 cl_git_pass(git_str_joinpath(&wt_path
, wt_path
.ptr
, "wt"));
73 /* Open child repository, which is a submodule */
74 cl_git_pass(git_repository_open(&child
.repo
, WORKTREE_CHILD
));
76 /* Create worktree of submodule repository */
77 cl_git_pass(git_worktree_add(&wt
, child
.repo
, "subdir", wt_path
.ptr
, NULL
));
78 cl_git_pass(git_repository_open_from_worktree(&repo
, wt
));
80 cl_git_pass(git_submodule_resolve_url(&sm_relative_path
, repo
,
81 "../" WORKTREE_CHILD
));
82 cl_git_pass(git_submodule_resolve_url(&wt_relative_path
, child
.repo
,
83 "../" WORKTREE_CHILD
));
85 cl_assert_equal_s(sm_relative_path
.ptr
, wt_relative_path
.ptr
);
87 git_worktree_free(wt
);
88 git_repository_free(repo
);
89 git_str_dispose(&wt_path
);
90 git_buf_dispose(&sm_relative_path
);
91 git_buf_dispose(&wt_relative_path
);