Unverified Commit 8b2670b1 by Patrick Steinhardt Committed by GitHub

Merge pull request #4910 from libgit2/cmn/annotated-from-tag

Support creating annotated commits from annotated tags
parents da8138b0 6ea9381b
...@@ -710,7 +710,7 @@ GIT_EXTERN(int) git_reference_normalize_name( ...@@ -710,7 +710,7 @@ GIT_EXTERN(int) git_reference_normalize_name(
*/ */
GIT_EXTERN(int) git_reference_peel( GIT_EXTERN(int) git_reference_peel(
git_object **out, git_object **out,
git_reference *ref, const git_reference *ref,
git_object_t type); git_object_t type);
/** /**
......
...@@ -123,19 +123,19 @@ int git_annotated_commit_from_ref( ...@@ -123,19 +123,19 @@ int git_annotated_commit_from_ref(
git_repository *repo, git_repository *repo,
const git_reference *ref) const git_reference *ref)
{ {
git_reference *resolved; git_object *peeled;
int error = 0; int error = 0;
assert(out && repo && ref); assert(out && repo && ref);
*out = NULL; *out = NULL;
if ((error = git_reference_resolve(&resolved, ref)) < 0) if ((error = git_reference_peel(&peeled, ref, GIT_OBJ_COMMIT)) < 0)
return error; return error;
error = annotated_commit_init_from_id(out, error = annotated_commit_init_from_id(out,
repo, repo,
git_reference_target(resolved), git_object_id(peeled),
git_reference_name(ref)); git_reference_name(ref));
if (!error) { if (!error) {
...@@ -143,7 +143,7 @@ int git_annotated_commit_from_ref( ...@@ -143,7 +143,7 @@ int git_annotated_commit_from_ref(
GITERR_CHECK_ALLOC((*out)->ref_name); GITERR_CHECK_ALLOC((*out)->ref_name);
} }
git_reference_free(resolved); git_object_free(peeled);
return error; return error;
} }
......
...@@ -1337,7 +1337,7 @@ int git_reference_is_note(const git_reference *ref) ...@@ -1337,7 +1337,7 @@ int git_reference_is_note(const git_reference *ref)
return git_reference__is_note(ref->name); 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_set(
GITERR_INVALID, GITERR_INVALID,
...@@ -1347,10 +1347,11 @@ static int peel_error(int error, git_reference *ref, const char* msg) ...@@ -1347,10 +1347,11 @@ static int peel_error(int error, git_reference *ref, const char* msg)
int git_reference_peel( int git_reference_peel(
git_object **peeled, git_object **peeled,
git_reference *ref, const git_reference *ref,
git_object_t target_type) git_object_t target_type)
{ {
git_reference *resolved = NULL; const git_reference *resolved = NULL;
git_reference *allocated = NULL;
git_object *target = NULL; git_object *target = NULL;
int error; int error;
...@@ -1359,8 +1360,10 @@ int git_reference_peel( ...@@ -1359,8 +1360,10 @@ int git_reference_peel(
if (ref->type == GIT_REF_OID) { if (ref->type == GIT_REF_OID) {
resolved = ref; resolved = ref;
} else { } 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"); return peel_error(error, ref, "Cannot resolve reference");
resolved = allocated;
} }
/* /*
...@@ -1389,9 +1392,7 @@ int git_reference_peel( ...@@ -1389,9 +1392,7 @@ int git_reference_peel(
cleanup: cleanup:
git_object_free(target); git_object_free(target);
git_reference_free(allocated);
if (resolved != ref)
git_reference_free(resolved);
return error; return error;
} }
......
#include "clar_libgit2.h"
static git_repository *g_repo;
void test_merge_annotated_commit__initialize(void)
{
g_repo = cl_git_sandbox_init("testrepo");
}
void test_merge_annotated_commit__cleanup(void)
{
cl_git_sandbox_cleanup();
}
void test_merge_annotated_commit__lookup_annotated_tag(void)
{
git_annotated_commit *commit;
git_reference *ref;
cl_git_pass(git_reference_lookup(&ref, g_repo, "refs/tags/test"));
cl_git_pass(git_annotated_commit_from_ref(&commit, g_repo, ref));
git_annotated_commit_free(commit);
git_reference_free(ref);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment