diff --git a/src/tag.c b/src/tag.c index 994389c9d..bd9ddda83 100644 --- a/src/tag.c +++ b/src/tag.c @@ -209,6 +209,9 @@ static int tag_create( return error; } + if (!git_odb_exists(repo->db, target)) + return GIT_ENOTFOUND; + /* Try to find out what the type is */ if (target_type == GIT_OBJ_ANY) { size_t _unused; diff --git a/tests/t08-tag.c b/tests/t08-tag.c index e7016488f..62c65a394 100644 --- a/tests/t08-tag.c +++ b/tests/t08-tag.c @@ -119,7 +119,7 @@ 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") +BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid should fail") git_repository *repo; git_tag *tag; git_oid target_id, tag_id; @@ -135,7 +135,7 @@ BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid tagger = git_signature_new(TAGGER_NAME, TAGGER_EMAIL, 123456789, 60); must_be_true(tagger != NULL); - must_pass(git_tag_create( + must_fail(git_tag_create( &tag_id, /* out id */ repo, "the-zombie-tag", @@ -146,17 +146,6 @@ BEGIN_TEST(write1, "write a tag to the repository which points to an unknown oid 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_tag_close(tag); git_repository_free(repo); END_TEST