Keep an object's id in the record

We have the information there anyway, so don't make us allocate a new
binary every time.
This commit is contained in:
Carlos Martín Nieto
2013-06-05 22:15:40 +02:00
parent 525fae1ee6
commit d21d2cb9b0
5 changed files with 16 additions and 18 deletions

View File

@@ -6,13 +6,13 @@
-include("geef_records.hrl").
-export([lookup/2, lookup/3, id/1]).
-export([lookup/2, lookup/3]).
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
lookup(Repo, #geef_oid{oid=Oid}) ->
lookup(Repo, Id = #geef_oid{oid=Oid}) ->
case geef_repo:lookup_object(Repo, Oid) of
{ok, Type, Handle} ->
{ok, #geef_object{type=Type, handle=Handle}};
{ok, #geef_object{type=Type, id=Id, handle=Handle}};
{error, Err} ->
{error, Err}
end;
@@ -29,15 +29,6 @@ lookup(Repo, Id, Type) ->
{error, Err}
end.
-spec id(geef_object()) -> {ok, geef_oid()} | {error, term()}.
id(#geef_object{handle=Handle}) ->
case geef_nif:object_id(Handle) of
{ok, Oid} ->
#geef_oid{oid=Oid};
Other ->
Other
end.
-ifdef(TEST).
lookup_test() ->
@@ -52,6 +43,6 @@ id_test() ->
Sha = <<"b5b68cce8b92ca0e7bd48430617ac10c0f2c2923">>,
Id = geef_oid:parse(Sha),
{ok, Commit = #geef_object{type=commit}} = lookup(Repo, Sha),
Id = id(Commit).
Id = Commit#geef_object.id.
-endif.

View File

@@ -1,6 +1,6 @@
-record(geef_reference, {handle, name :: binary(), type :: atom(), target :: binary() | geef_oid()}).
-record(geef_oid, {oid}).
-record(geef_object, {type :: atom(), handle}).
-record(geef_object, {type :: atom(), id :: geef_oid(), handle}).
-record(geef_index_entry,
{ctime :: non_neg_integer(), mtime :: non_neg_integer(),
dev :: non_neg_integer(), ino :: non_neg_integer(),

View File

@@ -15,8 +15,8 @@ lookup(Repo, Id) ->
-spec peel(geef_object()) -> {ok, geef_object()} | {error, term()}.
peel(#geef_object{type=tag, handle=Handle}) ->
case geef_nif:tag_peel(Handle) of
{ok, Type, PeeledHandle} ->
{ok, #geef_object{type=Type, handle=PeeledHandle}};
{ok, Type, Oid, PeeledHandle} ->
{ok, #geef_object{type=Type, id=#geef_oid{oid=Oid}, handle=PeeledHandle}};
Err = {error, _} ->
Err
end.