summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2018-12-14 14:41:17 +0100
committerEdward Thomson <ethomson@edwardthomson.com>2019-01-18 23:01:37 +0000
commit0573e78d2a74fd0388c013cf9a223096c5632202 (patch)
treecb89375f33b09b835c18eba0cfbeec14d11ea6dd
parent19cde48cf708c50939f5f303b21de8a9355d9c22 (diff)
downloadlibgit2-0573e78d2a74fd0388c013cf9a223096c5632202.tar.gz
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.
-rw-r--r--include/git2/refs.h2
-rw-r--r--src/refs.c15
2 files changed, 9 insertions, 8 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h
index 0dd453e55..75afea5c8 100644
--- a/include/git2/refs.h
+++ b/include/git2/refs.h
@@ -710,7 +710,7 @@ GIT_EXTERN(int) git_reference_normalize_name(
*/
GIT_EXTERN(int) git_reference_peel(
git_object **out,
- git_reference *ref,
+ const git_reference *ref,
git_otype type);
/**
diff --git a/src/refs.c b/src/refs.c
index 1b53d0f2c..96ad6d8ad 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1339,7 +1339,7 @@ int git_reference_is_note(const git_reference *ref)
return git_reference__is_note(ref->name);
}
-static int peel_error(int error, git_reference *ref, const char* msg)
+static int peel_error(int error, const git_reference *ref, const char* msg)
{
giterr_set(
GITERR_INVALID,
@@ -1349,10 +1349,11 @@ static int peel_error(int error, git_reference *ref, const char* msg)
int git_reference_peel(
git_object **peeled,
- git_reference *ref,
+ const git_reference *ref,
git_otype target_type)
{
- git_reference *resolved = NULL;
+ const git_reference *resolved = NULL;
+ git_reference *allocated = NULL;
git_object *target = NULL;
int error;
@@ -1361,8 +1362,10 @@ int git_reference_peel(
if (ref->type == GIT_REF_OID) {
resolved = ref;
} else {
- if ((error = git_reference_resolve(&resolved, ref)) < 0)
+ if ((error = git_reference_resolve(&allocated, ref)) < 0)
return peel_error(error, ref, "Cannot resolve reference");
+
+ resolved = allocated;
}
/*
@@ -1391,9 +1394,7 @@ int git_reference_peel(
cleanup:
git_object_free(target);
-
- if (resolved != ref)
- git_reference_free(resolved);
+ git_reference_free(allocated);
return error;
}