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.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
-record(ref, {handle, type :: atom()}).
|
-record(ref, {handle, type :: atom(), target :: binary() | oid()}).
|
||||||
-record(repo, {handle}).
|
-record(repo, {handle}).
|
||||||
-record(odb, {handle}).
|
-record(odb, {handle}).
|
||||||
-record(revwalk, {handle}).
|
-record(revwalk, {handle}).
|
||||||
|
|||||||
@@ -7,7 +7,14 @@
|
|||||||
-spec new(term()) -> ref().
|
-spec new(term()) -> ref().
|
||||||
new(Handle) ->
|
new(Handle) ->
|
||||||
Type = geef_nif:reference_type(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()}.
|
-spec lookup(pid(), iolist()) -> {ok, ref()} | {error, term()}.
|
||||||
lookup(Repo, Refname) ->
|
lookup(Repo, Refname) ->
|
||||||
@@ -28,11 +35,8 @@ resolve(#ref{handle=Handle}) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
-spec target(ref()) -> binary() | oid().
|
-spec target(ref()) -> binary() | oid().
|
||||||
target(#ref{handle=Handle,type=symbolic}) ->
|
target(#ref{target=Target}) ->
|
||||||
geef_nif:reference_target(Handle);
|
Target.
|
||||||
target(#ref{handle=Handle,type=oid}) ->
|
|
||||||
Oid = geef_nif:reference_target(Handle),
|
|
||||||
#oid{oid=Oid}.
|
|
||||||
|
|
||||||
-spec name_to_id(repo(), iolist()) -> {ok, oid()} | {error, binary()}.
|
-spec name_to_id(repo(), iolist()) -> {ok, oid()} | {error, binary()}.
|
||||||
name_to_id(#repo{handle=Handle}, Name) ->
|
name_to_id(#repo{handle=Handle}, Name) ->
|
||||||
|
|||||||
Reference in New Issue
Block a user