From 6dea8e6930d59b5afcc51d187096e795ec00e1d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 23 Jan 2013 16:12:48 +0100 Subject: [PATCH] Make it more erlang-esque pmods are going away, use prefixed namespaces. --- README.md | 4 ++-- c_src/repository.c | 4 ++-- src/geef.erl | 16 ++++++---------- src/geef_oid.erl | 12 ++++++++++++ src/geef_repo.erl | 35 +++++++++++++++++++++++++++++++++++ src/repository.erl | 38 -------------------------------------- 6 files changed, 57 insertions(+), 52 deletions(-) create mode 100644 src/geef_oid.erl create mode 100644 src/geef_repo.erl delete mode 100644 src/repository.erl diff --git a/README.md b/README.md index dd7350e..80d5c15 100644 --- a/README.md +++ b/README.md @@ -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). diff --git a/c_src/repository.c b/c_src/repository.c index bd75e72..5f3915f 100644 --- a/c_src/repository.c +++ b/c_src/repository.c @@ -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); diff --git a/src/geef.erl b/src/geef.erl index 482af31..749d785 100644 --- a/src/geef.erl +++ b/src/geef.erl @@ -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). diff --git a/src/geef_oid.erl b/src/geef_oid.erl new file mode 100644 index 0000000..075a85c --- /dev/null +++ b/src/geef_oid.erl @@ -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). diff --git a/src/geef_repo.erl b/src/geef_repo.erl new file mode 100644 index 0000000..2f7deeb --- /dev/null +++ b/src/geef_repo.erl @@ -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. diff --git a/src/repository.erl b/src/repository.erl deleted file mode 100644 index 7b28d1a..0000000 --- a/src/repository.erl +++ /dev/null @@ -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.