More complete ref bindings

This commit is contained in:
Carlos Martín Nieto
2013-01-24 23:55:42 +01:00
parent 468695adb5
commit 7d76f18a55
5 changed files with 22 additions and 13 deletions

View File

@@ -55,7 +55,7 @@ geef_reference_lookup(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
if (!enif_get_resource(env, argv[0], geef_repository_type, (void **) &repo)) if (!enif_get_resource(env, argv[0], geef_repository_type, (void **) &repo))
return enif_make_badarg(env); return enif_make_badarg(env);
if (!enif_inspect_binary(env, argv[1], &bin)) if (!enif_inspect_iolist_as_binary(env, argv[1], &bin))
return enif_make_badarg(env); return enif_make_badarg(env);
name = malloc(bin.size + 1); name = malloc(bin.size + 1);

View File

@@ -4,9 +4,10 @@
{vsn, "0.0.1"}, {vsn, "0.0.1"},
{modules, [ {modules, [
geef, geef,
repository, geef_repo,
odb, geef_odb,
reference geef_ref,
geef_oid
]}, ]},
{registered, []}, {registered, []},
{applications, [ {applications, [

View File

@@ -1,3 +1,3 @@
-record(ref, {handle}). -record(ref, {handle, type}).
-record(repo, {handle}). -record(repo, {handle}).
-record(odb, {handle}). -record(odb, {handle}).

View File

@@ -1,17 +1,30 @@
-module(geef_ref). -module(geef_ref).
-export([resolve/1, target/1]). -export([lookup/2, resolve/1, target/1]).
-include("geef_records.hlr"). -include("geef_records.hlr").
new(Handle) ->
Type = geef:reference_type(Handle),
#ref{handle=Handle, type=Type}.
-spec lookup(term(), iolist()) -> term().
lookup(#repo{handle=Handle}, Refname) ->
case geef:reference_lookup(Handle, Refname) of
{ok, Ref} ->
{ok, new(Ref)};
Other ->
Other
end.
resolve(#ref{handle=Handle}) -> resolve(#ref{handle=Handle}) ->
case geef:reference_resolve(Handle) of case geef:reference_resolve(Handle) of
{ok, Ref} -> {ok, Ref} ->
{ok, #ref{handle=Handle}}; {ok, new(Ref)};
Other -> Other ->
Other Other
end. end.
-spec target(term()) -> binary(). -spec target(term()) -> binary().
target(#ref{handle=Handle}) -> target(#ref{handle=Handle, type=oid}) ->
geef:reference_target(Handle). geef:reference_target(Handle).

View File

@@ -1,5 +0,0 @@
-module(odb, [Handle]).
-export([exists/1]).
exists(Sha) ->
geef:odb_object_exists(Handle, Sha).