Make it more erlang-esque

pmods are going away, use prefixed namespaces.
This commit is contained in:
Carlos Martín Nieto
2013-01-23 16:12:48 +01:00
parent 7ac46fbf5e
commit 6dea8e6930
6 changed files with 57 additions and 52 deletions

View File

@@ -23,8 +23,8 @@ in it.
The API looks basically like this:
Repo = geef:repository(<<".">>).
Workdir = Repo:workdir().
Repo = geef_repo:open(<<".">>).
Workdir = geef_repo:workdir(Repo).
Odb = geef:repository_odb(Repo).
Exists = Odb:exists(HexSha).

View File

@@ -48,7 +48,7 @@ geef_repository_init(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
term_repo = enif_make_resource(env, res_repo);
enif_release_resource(res_repo);
return enif_make_tuple2(env, atoms.repository, term_repo);
return enif_make_tuple2(env, atoms.ok, term_repo);
}
ERL_NIF_TERM
@@ -61,7 +61,7 @@ geef_repository_open(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
ErlNifBinary bin;
ERL_NIF_TERM term_repo;
if (!enif_inspect_binary(env, argv[0], &bin))
if (!enif_inspect_iolist_as_binary(env, argv[0], &bin))
return enif_make_badarg(env);
path = malloc(bin.size + 1);

View File

@@ -1,9 +1,13 @@
-module(geef).
-export([hex_to_raw/1, repository/1, repository_get_path/1, repository_get_odb/1,
repository_init/2, repository_is_bare/1, repository_get_workdir/1, reference_list/1,
-export([hex_to_raw/1, reference_list/1,
reference_to_id/2, reference_glob/2, reference_lookup/2, reference_resolve/1,
reference_id/1, reference_type/1, odb_object_exists/2]).
% repository operations
-export([repository_get_path/1, repository_get_odb/1, repository_open/1, repository_init/2,
repository_is_bare/1, repository_get_workdir/1]).
% oid parsing
-export([oid_fmt/1, oid_parse/1]).
-on_load(load_enif/0).
@@ -50,14 +54,6 @@ reference_resolve(_Handle) ->
reference_type(_Handle) ->
nif_error(?LINE).
repository(Path) ->
case repository_open(Path) of
{ok, Handle} ->
repository:new(Handle);
Other ->
Other
end.
odb_object_exists(_Val, _Val) ->
nif_error(?LINE).

12
src/geef_oid.erl Normal file
View File

@@ -0,0 +1,12 @@
-module(geef_oid).
-export([parse/1, fmt/1]).
-spec fmt(binary()) -> binary().
fmt(Oid) ->
geef:oid_fmt(Oid).
-spec parse(binary()) -> binary().
parse(Sha) ->
geef:oid_parse(Sha).

35
src/geef_repo.erl Normal file
View File

@@ -0,0 +1,35 @@
-module(geef_repo).
-export([open/1, init/2, path/1, workdir/1, is_bare/1, references/1]).
-record(repo, {handle}).
path(#repo{handle=Handle}) ->
geef:repository_get_path(Handle).
workdir(#repo{handle=Handle}) ->
geef:repository_get_workdir(Handle).
is_bare(#repo{handle=Handle}) ->
geef:repository_is_bare(Handle).
references(#repo{handle=Handle}) ->
geef:reference_list(Handle).
-spec open(iolist()) -> {ok, term()} | {error, term()}.
open(Path) ->
case geef:repository_open(Path) of
{ok, Handle} ->
{ok, #repo{handle=Handle}};
Other ->
Other
end.
-spec init(iolist(), boolean()) -> {ok, term()} | {error, term()}.
init(Path, Bare) ->
case geef:repository_init(Path, Bare) of
{ok, Handle} ->
{ok, #repo{handle=Handle}};
Other ->
Other
end.

View File

@@ -1,38 +0,0 @@
-module(repository, [Handle]).
-export([path/0, workdir/0, bare/0, references/0, reference_glob/1, odb/0, lookup/1]).
-spec path() -> binary().
path() ->
geef:repository_get_path(Handle).
-spec workdir() -> binary().
workdir() ->
geef:repository_get_workdir(Handle).
-spec bare() -> boolean().
bare() ->
geef:repository_is_bare(Handle).
-spec references() -> [binary()] | [].
references() ->
geef:reference_list(Handle).
-spec reference_glob(binary()) -> [binary()].
reference_glob(Glob) ->
geef:reference_glob(Handle, Glob).
odb() ->
case geef:repository_get_odb(Handle) of
{ok, Odb} ->
odb:new(Odb);
Other ->
Other
end.
lookup(Refname) ->
case geef:reference_lookup(Handle, Refname) of
{ok, Ref} ->
reference:new(Ref);
Other ->
Other
end.