Add test demonstrating that one can create a tag pointing at a non existent target
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
diff --git a/tests/t08-tag.c b/tests/t08-tag.c
index d1847f3..7b3c886 100644
--- a/tests/t08-tag.c
+++ b/tests/t08-tag.c
@@ -72,7 +72,6 @@ BEGIN_TEST(write0, "write a tag to the repository and read it again")
git_oid target_id, tag_id;
const git_signature *tagger;
git_reference *ref_tag;
- /* char hex_oid[41]; */
must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
@@ -116,8 +115,50 @@ BEGIN_TEST(write0, "write a tag to the repository and read it again")
END_TEST
+BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid and read it again")
+ git_repository *repo;
+ git_tag *tag;
+ git_oid target_id, tag_id;
+ const git_signature *tagger;
+ git_reference *ref_tag;
+ git_object *zombie;
+
+ must_pass(git_repository_open(&repo, REPOSITORY_FOLDER));
+
+ git_oid_mkstr(&target_id, "deadbeef1b46c854b31185ea97743be6a8774479");
+
+ /* create signature */
+ tagger = git_signature_new(TAGGER_NAME, TAGGER_EMAIL, 123456789, 60);
+ must_be_true(tagger != NULL);
+
+ must_pass(git_tag_create(
+ &tag_id, /* out id */
+ repo,
+ "the-zombie-tag",
+ &target_id,
+ GIT_OBJ_COMMIT,
+ tagger,
+ TAGGER_MESSAGE));
+
+ git_signature_free((git_signature *)tagger);
+
+ must_pass(git_tag_lookup(&tag, repo, &tag_id));
+
+ /* The non existent target can not be looked up */
+ must_fail(git_tag_target(&zombie, tag));
+
+ must_pass(git_reference_lookup(&ref_tag, repo, "refs/tags/the-zombie-tag"));
+
+ must_pass(git_reference_delete(ref_tag));
+ must_pass(remove_loose_object(REPOSITORY_FOLDER, (git_object *)tag));
+
+ git_repository_free(repo);
+
+END_TEST
+
BEGIN_SUITE(tag)
ADD_TEST(read0);
ADD_TEST(write0);
+ ADD_TEST(write1);
END_SUITE