Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 98c3414

Browse files
author
Edward Thomson
committed
refs: honor strict object creation
1 parent 3ef01e7 commit 98c3414

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/refs.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -377,15 +377,9 @@ static int reference__create(
377377
return error;
378378

379379
if (oid != NULL) {
380-
git_odb *odb;
381-
382380
assert(symbolic == NULL);
383381

384-
/* Sanity check the reference being created - target must exist. */
385-
if ((error = git_repository_odb__weakptr(&odb, repo)) < 0)
386-
return error;
387-
388-
if (!git_odb_exists(odb, oid)) {
382+
if (!git_object__is_valid(repo, oid, GIT_OBJ_ANY)) {
389383
giterr_set(GITERR_REFERENCE,
390384
"Target OID for the reference doesn't exist on the repository");
391385
return -1;

tests/refs/create.c

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ void test_refs_create__initialize(void)
1818
void test_refs_create__cleanup(void)
1919
{
2020
cl_git_sandbox_cleanup();
21+
22+
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 0));
2123
}
2224

2325
void test_refs_create__symbolic(void)
@@ -119,16 +121,36 @@ void test_refs_create__oid(void)
119121
git_reference_free(looked_up_ref);
120122
}
121123

122-
void test_refs_create__oid_unknown(void)
124+
/* Can by default create a reference that targets at an unknown id */
125+
void test_refs_create__oid_unknown_succeeds_by_default(void)
126+
{
127+
git_reference *new_reference, *looked_up_ref;
128+
git_oid id;
129+
130+
const char *new_head = "refs/heads/new-head";
131+
132+
git_oid_fromstr(&id, "deadbeef3f795b2b4353bcce3a527ad0a4f7f644");
133+
134+
/* Create and write the new object id reference */
135+
cl_git_pass(git_reference_create(&new_reference, g_repo, new_head, &id, 0, NULL));
136+
137+
/* Ensure the reference can't be looked-up... */
138+
cl_git_pass(git_reference_lookup(&looked_up_ref, g_repo, new_head));
139+
git_reference_free(looked_up_ref);
140+
}
141+
142+
/* Strict object enforcement enforces valid object id */
143+
void test_refs_create__oid_unknown_fails_strict_mode(void)
123144
{
124-
// Can not create a new OID reference which targets at an unknown id
125145
git_reference *new_reference, *looked_up_ref;
126146
git_oid id;
127147

128148
const char *new_head = "refs/heads/new-head";
129149

130150
git_oid_fromstr(&id, "deadbeef3f795b2b4353bcce3a527ad0a4f7f644");
131151

152+
cl_git_pass(git_libgit2_opts(GIT_OPT_ENABLE_STRICT_OBJECT_CREATION, 1));
153+
132154
/* Create and write the new object id reference */
133155
cl_git_fail(git_reference_create(&new_reference, g_repo, new_head, &id, 0, NULL));
134156

0 commit comments

Comments
 (0)