mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-21 12:17:36 +00:00
refs: honor strict object creation
This commit is contained in:
parent
3ef01e7727
commit
98c341496f
@ -377,15 +377,9 @@ static int reference__create(
|
|||||||
return error;
|
return error;
|
||||||
|
|
||||||
if (oid != NULL) {
|
if (oid != NULL) {
|
||||||
git_odb *odb;
|
|
||||||
|
|
||||||
assert(symbolic == NULL);
|
assert(symbolic == NULL);
|
||||||
|
|
||||||
/* Sanity check the reference being created - target must exist. */
|
if (!git_object__is_valid(repo, oid, GIT_OBJ_ANY)) {
|
||||||
if ((error = git_repository_odb__weakptr(&odb, repo)) < 0)
|
|
||||||
return error;
|
|
||||||
|
|
||||||
if (!git_odb_exists(odb, oid)) {
|
|
||||||
giterr_set(GITERR_REFERENCE,
|
giterr_set(GITERR_REFERENCE,
|
||||||
"Target OID for the reference doesn't exist on the repository");
|
"Target OID for the reference doesn't exist on the repository");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -18,6 +18,8 @@ void test_refs_create__initialize(void)
|
|||||||
void test_refs_create__cleanup(void)
|
void test_refs_create__cleanup(void)
|
||||||
{
|
{
|
||||||
cl_git_sandbox_cleanup();
|
cl_git_sandbox_cleanup();
|
||||||
|
|
||||||
|
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_refs_create__symbolic(void)
|
void test_refs_create__symbolic(void)
|
||||||
@ -119,9 +121,9 @@ void test_refs_create__oid(void)
|
|||||||
git_reference_free(looked_up_ref);
|
git_reference_free(looked_up_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_refs_create__oid_unknown(void)
|
/* Can by default create a reference that targets at an unknown id */
|
||||||
|
void test_refs_create__oid_unknown_succeeds_by_default(void)
|
||||||
{
|
{
|
||||||
// Can not create a new OID reference which targets at an unknown id
|
|
||||||
git_reference *new_reference, *looked_up_ref;
|
git_reference *new_reference, *looked_up_ref;
|
||||||
git_oid id;
|
git_oid id;
|
||||||
|
|
||||||
@ -129,6 +131,26 @@ void test_refs_create__oid_unknown(void)
|
|||||||
|
|
||||||
git_oid_fromstr(&id, "deadbeef3f795b2b4353bcce3a527ad0a4f7f644");
|
git_oid_fromstr(&id, "deadbeef3f795b2b4353bcce3a527ad0a4f7f644");
|
||||||
|
|
||||||
|
/* Create and write the new object id reference */
|
||||||
|
cl_git_pass(git_reference_create(&new_reference, g_repo, new_head, &id, 0, NULL));
|
||||||
|
|
||||||
|
/* Ensure the reference can't be looked-up... */
|
||||||
|
cl_git_pass(git_reference_lookup(&looked_up_ref, g_repo, new_head));
|
||||||
|
git_reference_free(looked_up_ref);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Strict object enforcement enforces valid object id */
|
||||||
|
void test_refs_create__oid_unknown_fails_strict_mode(void)
|
||||||
|
{
|
||||||
|
git_reference *new_reference, *looked_up_ref;
|
||||||
|
git_oid id;
|
||||||
|
|
||||||
|
const char *new_head = "refs/heads/new-head";
|
||||||
|
|
||||||
|
git_oid_fromstr(&id, "deadbeef3f795b2b4353bcce3a527ad0a4f7f644");
|
||||||
|
|
||||||
|
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 1));
|
||||||
|
|
||||||
/* Create and write the new object id reference */
|
/* Create and write the new object id reference */
|
||||||
cl_git_fail(git_reference_create(&new_reference, g_repo, new_head, &id, 0, NULL));
|
cl_git_fail(git_reference_create(&new_reference, g_repo, new_head, &id, 0, NULL));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user