From 9d7139d6040aed26fc2cc3e7f91f25b2cafd241a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 2 May 2013 03:53:07 +0200 Subject: [PATCH] ref: store the target in the record There's no need to create a new object every time the user asks for the target, so store it the same way we do for the type. --- src/geef_records.hrl | 2 +- src/geef_ref.erl | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) 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) ->