Commit 6f6be8fe by Carlos Martín Nieto

remote: write tests for cloning from an empty repo

Cloning from an empty repo must set master's upstream to origin's
master, even if neither of them exist.

Fetching from a non-empty origin must then mark the master branch
for-merge. This currently fails.
parent 64a862c2
......@@ -282,3 +282,37 @@ void test_clone_nonetwork__clone_into_updates_reflog_properly(void)
git_remote_free(remote);
git_signature_free(sig);
}
static void cleanup_repository(void *path)
{
if (g_repo) {
git_repository_free(g_repo);
g_repo = NULL;
}
cl_fixture_cleanup((const char *)path);
}
void test_clone_nonetwork__clone_from_empty_sets_upstream(void)
{
git_config *config;
git_repository *repo;
const char *str;
/* Create an empty repo to clone from */
cl_set_cleanup(&cleanup_repository, "./test1");
cl_git_pass(git_repository_init(&g_repo, "./test1", 0));
cl_set_cleanup(&cleanup_repository, "./repowithunborn");
cl_git_pass(git_clone(&repo, "./test1", "./repowithunborn", NULL));
cl_git_pass(git_repository_config(&config, repo));
cl_git_pass(git_config_get_string(&str, config, "branch.master.remote"));
cl_assert_equal_s("origin", str);
cl_git_pass(git_config_get_string(&str, config, "branch.master.merge"));
cl_assert_equal_s("refs/heads/master", str);
git_config_free(config);
git_repository_free(repo);
cl_fixture_cleanup("./repowithunborn");
}
......@@ -28,4 +28,3 @@
#define FETCH_HEAD_EXPLICIT_DATA \
"0966a434eb1a025db6b71485ab63a3bfbea520b6\t\tbranch 'first-merge' of git://github.com/libgit2/TestGitRepository\n"
......@@ -307,3 +307,39 @@ void test_fetchhead_nonetwork__invalid_description(void)
cl_assert(git__prefixcmp(giterr_last()->message, "Invalid description") == 0);
}
static int assert_master_for_merge(const char *ref, const char *url, const git_oid *id, unsigned int is_merge, void *data)
{
GIT_UNUSED(url);
GIT_UNUSED(id);
GIT_UNUSED(data);
if (!strcmp("refs/heads/master", ref) && !is_merge)
return -1;
return 0;
}
void test_fetchhead_nonetwork__unborn_with_upstream(void)
{
git_repository *repo;
git_remote *remote;
/* Create an empty repo to clone from */
cl_set_cleanup(&cleanup_repository, "./test1");
cl_git_pass(git_repository_init(&g_repo, "./test1", 0));
cl_set_cleanup(&cleanup_repository, "./repowithunborn");
cl_git_pass(git_clone(&repo, "./test1", "./repowithunborn", NULL));
/* Simulate someone pushing to it by changing to one that has stuff */
cl_git_pass(git_remote_load(&remote, repo, "origin"));
cl_git_pass(git_remote_set_url(remote, cl_fixture("testrepo.git")));
cl_git_pass(git_remote_save(remote));
cl_git_pass(git_remote_fetch(remote, NULL, NULL));
git_remote_free(remote);
cl_git_pass(git_repository_fetchhead_foreach(repo, assert_master_for_merge, NULL));
git_repository_free(repo);
cl_fixture_cleanup("./repowithunborn");
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment