diff --git a/src/geef_commit.erl b/src/geef_commit.erl index be6a69b..e85a22e 100644 --- a/src/geef_commit.erl +++ b/src/geef_commit.erl @@ -16,6 +16,6 @@ tree(#geef_object{type=commit,handle=Handle}) -> Other end. --spec lookup(pid(), geef_oid() | iolist()) -> geef_object(). +-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. lookup(Repo, Id) -> geef_obj:lookup(Repo, Id, commit). diff --git a/src/geef_index.erl b/src/geef_index.erl index 7fbdd90..4ab93eb 100644 --- a/src/geef_index.erl +++ b/src/geef_index.erl @@ -27,7 +27,7 @@ %% @doc Create a new index. This index is empty and not associated to %% any repository. --spec new() -> pid(). +-spec new() -> {ok, pid()} | ignore | {error, term()}. new() -> {ok, Handle} = geef_nif:index_new(), start_link(Handle). @@ -66,6 +66,7 @@ stop(Pid) -> gen_server:call(Pid, stop). %% @private +-spec start_link(term()) -> {ok, pid()} | ignore | {error, term()}. start_link(Handle) -> gen_server:start_link(?MODULE, Handle, []). diff --git a/src/geef_nif.erl b/src/geef_nif.erl index 2d3a436..6ba8fd5 100644 --- a/src/geef_nif.erl +++ b/src/geef_nif.erl @@ -75,7 +75,6 @@ odb_write(_Handle, _Contents, _Type) -> oid_fmt(_Oid) -> nif_error(?LINE). --spec oid_parse(iolist()) -> binary(). oid_parse(_Sha) -> nif_error(?LINE). diff --git a/src/geef_oid.erl b/src/geef_oid.erl index 8fb6779..4b51350 100644 --- a/src/geef_oid.erl +++ b/src/geef_oid.erl @@ -15,7 +15,7 @@ hex(#geef_oid{oid=Oid}) -> geef_nif:oid_fmt(Oid). %% @doc Parse an iolist as a hash --spec parse(iolist()) -> geef_oid(). +-spec parse(iolist() | binary()) -> geef_oid(). parse(Sha) -> Oid = geef_nif:oid_parse(Sha), #geef_oid{oid=Oid}. diff --git a/src/geef_pkt.erl b/src/geef_pkt.erl index b17e434..48cdcf8 100644 --- a/src/geef_pkt.erl +++ b/src/geef_pkt.erl @@ -56,7 +56,7 @@ do_unpack(Len, Rest) when Len - 4 > size(Rest) -> do_unpack(Len, Rest) -> {Len - 4, Rest}. --spec parse_pkt(binary(), non_neg_integer()) -> {{want | have}, geef_oid(), binary()} | {done, binary()} | {flush, binary()}. +-spec parse_pkt(binary(), non_neg_integer()) -> {{want | have, geef_oid()}, binary()} | {done, binary()} | {flush, binary()}. parse_pkt(In, 0) -> {flush, In}; parse_pkt(In, Len) -> @@ -72,6 +72,7 @@ parse_pkt(In, Len) -> <<_:LenLF/binary, Rest/binary>> = Rest1, {Pkt, Rest}. +-spec pkt_type(binary()) -> {have | want | done, non_neg_integer(), binary()}. pkt_type(<<"have ", Rest/binary>>) -> {have, 5 + ?SHA_LEN, Rest}; pkt_type(<<"want ", Rest/binary>>) -> diff --git a/src/geef_records.hrl b/src/geef_records.hrl index d59d77d..6b9e4f3 100644 --- a/src/geef_records.hrl +++ b/src/geef_records.hrl @@ -1,5 +1,5 @@ --record(geef_reference, {handle, name :: binary(), type :: atom(), target :: binary() | geef_oid()}). --record(geef_oid, {oid}). +-record(geef_reference, {handle, name :: binary(), type :: oid | symbolic, target :: binary() | geef_oid()}). +-record(geef_oid, {oid :: binary()}). -record(geef_object, {type :: atom(), id :: geef_oid(), handle}). -record(geef_index_entry, {ctime :: non_neg_integer(), mtime :: non_neg_integer(), @@ -14,8 +14,8 @@ -record(geef_tree_entry, {mode, type, id, name}). -record(geef_signature, {name :: iolist(), email :: iolist(), time :: geef_time()}). --type geef_reference() :: #geef_reference{}. --type geef_oid() :: #geef_oid{}. +-type geef_reference() :: #geef_reference{name :: binary(), target :: binary() | geef_oid()}. +-type geef_oid() :: #geef_oid{oid :: binary()}. -type geef_object() :: #geef_object{}. -type geef_index_entry() :: #geef_index_entry{}. -type geef_request() :: #geef_request{}. diff --git a/src/geef_ref.erl b/src/geef_ref.erl index 80fb36e..3716339 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -18,8 +18,12 @@ new(Name, Handle) -> -spec create(pid(), iolist(), geef_oid() | binary(), boolean()) -> {ok, geef_reference()} | {error, term()}. create(Repo, Refname, Target, Force) -> - {ok, Ref} = geef_repo:create_reference(Repo, Refname, Target, Force), - {ok, new(Refname, Ref)}. + case geef_repo:create_reference(Repo, Refname, Target, Force) of + {ok, Ref} -> + {ok, new(Refname, Ref)}; + Err = {error, _} -> + Err + end. -spec lookup(pid(), iolist()) -> {ok, geef_reference()} | {error, term()}. lookup(Repo, Refname) -> diff --git a/src/geef_tag.erl b/src/geef_tag.erl index 3112e39..4762c93 100644 --- a/src/geef_tag.erl +++ b/src/geef_tag.erl @@ -10,7 +10,7 @@ -spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. lookup(Repo, Id) -> - geef_object:lookup(Repo, Id, tag). + geef_obj:lookup(Repo, Id, tag). -spec peel(geef_object()) -> {ok, geef_object()} | {error, term()}. peel(#geef_object{type=tag, handle=Handle}) ->