diff --git a/c_src/reference.c b/c_src/reference.c index 7fd59d2..ab050af 100644 --- a/c_src/reference.c +++ b/c_src/reference.c @@ -211,15 +211,13 @@ geef_reference_to_id(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) memcpy(name, bin.data, bin.size); name[bin.size] = '\0'; - if (git_reference_name_to_id(&id, repo->repo, name) < 0) { - enif_release_binary(&bin); + if (git_reference_name_to_id(&id, repo->repo, name) < 0) return geef_error(env); - } if (geef_oid_bin(&bin, &id) < 0) return atoms.error; - return enif_make_binary(env, &bin); + return enif_make_tuple2(env, atoms.ok, enif_make_binary(env, &bin)); } ERL_NIF_TERM diff --git a/src/geef_ref.erl b/src/geef_ref.erl index fd555db..9af77ea 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -1,6 +1,6 @@ -module(geef_ref). --export([lookup/2, resolve/1, target/1]). +-export([lookup/2, resolve/1, target/1, name_to_id/2]). -include("geef_records.hrl"). @@ -33,3 +33,12 @@ target(#ref{handle=Handle,type=symbolic}) -> target(#ref{handle=Handle,type=oid}) -> Oid = geef:reference_target(Handle), #oid{oid=Oid}. + +-spec name_to_id(repo(), iolist()) -> {ok, oid()} | {error, binary()}. +name_to_id(#repo{handle=Handle}, Name) -> + case geef:reference_to_id(Handle, Name) of + {ok, Oid} -> + {ok, #oid{oid=Oid}}; + Other -> + Other + end.