Let geef_ref:target/1 handle both oid and symrefs

This commit is contained in:
Carlos Martín Nieto
2013-01-25 15:22:14 +01:00
parent 78e0693b8a
commit 5a58abc4a0
2 changed files with 18 additions and 5 deletions

View File

@@ -164,15 +164,28 @@ geef_reference_target(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{ {
geef_ref *ref; geef_ref *ref;
ErlNifBinary bin; ErlNifBinary bin;
const git_oid *id;
if (!enif_get_resource(env, argv[0], geef_ref_type, (void **) &ref)) if (!enif_get_resource(env, argv[0], geef_ref_type, (void **) &ref))
return enif_make_badarg(env); return enif_make_badarg(env);
id = git_reference_target(ref->ref); if (git_reference_type(ref->ref) == GIT_REF_OID) {
const git_oid *id;
id = git_reference_target(ref->ref);
if (geef_oid_bin(&bin, id) < 0) if (geef_oid_bin(&bin, id) < 0)
return atoms.error; return atoms.error;
} else {
const char *name;
size_t len;
name = git_reference_symbolic_target(ref->ref);
len = strlen(name);
if (enif_alloc_binary(len, &bin) < 0)
return atoms.error;
memcpy(bin.data, name, len + 1);
}
return enif_make_binary(env, &bin); return enif_make_binary(env, &bin);
} }

View File

@@ -28,5 +28,5 @@ resolve(#ref{handle=Handle}) ->
end. end.
-spec target(ref()) -> binary(). -spec target(ref()) -> binary().
target(#ref{handle=Handle, type=oid}) -> target(#ref{handle=Handle}) ->
geef:reference_target(Handle). geef:reference_target(Handle).