From 7d76f18a55938c61a8152894640edc2e0362f544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Thu, 24 Jan 2013 23:55:42 +0100 Subject: [PATCH] More complete ref bindings --- c_src/reference.c | 2 +- ebin/geef.app | 7 ++++--- src/geef_records.hlr | 2 +- src/geef_ref.erl | 19 ++++++++++++++++--- src/odb.erl | 5 ----- 5 files changed, 22 insertions(+), 13 deletions(-) delete mode 100644 src/odb.erl diff --git a/c_src/reference.c b/c_src/reference.c index a58f7ec..4c220e1 100644 --- a/c_src/reference.c +++ b/c_src/reference.c @@ -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)) 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); name = malloc(bin.size + 1); diff --git a/ebin/geef.app b/ebin/geef.app index 179e61c..4bb0153 100644 --- a/ebin/geef.app +++ b/ebin/geef.app @@ -4,9 +4,10 @@ {vsn, "0.0.1"}, {modules, [ geef, - repository, - odb, - reference + geef_repo, + geef_odb, + geef_ref, + geef_oid ]}, {registered, []}, {applications, [ diff --git a/src/geef_records.hlr b/src/geef_records.hlr index e7ba6ba..6226336 100644 --- a/src/geef_records.hlr +++ b/src/geef_records.hlr @@ -1,3 +1,3 @@ --record(ref, {handle}). +-record(ref, {handle, type}). -record(repo, {handle}). -record(odb, {handle}). diff --git a/src/geef_ref.erl b/src/geef_ref.erl index 608af4a..14d85a5 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -1,17 +1,30 @@ -module(geef_ref). --export([resolve/1, target/1]). +-export([lookup/2, resolve/1, target/1]). -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}) -> case geef:reference_resolve(Handle) of {ok, Ref} -> - {ok, #ref{handle=Handle}}; + {ok, new(Ref)}; Other -> Other end. -spec target(term()) -> binary(). -target(#ref{handle=Handle}) -> +target(#ref{handle=Handle, type=oid}) -> geef:reference_target(Handle). diff --git a/src/odb.erl b/src/odb.erl deleted file mode 100644 index 08bada6..0000000 --- a/src/odb.erl +++ /dev/null @@ -1,5 +0,0 @@ --module(odb, [Handle]). --export([exists/1]). - -exists(Sha) -> - geef:odb_object_exists(Handle, Sha).