Skip to content

Commit 5bd78c4

Browse files
committed
refs: constify git_reference_peel
We have no need to take a non-const reference. This does involve some other work to make sure we don't mix const and non-const variables, but by splitting what we want each variable to do we can also simplify the logic for when we do want to free a new reference we might have allocated.
1 parent 0f29936 commit 5bd78c4

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

include/git2/refs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ GIT_EXTERN(int) git_reference_normalize_name(
710710
*/
711711
GIT_EXTERN(int) git_reference_peel(
712712
git_object **out,
713-
git_reference *ref,
713+
const git_reference *ref,
714714
git_object_t type);
715715

716716
/**

src/refs.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,7 +1337,7 @@ int git_reference_is_note(const git_reference *ref)
13371337
return git_reference__is_note(ref->name);
13381338
}
13391339

1340-
static int peel_error(int error, git_reference *ref, const char* msg)
1340+
static int peel_error(int error, const git_reference *ref, const char* msg)
13411341
{
13421342
giterr_set(
13431343
GITERR_INVALID,
@@ -1347,10 +1347,11 @@ static int peel_error(int error, git_reference *ref, const char* msg)
13471347

13481348
int git_reference_peel(
13491349
git_object **peeled,
1350-
git_reference *ref,
1350+
const git_reference *ref,
13511351
git_object_t target_type)
13521352
{
1353-
git_reference *resolved = NULL;
1353+
const git_reference *resolved = NULL;
1354+
git_reference *allocated = NULL;
13541355
git_object *target = NULL;
13551356
int error;
13561357

@@ -1359,8 +1360,10 @@ int git_reference_peel(
13591360
if (ref->type == GIT_REF_OID) {
13601361
resolved = ref;
13611362
} else {
1362-
if ((error = git_reference_resolve(&resolved, ref)) < 0)
1363+
if ((error = git_reference_resolve(&allocated, ref)) < 0)
13631364
return peel_error(error, ref, "Cannot resolve reference");
1365+
1366+
resolved = allocated;
13641367
}
13651368

13661369
/*
@@ -1389,9 +1392,7 @@ int git_reference_peel(
13891392

13901393
cleanup:
13911394
git_object_free(target);
1392-
1393-
if (resolved != ref)
1394-
git_reference_free(resolved);
1395+
git_reference_free(allocated);
13951396

13961397
return error;
13971398
}

0 commit comments

Comments
 (0)