diff --git a/src/geef_records.hrl b/src/geef_records.hrl index e304726..b1430f6 100644 --- a/src/geef_records.hrl +++ b/src/geef_records.hrl @@ -1,4 +1,4 @@ --record(ref, {handle, type :: atom()}). +-record(ref, {handle, type :: atom(), target :: binary() | oid()}). -record(repo, {handle}). -record(odb, {handle}). -record(revwalk, {handle}). diff --git a/src/geef_ref.erl b/src/geef_ref.erl index 9d6a547..fdf2311 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -7,7 +7,14 @@ -spec new(term()) -> ref(). new(Handle) -> Type = geef_nif:reference_type(Handle), - #ref{handle=Handle, type=Type}. + Bin = geef_nif:reference_target(Handle), + Target = case Type of + symbolic -> + Bin; + oid -> + #oid{oid=Bin} + end, + #ref{handle=Handle, type=Type, target=Target}. -spec lookup(pid(), iolist()) -> {ok, ref()} | {error, term()}. lookup(Repo, Refname) -> @@ -28,11 +35,8 @@ resolve(#ref{handle=Handle}) -> end. -spec target(ref()) -> binary() | oid(). -target(#ref{handle=Handle,type=symbolic}) -> - geef_nif:reference_target(Handle); -target(#ref{handle=Handle,type=oid}) -> - Oid = geef_nif:reference_target(Handle), - #oid{oid=Oid}. +target(#ref{target=Target}) -> + Target. -spec name_to_id(repo(), iolist()) -> {ok, oid()} | {error, binary()}. name_to_id(#repo{handle=Handle}, Name) ->