Shuffle some types

Put types in the modules they belong to instead of including them in
each one from the header.
This commit is contained in:
Carlos Martín Nieto
2013-08-31 14:43:25 +02:00
parent dea88e5a59
commit b04809ca59
15 changed files with 78 additions and 50 deletions

View File

@@ -6,9 +6,12 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-type blob() :: geef_obj:object(blob).
-export_type([blob/0]).
-export([lookup/2, size/1, content/1]). -export([lookup/2, size/1, content/1]).
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. -spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, blob()} | {error, term()}.
lookup(Repo, Id) -> lookup(Repo, Id) ->
geef_obj:lookup(Repo, Id, blob). geef_obj:lookup(Repo, Id, blob).

View File

@@ -3,11 +3,15 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-spec tree_id(geef_object()) -> geef_oid(). -type commit() :: geef_obj:object(commit).
-export_type([commit/0]).
-spec tree_id(commit()) -> geef_oid:oid().
tree_id(#geef_object{type=commit,handle=Handle}) -> tree_id(#geef_object{type=commit,handle=Handle}) ->
Oid = geef_nif:commit_tree_id(Handle), Oid = geef_nif:commit_tree_id(Handle),
#geef_oid{oid=Oid}. #geef_oid{oid=Oid}.
-spec tree(commit()) -> {ok, geef_tree:tree()} | {error, term()}.
tree(#geef_object{type=commit,handle=Handle}) -> tree(#geef_object{type=commit,handle=Handle}) ->
case geef_nif:commit_tree(Handle) of case geef_nif:commit_tree(Handle) of
{ok, Type, Handle} -> {ok, Type, Handle} ->
@@ -16,6 +20,6 @@ tree(#geef_object{type=commit,handle=Handle}) ->
Other Other
end. end.
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. -spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, commit()} | {error, term()}.
lookup(Repo, Id) -> lookup(Repo, Id) ->
geef_obj:lookup(Repo, Id, commit). geef_obj:lookup(Repo, Id, commit).

View File

@@ -21,6 +21,9 @@
-record(state, {handle}). -record(state, {handle}).
-include("geef_records.hrl"). -include("geef_records.hrl").
-type entry() :: #geef_index_entry{}.
-export_type([entry/0]).
%%%=================================================================== %%%===================================================================
%%% API %%% API
%%%=================================================================== %%%===================================================================
@@ -39,12 +42,12 @@ write(Pid) ->
gen_server:call(Pid, write). gen_server:call(Pid, write).
%% @doc Write out the index's contents to its the repository. %% @doc Write out the index's contents to its the repository.
-spec write_tree(pid()) -> {ok, geef_oid()} | {error, term()}. -spec write_tree(pid()) -> {ok, geef_oid:oid()} | {error, term()}.
write_tree(Pid) -> write_tree(Pid) ->
gen_server:call(Pid, write_tree). gen_server:call(Pid, write_tree).
%% @doc Write out the index's contents to the given repository %% @doc Write out the index's contents to the given repository
-spec write_tree(pid(), pid()) -> {ok, geef_oid()} | {error, term()}. -spec write_tree(pid(), pid()) -> {ok, geef_oid:oid()} | {error, term()}.
write_tree(Pid, Repo) -> write_tree(Pid, Repo) ->
gen_server:call(Pid, {write_tree, Repo}). gen_server:call(Pid, {write_tree, Repo}).
@@ -52,7 +55,7 @@ read_tree(Pid, #geef_object{type=tree, handle=TreeHandle}) ->
gen_server:call(Pid, {read_tree, TreeHandle}). gen_server:call(Pid, {read_tree, TreeHandle}).
%% @doc Add an entry to the index %% @doc Add an entry to the index
-spec add(pid(), geef_index_entry()) -> ok | {error, term()}. -spec add(pid(), entry()) -> ok | {error, term()}.
add(Pid, Entry) -> add(Pid, Entry) ->
gen_server:call(Pid, {add, Entry}). gen_server:call(Pid, {add, Entry}).

View File

@@ -52,11 +52,11 @@ reference_glob(_Repo, _Glob) ->
reference_lookup(_Repo, _Refname) -> reference_lookup(_Repo, _Refname) ->
nif_error(?LINE). nif_error(?LINE).
-spec reference_iterator(term(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}. -spec reference_iterator(term(), iolist() | undefined) -> {ok, geef_ref:iterator()} | {error, term()}.
reference_iterator(_Repo, _Regexp) -> reference_iterator(_Repo, _Regexp) ->
nif_error(?LINE). nif_error(?LINE).
-spec reference_next(geef_iterator()) -> {ok, term()} | {error, iterover | term()}. -spec reference_next(geef_ref:iterator()) -> {ok, term()} | {error, iterover | term()}.
reference_next(_Handle) -> reference_next(_Handle) ->
nif_error(?LINE). nif_error(?LINE).
@@ -69,6 +69,7 @@ reference_resolve(_Handle) ->
reference_type(_Handle) -> reference_type(_Handle) ->
nif_error(?LINE). nif_error(?LINE).
-spec reference_name(term()) -> {ok, binary()} | {error, term()}.
reference_name(_Handle) -> reference_name(_Handle) ->
nif_error(?LINE). nif_error(?LINE).

View File

@@ -6,9 +6,14 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-type object() :: #geef_object{type :: blob | tree | commit | tag}.
-type object(Type) :: #geef_object{type :: Type}.
-export_type([object/0, object/1]).
-export([lookup/2, lookup/3]). -export([lookup/2, lookup/3]).
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. -spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, object()} | {error, term()}.
lookup(Repo, Id = #geef_oid{oid=Oid}) -> lookup(Repo, Id = #geef_oid{oid=Oid}) ->
case geef_repo:lookup_object(Repo, Oid) of case geef_repo:lookup_object(Repo, Oid) of
{ok, Type, Handle} -> {ok, Type, Handle} ->
@@ -20,7 +25,7 @@ lookup(Repo, Id) ->
lookup(Repo, geef_oid:parse(Id)). lookup(Repo, geef_oid:parse(Id)).
%% As lookup/2, but it asserts that the type is correct %% As lookup/2, but it asserts that the type is correct
-spec lookup(pid(), geef_oid() | iolist(), atom()) -> {ok, geef_object()} | {error, term()}. -spec lookup(pid(), geef_oid:oid() | iolist(), atom()) -> {ok, object()} | {error, term()}.
lookup(Repo, Id, Type) -> lookup(Repo, Id, Type) ->
case lookup(Repo, Id) of case lookup(Repo, Id) of
{ok, Obj = #geef_object{type=Type}} -> {ok, Obj = #geef_object{type=Type}} ->

View File

@@ -84,14 +84,14 @@ code_change(_OldVsn, State, _Extra) ->
-include_lib("eunit/include/eunit.hrl"). -include_lib("eunit/include/eunit.hrl").
-endif. -endif.
-spec exists(pid(), geef_oid() | iolist()) -> boolean(). -spec exists(pid(), geef_oid:oid() | iolist()) -> boolean().
exists(Pid, #geef_oid{oid=Oid}) -> exists(Pid, #geef_oid{oid=Oid}) ->
gen_server:call(Pid, {exists, Oid}); gen_server:call(Pid, {exists, Oid});
exists(Pid, Sha) -> exists(Pid, Sha) ->
#geef_oid{oid=Oid} = geef_oid:parse(Sha), #geef_oid{oid=Oid} = geef_oid:parse(Sha),
gen_server:call(Pid, {exists, Oid}). gen_server:call(Pid, {exists, Oid}).
-spec write(pid(), iolist(), atom()) -> {ok, geef_oid()} | {error, term()}. -spec write(pid(), iolist(), atom()) -> {ok, geef_oid:oid()} | {error, term()}.
write(Pid, Contents, Type) -> write(Pid, Contents, Type) ->
gen_server:call(Pid, {write, Contents, Type}). gen_server:call(Pid, {write, Contents, Type}).

View File

@@ -7,15 +7,18 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-type oid() :: #geef_oid{oid :: binary()}.
-export_type([oid/0]).
-export([parse/1, hex/1]). -export([parse/1, hex/1]).
%% @doc Get a hex-encoded string of the hash %% @doc Get a hex-encoded string of the hash
-spec hex(geef_oid()) -> binary(). -spec hex(geef_oid:oid()) -> binary().
hex(#geef_oid{oid=Oid}) -> hex(#geef_oid{oid=Oid}) ->
geef_nif:oid_fmt(Oid). geef_nif:oid_fmt(Oid).
%% @doc Parse an iolist as a hash %% @doc Parse an iolist as a hash
-spec parse(iolist() | binary()) -> geef_oid(). -spec parse(iolist() | binary()) -> geef_oid:oid().
parse(Sha) -> parse(Sha) ->
Oid = geef_nif:oid_parse(Sha), Oid = geef_nif:oid_parse(Sha),
#geef_oid{oid=Oid}. #geef_oid{oid=Oid}.

View File

@@ -15,7 +15,7 @@ line(Text) ->
Prefix = io_lib:format("~4.16.0b", [Len]), Prefix = io_lib:format("~4.16.0b", [Len]),
[Prefix, Text, "\n"]. [Prefix, Text, "\n"].
-spec parse(iolist()) -> {{want | have, geef_oid()}, binary()} | {error, ebufs}. -spec parse(iolist()) -> {{want | have, geef_oid:oid()}, binary()} | {error, ebufs}.
parse(In) -> parse(In) ->
case unpack(In) of case unpack(In) of
Err = {error, ebufs} -> Err = {error, ebufs} ->
@@ -56,7 +56,7 @@ do_unpack(Len, Rest) when Len - 4 > size(Rest) ->
do_unpack(Len, Rest) -> do_unpack(Len, Rest) ->
{Len - 4, Rest}. {Len - 4, Rest}.
-spec parse_pkt(binary(), non_neg_integer()) -> {{want | have, geef_oid()}, binary()} | {done, binary()} | {flush, binary()}. -spec parse_pkt(binary(), non_neg_integer()) -> {{want | have, geef_oid:oid()}, binary()} | {done, binary()} | {flush, binary()}.
parse_pkt(In, 0) -> parse_pkt(In, 0) ->
{flush, In}; {flush, In};
parse_pkt(In, Len) -> parse_pkt(In, Len) ->

View File

@@ -1,26 +1,18 @@
-record(geef_reference, {handle, name :: binary(), type :: oid | symbolic, target :: binary() | geef_oid()}). -record(geef_reference, {handle, name :: binary(), type :: oid | symbolic, target :: binary() | geef_oid:oid()}).
-record(geef_oid, {oid :: binary()}). -record(geef_oid, {oid :: binary()}).
-record(geef_object, {type :: atom(), id :: geef_oid(), handle}). -record(geef_object, {type :: atom(), id :: geef_oid:oid(), handle}).
-record(geef_index_entry, -record(geef_index_entry,
{ctime :: non_neg_integer(), mtime :: non_neg_integer(), {ctime :: non_neg_integer(), mtime :: non_neg_integer(),
dev :: non_neg_integer(), ino :: non_neg_integer(), dev :: non_neg_integer(), ino :: non_neg_integer(),
mode :: non_neg_integer(), uid :: non_neg_integer(), gid :: non_neg_integer(), mode :: non_neg_integer(), uid :: non_neg_integer(), gid :: non_neg_integer(),
size :: non_neg_integer(), size :: non_neg_integer(),
id :: geef_oid(), id :: geef_oid:oid(),
flags, flags_extended, flags, flags_extended,
path :: iolist()}). path :: iolist()}).
-record(geef_request, {service :: atom(), path :: binary(), host :: binary()}). -record(geef_request, {service :: atom(), path :: binary(), host :: binary()}).
-record(geef_tree_entry, {mode, type, id, name}). -record(geef_tree_entry, {mode, type, id, name}).
-record(geef_signature, {name :: iolist(), email :: iolist(), time :: geef_time()}). -record(geef_signature, {name :: iolist(), email :: iolist(), time :: geef_sig:time()}).
-record(geef_iterator, {type :: atom(), repo :: pid(), regexp :: iolist(), handle}). -record(geef_iterator, {type :: atom(), repo :: pid(), regexp :: iolist(), handle}).
-type geef_reference() :: #geef_reference{name :: binary(), target :: binary() | geef_oid()}.
-type geef_oid() :: #geef_oid{oid :: binary()}.
-type geef_object() :: #geef_object{}.
-type geef_index_entry() :: #geef_index_entry{}.
-type geef_request() :: #geef_request{}. -type geef_request() :: #geef_request{}.
-type geef_tree_entry() :: #geef_tree_entry{}.
-type geef_signature() :: #geef_signature{}.
-type geef_time() :: {erlang:timestamp(), non_neg_integer()}.
-type geef_iterator() :: #geef_iterator{}.

View File

@@ -4,12 +4,16 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-spec new(term()) -> geef_reference(). -type iterator() :: #geef_iterator{type :: ref}.
-type ref() :: #geef_reference{name :: binary()}.
-export_type([reference/0, iterator/0]).
-spec new(term()) -> ref().
new(Handle) -> new(Handle) ->
{ok, Name} = geef_nif:reference_name(Handle), {ok, Name} = geef_nif:reference_name(Handle),
new(Name, Handle). new(Name, Handle).
-spec new(binary(), term()) -> geef_reference(). -spec new(binary(), term()) -> ref().
new(Name, Handle) -> new(Name, Handle) ->
Type = geef_nif:reference_type(Handle), Type = geef_nif:reference_type(Handle),
Bin = geef_nif:reference_target(Handle), Bin = geef_nif:reference_target(Handle),
@@ -21,7 +25,7 @@ new(Name, Handle) ->
end, end,
#geef_reference{handle=Handle, name=Name, type=Type, target=Target}. #geef_reference{handle=Handle, name=Name, type=Type, target=Target}.
-spec create(pid(), iolist(), geef_oid() | binary(), boolean()) -> {ok, geef_reference()} | {error, term()}. -spec create(pid(), iolist(), geef_oid:oid() | binary(), boolean()) -> {ok, ref()} | {error, term()}.
create(Repo, Refname, Target, Force) -> create(Repo, Refname, Target, Force) ->
case geef_repo:create_reference(Repo, Refname, Target, Force) of case geef_repo:create_reference(Repo, Refname, Target, Force) of
{ok, Ref} -> {ok, Ref} ->
@@ -30,7 +34,7 @@ create(Repo, Refname, Target, Force) ->
Err Err
end. end.
-spec lookup(pid(), iolist()) -> {ok, geef_reference()} | {error, term()}. -spec lookup(pid(), iolist()) -> {ok, ref()} | {error, term()}.
lookup(Repo, Refname) -> lookup(Repo, Refname) ->
Name = iolist_to_binary(Refname), Name = iolist_to_binary(Refname),
case geef_repo:lookup_reference(Repo, Name) of case geef_repo:lookup_reference(Repo, Name) of
@@ -40,7 +44,7 @@ lookup(Repo, Refname) ->
Other Other
end. end.
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}. -spec iterator(pid(), iolist() | undefined) -> {ok, iterator()} | {error, term()}.
iterator(Repo, Regexp) -> iterator(Repo, Regexp) ->
case geef_repo:iterator(Repo, Regexp) of case geef_repo:iterator(Repo, Regexp) of
{ok, Handle} -> {ok, Handle} ->
@@ -49,10 +53,11 @@ iterator(Repo, Regexp) ->
Other Other
end. end.
-spec iterator(pid()) -> {ok, geef_iterator()} | {error, term()}. -spec iterator(pid()) -> {ok, iterator()} | {error, term()}.
iterator(Repo) -> iterator(Repo) ->
iterator(Repo, undefined). iterator(Repo, undefined).
-spec next(iterator()) -> {ok, ref()} | {error, term()}.
next(#geef_iterator{type=ref, handle=Handle}) -> next(#geef_iterator{type=ref, handle=Handle}) ->
case geef_nif:reference_next(Handle) of case geef_nif:reference_next(Handle) of
{ok, RefHandle} -> {ok, RefHandle} ->
@@ -61,18 +66,18 @@ next(#geef_iterator{type=ref, handle=Handle}) ->
Other Other
end. end.
-spec resolve(geef_reference()) -> {ok, geef_reference()} | {error, term()}. -spec resolve(ref()) -> {ok, ref()} | {error, term()}.
resolve(Ref = #geef_reference{type=oid}) -> resolve(Ref = #geef_reference{type=oid}) ->
{ok, Ref}; % resolving an oid ref is a no-op, skip going into the NIF {ok, Ref}; % resolving an oid ref is a no-op, skip going into the NIF
resolve(#geef_reference{handle=Handle}) -> resolve(#geef_reference{type=symbolic, handle=Handle}) ->
case geef_nif:reference_resolve(Handle) of case geef_nif:reference_resolve(Handle) of
{ok, Ref} -> {ok, Ref} ->
{ok, new(Ref)}; {ok, new(Ref)};
Other -> Other = {error, _} ->
Other Other
end. end.
-spec dwim(pid(), iolist()) -> {ok, geef_reference()} | {error, term()}. -spec dwim(pid(), iolist()) -> {ok, ref()} | {error, term()}.
dwim(Repo, Name) -> dwim(Repo, Name) ->
case geef_repo:reference_dwim(Repo, Name) of case geef_repo:reference_dwim(Repo, Name) of
{ok, Handle} -> {ok, Handle} ->
@@ -82,7 +87,7 @@ dwim(Repo, Name) ->
end. end.
%% @doc Get the shorthand name for a particular reference %% @doc Get the shorthand name for a particular reference
-spec shorthand(geef_reference() | binary()) -> binary(). -spec shorthand(ref() | binary()) -> binary().
shorthand(<<"refs/heads/", Rest/binary>>) -> shorthand(<<"refs/heads/", Rest/binary>>) ->
Rest; Rest;
shorthand(<<"refs/tags/", Rest/binary>>) -> shorthand(<<"refs/tags/", Rest/binary>>) ->

View File

@@ -87,7 +87,7 @@ lookup_reference(Pid, Name) ->
gen_server:call(Pid, {lookup_reference, Name}). gen_server:call(Pid, {lookup_reference, Name}).
%% @private %% @private
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}. -spec iterator(pid(), iolist() | undefined) -> {ok, geef_ref:iterator()} | {error, term()}.
iterator(Pid, Regexp) -> iterator(Pid, Regexp) ->
gen_server:call(Pid, {iterator, Regexp}). gen_server:call(Pid, {iterator, Regexp}).

View File

@@ -28,7 +28,7 @@
%% @doc Push a commit. This commit and its parents will be included in %% @doc Push a commit. This commit and its parents will be included in
%% the walk as long as they haven't been hidden. At least one commit %% the walk as long as they haven't been hidden. At least one commit
%% must be pushed before starting a walk. %% must be pushed before starting a walk.
-spec push(pid(), geef_oid() | iolist()) -> ok | {error, binary()}. -spec push(pid(), geef_oid:oid() | iolist()) -> ok | {error, binary()}.
push(Pid, #geef_oid{oid=Oid}) -> push(Pid, #geef_oid{oid=Oid}) ->
gen_server:call(Pid, {push, Oid}); gen_server:call(Pid, {push, Oid});
push(Pid, Id) -> push(Pid, Id) ->
@@ -38,7 +38,7 @@ push(Pid, Id) ->
%% @doc Hide a commit. Hide a commit and its parents. Any Parent of %% @doc Hide a commit. Hide a commit and its parents. Any Parent of
%% this commit won't be included in the walk. %% this commit won't be included in the walk.
-spec hide(pid(), geef_oid() | iolist()) -> ok | {error, binary()}. -spec hide(pid(), geef_oid:oid() | iolist()) -> ok | {error, binary()}.
hide(Pid, #geef_oid{oid=Oid}) -> hide(Pid, #geef_oid{oid=Oid}) ->
gen_server:call(Pid, {hide, Oid}); gen_server:call(Pid, {hide, Oid});
hide(Pid, Id) -> hide(Pid, Id) ->

View File

@@ -2,9 +2,13 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-type time() :: {erlang:timestamp(), non_neg_integer()}.
-type signature() :: #geef_signature{}.
-export_type([time/0, signature/0]).
-export([new/2, new/3]). -export([new/2, new/3]).
-spec new(iolist(), iolist()) -> {ok, geef_signature()} | {error, term()}. -spec new(iolist(), iolist()) -> {ok, signature()} | {error, term()}.
new(Name0, Email0) -> new(Name0, Email0) ->
case geef_nif:signature_new(Name0, Email0) of case geef_nif:signature_new(Name0, Email0) of
{ok, Name, Email, Time0, Offset} -> {ok, Name, Email, Time0, Offset} ->
@@ -14,7 +18,7 @@ new(Name0, Email0) ->
Err Err
end. end.
-spec new(iolist(), iolist(), geef_time()) -> {ok, geef_signature()} | {error, term()}. -spec new(iolist(), iolist(), time()) -> {ok, signature()} | {error, term()}.
new(Name0, Email0, Time) -> new(Name0, Email0, Time) ->
case geef_nif:signature_new(Name0, Email0, 0) of case geef_nif:signature_new(Name0, Email0, 0) of
{ok, Name, Email} -> {ok, Name, Email} ->

View File

@@ -8,11 +8,14 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. -type tag() :: geef_obj:object(tag).
-export_type([tag/0]).
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, tag()} | {error, term()}.
lookup(Repo, Id) -> lookup(Repo, Id) ->
geef_obj:lookup(Repo, Id, tag). geef_obj:lookup(Repo, Id, tag).
-spec peel(geef_object()) -> {ok, geef_object()} | {error, term()}. -spec peel(tag()) -> {ok, geef_obj:object()} | {error, term()}.
peel(#geef_object{type=tag, handle=Handle}) -> peel(#geef_object{type=tag, handle=Handle}) ->
case geef_nif:tag_peel(Handle) of case geef_nif:tag_peel(Handle) of
{ok, Type, Oid, PeeledHandle} -> {ok, Type, Oid, PeeledHandle} ->

View File

@@ -8,24 +8,29 @@
-include("geef_records.hrl"). -include("geef_records.hrl").
-type tree() :: geef_obj:object(tree).
-type entry() :: #geef_tree_entry{}.
-export_type([tree/0, entry/0]).
from_nif({ok, Mode, Type, Oid, Name}) -> from_nif({ok, Mode, Type, Oid, Name}) ->
{ok, #geef_tree_entry{mode=Mode, type=Type, id=#geef_oid{oid=Oid}, name=Name}}; {ok, #geef_tree_entry{mode=Mode, type=Type, id=#geef_oid{oid=Oid}, name=Name}};
from_nif(Err = {error, _}) -> from_nif(Err = {error, _}) ->
Err. Err.
-spec get(geef_object(), iolist()) -> {ok, geef_tree_entry()} | {error, term()}. -spec get(tree(), iolist()) -> {ok, entry()} | {error, term()}.
get(#geef_object{type=tree,handle=Handle}, Path) -> get(#geef_object{type=tree,handle=Handle}, Path) ->
from_nif(geef_nif:tree_bypath(Handle, Path)). from_nif(geef_nif:tree_bypath(Handle, Path)).
-spec nth(geef_object(), non_neg_integer()) -> {ok, geef_tree_entry()} | {error, term()}. -spec nth(tree(), non_neg_integer()) -> {ok, entry()} | {error, term()}.
nth(#geef_object{type=tree,handle=Handle}, Nth) -> nth(#geef_object{type=tree,handle=Handle}, Nth) ->
from_nif(geef_nif:tree_nth(Handle, Nth)). from_nif(geef_nif:tree_nth(Handle, Nth)).
-spec count(geef_object()) -> non_neg_integer(). -spec count(tree()) -> non_neg_integer().
count(#geef_object{type=tree,handle=Handle}) -> count(#geef_object{type=tree,handle=Handle}) ->
geef_nif:tree_count(Handle). geef_nif:tree_count(Handle).
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. -spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, tree()} | {error, term()}.
lookup(Repo, Id) -> lookup(Repo, Id) ->
geef_obj:lookup(Repo, Id, tree). geef_obj:lookup(Repo, Id, tree).