|
Packit Service |
20376f |
#include "clar_libgit2.h"
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static const char* tagger_name = "Vicent Marti";
|
|
Packit Service |
20376f |
static const char* tagger_email = "vicent@github.com";
|
|
Packit Service |
20376f |
static const char* tagger_message = "This is my tag.\n\nThere are many tags, but this one is mine\n";
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static const char *tag2_id = "7b4384978d2493e851f9cca7858815fac9b10980";
|
|
Packit Service |
20376f |
static const char *tagged_commit = "e90810b8df3e80c413d903f631643c716887138d";
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
static git_repository *g_repo;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
// Fixture setup and teardown
|
|
Packit Service |
20376f |
void test_object_tag_write__initialize(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
g_repo = cl_git_sandbox_init("testrepo");
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__cleanup(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_git_sandbox_cleanup();
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__basic(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// write a tag to the repository and read it again
|
|
Packit Service |
20376f |
git_tag *tag;
|
|
Packit Service |
20376f |
git_oid target_id, tag_id;
|
|
Packit Service |
20376f |
git_signature *tagger;
|
|
Packit Service |
20376f |
const git_signature *tagger1;
|
|
Packit Service |
20376f |
git_reference *ref_tag;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* create signature */
|
|
Packit Service |
20376f |
cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(
|
|
Packit Service |
20376f |
git_tag_create(&tag_id, g_repo,
|
|
Packit Service |
20376f |
"the-tag", target, tagger, tagger_message, 0)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
git_signature_free(tagger);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_lookup(&tag, g_repo, &tag_id));
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(git_tag_target_id(tag), &target_id) == 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* Check attributes were set correctly */
|
|
Packit Service |
20376f |
tagger1 = git_tag_tagger(tag);
|
|
Packit Service |
20376f |
cl_assert(tagger1 != NULL);
|
|
Packit Service |
20376f |
cl_assert_equal_s(tagger1->name, tagger_name);
|
|
Packit Service |
20376f |
cl_assert_equal_s(tagger1->email, tagger_email);
|
|
Packit Service |
20376f |
cl_assert(tagger1->when.time == 123456789);
|
|
Packit Service |
20376f |
cl_assert(tagger1->when.offset == 60);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_s(git_tag_message(tag), tagger_message);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_lookup(&ref_tag, g_repo, "refs/tags/the-tag"));
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(git_reference_target(ref_tag), &tag_id) == 0);
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_delete(ref_tag));
|
|
Packit Service |
20376f |
git_reference_free(ref_tag);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_tag_free(tag);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__overwrite(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// Attempt to write a tag bearing the same name than an already existing tag
|
|
Packit Service |
20376f |
git_oid target_id, tag_id;
|
|
Packit Service |
20376f |
git_signature *tagger;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* create signature */
|
|
Packit Service |
20376f |
cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_EEXISTS, git_tag_create(
|
|
Packit Service |
20376f |
&tag_id, /* out id */
|
|
Packit Service |
20376f |
g_repo,
|
|
Packit Service |
20376f |
"e90810b",
|
|
Packit Service |
20376f |
target,
|
|
Packit Service |
20376f |
tagger,
|
|
Packit Service |
20376f |
tagger_message,
|
|
Packit Service |
20376f |
0));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
git_signature_free(tagger);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__replace(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// Replace an already existing tag
|
|
Packit Service |
20376f |
git_oid target_id, tag_id, old_tag_id;
|
|
Packit Service |
20376f |
git_signature *tagger;
|
|
Packit Service |
20376f |
git_reference *ref_tag;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_lookup(&ref_tag, g_repo, "refs/tags/e90810b"));
|
|
Packit Service |
20376f |
git_oid_cpy(&old_tag_id, git_reference_target(ref_tag));
|
|
Packit Service |
20376f |
git_reference_free(ref_tag);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
/* create signature */
|
|
Packit Service |
20376f |
cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_create(
|
|
Packit Service |
20376f |
&tag_id, /* out id */
|
|
Packit Service |
20376f |
g_repo,
|
|
Packit Service |
20376f |
"e90810b",
|
|
Packit Service |
20376f |
target,
|
|
Packit Service |
20376f |
tagger,
|
|
Packit Service |
20376f |
tagger_message,
|
|
Packit Service |
20376f |
1));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
git_signature_free(tagger);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_lookup(&ref_tag, g_repo, "refs/tags/e90810b"));
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(git_reference_target(ref_tag), &tag_id) == 0);
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(git_reference_target(ref_tag), &old_tag_id) != 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_reference_free(ref_tag);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__lightweight(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// write a lightweight tag to the repository and read it again
|
|
Packit Service |
20376f |
git_oid target_id, object_id;
|
|
Packit Service |
20376f |
git_reference *ref_tag;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_create_lightweight(
|
|
Packit Service |
20376f |
&object_id,
|
|
Packit Service |
20376f |
g_repo,
|
|
Packit Service |
20376f |
"light-tag",
|
|
Packit Service |
20376f |
target,
|
|
Packit Service |
20376f |
0));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(&object_id, &target_id) == 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_reference_lookup(&ref_tag, g_repo, "refs/tags/light-tag"));
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(git_reference_target(ref_tag), &target_id) == 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "light-tag"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_reference_free(ref_tag);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__lightweight_over_existing(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// Attempt to write a lightweight tag bearing the same name than an already existing tag
|
|
Packit Service |
20376f |
git_oid target_id, object_id, existing_object_id;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_EEXISTS, git_tag_create_lightweight(
|
|
Packit Service |
20376f |
&object_id,
|
|
Packit Service |
20376f |
g_repo,
|
|
Packit Service |
20376f |
"e90810b",
|
|
Packit Service |
20376f |
target,
|
|
Packit Service |
20376f |
0));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&existing_object_id, tag2_id);
|
|
Packit Service |
20376f |
cl_assert(git_oid_cmp(&object_id, &existing_object_id) == 0);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__delete(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
// Delete an already existing tag
|
|
Packit Service |
20376f |
git_reference *ref_tag;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_delete(g_repo, "e90810b"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_fail(git_reference_lookup(&ref_tag, g_repo, "refs/tags/e90810b"));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_reference_free(ref_tag);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__creating_with_an_invalid_name_returns_EINVALIDSPEC(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_oid target_id, tag_id;
|
|
Packit Service |
20376f |
git_signature *tagger;
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_EINVALIDSPEC,
|
|
Packit Service |
20376f |
git_tag_create(&tag_id, g_repo,
|
|
Packit Service |
20376f |
"Inv@{id", target, tagger, tagger_message, 0)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_EINVALIDSPEC,
|
|
Packit Service |
20376f |
git_tag_create_lightweight(&tag_id, g_repo,
|
|
Packit Service |
20376f |
"Inv@{id", target, 0)
|
|
Packit Service |
20376f |
);
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
git_signature_free(tagger);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__deleting_with_an_invalid_name_returns_EINVALIDSPEC(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
cl_assert_equal_i(GIT_EINVALIDSPEC, git_tag_delete(g_repo, "Inv@{id"));
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void create_annotation(git_oid *tag_id, const char *name)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_object *target;
|
|
Packit Service |
20376f |
git_oid target_id;
|
|
Packit Service |
20376f |
git_signature *tagger;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_signature_new(&tagger, tagger_name, tagger_email, 123456789, 60));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_oid_fromstr(&target_id, tagged_commit);
|
|
Packit Service |
20376f |
cl_git_pass(git_object_lookup(&target, g_repo, &target_id, GIT_OBJ_COMMIT));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_annotation_create(tag_id, g_repo, name, target, tagger, "boom!"));
|
|
Packit Service |
20376f |
git_object_free(target);
|
|
Packit Service |
20376f |
git_signature_free(tagger);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__creating_an_annotation_stores_the_new_object_in_the_odb(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_oid tag_id;
|
|
Packit Service |
20376f |
git_tag *tag;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
create_annotation(&tag_id, "new_tag");
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
cl_git_pass(git_tag_lookup(&tag, g_repo, &tag_id));
|
|
Packit Service |
20376f |
cl_assert_equal_s("new_tag", git_tag_name(tag));
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
git_tag_free(tag);
|
|
Packit Service |
20376f |
}
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
void test_object_tag_write__creating_an_annotation_does_not_create_a_reference(void)
|
|
Packit Service |
20376f |
{
|
|
Packit Service |
20376f |
git_oid tag_id;
|
|
Packit Service |
20376f |
git_reference *tag_ref;
|
|
Packit Service |
20376f |
|
|
Packit Service |
20376f |
create_annotation(&tag_id, "new_tag");
|
|
Packit Service |
20376f |
cl_git_fail_with(git_reference_lookup(&tag_ref, g_repo, "refs/tags/new_tag"), GIT_ENOTFOUND);
|
|
Packit Service |
20376f |
}
|