|
Packit Service |
20376f |
#include "clar_libgit2.h"
|
|
Packit Service |
20376f |
#include "posix.h"
|
|
Packit Service |
20376f |
#include "path.h"
|
|
Packit Service |
20376f |
#include "submodule_helpers.h"
|
|
Packit Service |
20376f |
#include "config/config_helpers.h"
|
|
Packit Service |
20376f |
#include "fileops.h"
|
|
Packit Service |
20376f |
#include "repository.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static git_repository *g_repo = NULL;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_submodule_add__cleanup(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_sandbox_cleanup();
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static void assert_submodule_url(const char* name, const char *url)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_buf key = GIT_BUF_INIT;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_buf_printf(&key, "submodule.%s.url", name));
|
|
Packit Service |
20376f |
assert_config_entry_value(g_repo, git_buf_cstr(&key), url);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_buf_free(&key);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_submodule_add__url_absolute(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_submodule *sm;
|
|
Packit Service |
20376f |
git_repository *repo;
|
|
Packit Service |
20376f |
git_buf dot_git_content = GIT_BUF_INIT;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
g_repo = setup_fixture_submod2();
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* re-add existing submodule */
|
|
Packit Service |
20376f |
cl_git_fail_with(
|
|
Packit Service |
20376f |
GIT_EEXISTS,
|
|
Packit Service |
20376f |
git_submodule_add_setup(NULL, g_repo, "whatever", "sm_unchanged", 1));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* add a submodule using a gitlink */
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_submodule_add_setup(&sm, g_repo, "https://github.com/libgit2/libgit2.git", "sm_libgit2", 1)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
git_submodule_free(sm);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(git_path_isfile("submod2/" "sm_libgit2" "/.git"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(git_path_isdir("submod2/.git/modules"));
|
|
Packit Service |
20376f |
cl_assert(git_path_isdir("submod2/.git/modules/" "sm_libgit2"));
|
|
Packit Service |
20376f |
cl_assert(git_path_isfile("submod2/.git/modules/" "sm_libgit2" "/HEAD"));
|
|
Packit Service |
20376f |
assert_submodule_url("sm_libgit2", "https://github.com/libgit2/libgit2.git");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_repository_open(&repo, "submod2/" "sm_libgit2"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* Verify worktree path is relative */
|
|
Packit Service |
20376f |
assert_config_entry_value(repo, "core.worktree", "../../../sm_libgit2/");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* Verify gitdir path is relative */
|
|
Packit Service |
20376f |
cl_git_pass(git_futils_readbuffer(&dot_git_content, "submod2/" "sm_libgit2" "/.git"));
|
|
Packit Service |
20376f |
cl_assert_equal_s("gitdir: ../.git/modules/sm_libgit2/", dot_git_content.ptr);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_repository_free(repo);
|
|
Packit Service |
20376f |
git_buf_free(&dot_git_content);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* add a submodule not using a gitlink */
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_submodule_add_setup(&sm, g_repo, "https://github.com/libgit2/libgit2.git", "sm_libgit2b", 0)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
git_submodule_free(sm);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(git_path_isdir("submod2/" "sm_libgit2b" "/.git"));
|
|
Packit Service |
20376f |
cl_assert(git_path_isfile("submod2/" "sm_libgit2b" "/.git/HEAD"));
|
|
Packit Service |
20376f |
cl_assert(!git_path_exists("submod2/.git/modules/" "sm_libgit2b"));
|
|
Packit Service |
20376f |
assert_submodule_url("sm_libgit2b", "https://github.com/libgit2/libgit2.git");
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_submodule_add__url_relative(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_submodule *sm;
|
|
Packit Service |
20376f |
git_remote *remote;
|
|
Packit Service |
20376f |
git_strarray problems = {0};
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* default remote url is https://github.com/libgit2/false.git */
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("testrepo2");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* make sure we don't default to origin - rename origin -> test_remote */
|
|
Packit Service |
20376f |
cl_git_pass(git_remote_rename(&problems, g_repo, "origin", "test_remote"));
|
|
Packit Service |
20376f |
cl_assert_equal_i(0, problems.count);
|
|
Packit Service |
20376f |
git_strarray_free(&problems);
|
|
Packit Service |
20376f |
cl_git_fail(git_remote_lookup(&remote, g_repo, "origin"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_submodule_add_setup(&sm, g_repo, "../TestGitRepository", "TestGitRepository", 1)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
git_submodule_free(sm);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
assert_submodule_url("TestGitRepository", "https://github.com/libgit2/TestGitRepository");
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_submodule_add__url_relative_to_origin(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_submodule *sm;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* default remote url is https://github.com/libgit2/false.git */
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("testrepo2");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_submodule_add_setup(&sm, g_repo, "../TestGitRepository", "TestGitRepository", 1)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
git_submodule_free(sm);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
assert_submodule_url("TestGitRepository", "https://github.com/libgit2/TestGitRepository");
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_submodule_add__url_relative_to_workdir(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_submodule *sm;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* In this repo, HEAD (master) has no remote tracking branc h*/
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("testrepo");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_submodule_add_setup(&sm, g_repo, "./", "TestGitRepository", 1)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
git_submodule_free(sm);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
assert_submodule_url("TestGitRepository", git_repository_workdir(g_repo));
|
|
Packit Service |
20376f |
}
|