Make it more erlang-esque
pmods are going away, use prefixed namespaces.
This commit is contained in:
@@ -23,8 +23,8 @@ in it.
|
|||||||
|
|
||||||
The API looks basically like this:
|
The API looks basically like this:
|
||||||
|
|
||||||
Repo = geef:repository(<<".">>).
|
Repo = geef_repo:open(<<".">>).
|
||||||
Workdir = Repo:workdir().
|
Workdir = geef_repo:workdir(Repo).
|
||||||
Odb = geef:repository_odb(Repo).
|
Odb = geef:repository_odb(Repo).
|
||||||
Exists = Odb:exists(HexSha).
|
Exists = Odb:exists(HexSha).
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ geef_repository_init(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
|||||||
term_repo = enif_make_resource(env, res_repo);
|
term_repo = enif_make_resource(env, res_repo);
|
||||||
enif_release_resource(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
|
ERL_NIF_TERM
|
||||||
@@ -61,7 +61,7 @@ geef_repository_open(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
|||||||
ErlNifBinary bin;
|
ErlNifBinary bin;
|
||||||
ERL_NIF_TERM term_repo;
|
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);
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
path = malloc(bin.size + 1);
|
path = malloc(bin.size + 1);
|
||||||
|
|||||||
16
src/geef.erl
16
src/geef.erl
@@ -1,9 +1,13 @@
|
|||||||
-module(geef).
|
-module(geef).
|
||||||
-export([hex_to_raw/1, repository/1, repository_get_path/1, repository_get_odb/1,
|
-export([hex_to_raw/1, reference_list/1,
|
||||||
repository_init/2, repository_is_bare/1, repository_get_workdir/1, reference_list/1,
|
|
||||||
reference_to_id/2, reference_glob/2, reference_lookup/2, reference_resolve/1,
|
reference_to_id/2, reference_glob/2, reference_lookup/2, reference_resolve/1,
|
||||||
reference_id/1, reference_type/1, odb_object_exists/2]).
|
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]).
|
-export([oid_fmt/1, oid_parse/1]).
|
||||||
|
|
||||||
-on_load(load_enif/0).
|
-on_load(load_enif/0).
|
||||||
@@ -50,14 +54,6 @@ reference_resolve(_Handle) ->
|
|||||||
reference_type(_Handle) ->
|
reference_type(_Handle) ->
|
||||||
nif_error(?LINE).
|
nif_error(?LINE).
|
||||||
|
|
||||||
repository(Path) ->
|
|
||||||
case repository_open(Path) of
|
|
||||||
{ok, Handle} ->
|
|
||||||
repository:new(Handle);
|
|
||||||
Other ->
|
|
||||||
Other
|
|
||||||
end.
|
|
||||||
|
|
||||||
odb_object_exists(_Val, _Val) ->
|
odb_object_exists(_Val, _Val) ->
|
||||||
nif_error(?LINE).
|
nif_error(?LINE).
|
||||||
|
|
||||||
|
|||||||
12
src/geef_oid.erl
Normal file
12
src/geef_oid.erl
Normal 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
35
src/geef_repo.erl
Normal 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.
|
||||||
@@ -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.
|
|
||||||
Reference in New Issue
Block a user