Shuffle some types
Put types in the modules they belong to instead of including them in each one from the header.
This commit is contained in:
@@ -6,9 +6,12 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type blob() :: geef_obj:object(blob).
|
||||
-export_type([blob/0]).
|
||||
|
||||
-export([lookup/2, size/1, content/1]).
|
||||
|
||||
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, blob()} | {error, term()}.
|
||||
lookup(Repo, Id) ->
|
||||
geef_obj:lookup(Repo, Id, blob).
|
||||
|
||||
|
||||
@@ -3,11 +3,15 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-spec tree_id(geef_object()) -> geef_oid().
|
||||
-type commit() :: geef_obj:object(commit).
|
||||
-export_type([commit/0]).
|
||||
|
||||
-spec tree_id(commit()) -> geef_oid:oid().
|
||||
tree_id(#geef_object{type=commit,handle=Handle}) ->
|
||||
Oid = geef_nif:commit_tree_id(Handle),
|
||||
#geef_oid{oid=Oid}.
|
||||
|
||||
-spec tree(commit()) -> {ok, geef_tree:tree()} | {error, term()}.
|
||||
tree(#geef_object{type=commit,handle=Handle}) ->
|
||||
case geef_nif:commit_tree(Handle) of
|
||||
{ok, Type, Handle} ->
|
||||
@@ -16,6 +20,6 @@ tree(#geef_object{type=commit,handle=Handle}) ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, commit()} | {error, term()}.
|
||||
lookup(Repo, Id) ->
|
||||
geef_obj:lookup(Repo, Id, commit).
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
-record(state, {handle}).
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type entry() :: #geef_index_entry{}.
|
||||
-export_type([entry/0]).
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
%%%===================================================================
|
||||
@@ -39,12 +42,12 @@ write(Pid) ->
|
||||
gen_server:call(Pid, write).
|
||||
|
||||
%% @doc Write out the index's contents to its the repository.
|
||||
-spec write_tree(pid()) -> {ok, geef_oid()} | {error, term()}.
|
||||
-spec write_tree(pid()) -> {ok, geef_oid:oid()} | {error, term()}.
|
||||
write_tree(Pid) ->
|
||||
gen_server:call(Pid, write_tree).
|
||||
|
||||
%% @doc Write out the index's contents to the given repository
|
||||
-spec write_tree(pid(), pid()) -> {ok, geef_oid()} | {error, term()}.
|
||||
-spec write_tree(pid(), pid()) -> {ok, geef_oid:oid()} | {error, term()}.
|
||||
write_tree(Pid, Repo) ->
|
||||
gen_server:call(Pid, {write_tree, Repo}).
|
||||
|
||||
@@ -52,7 +55,7 @@ read_tree(Pid, #geef_object{type=tree, handle=TreeHandle}) ->
|
||||
gen_server:call(Pid, {read_tree, TreeHandle}).
|
||||
|
||||
%% @doc Add an entry to the index
|
||||
-spec add(pid(), geef_index_entry()) -> ok | {error, term()}.
|
||||
-spec add(pid(), entry()) -> ok | {error, term()}.
|
||||
add(Pid, Entry) ->
|
||||
gen_server:call(Pid, {add, Entry}).
|
||||
|
||||
|
||||
@@ -52,11 +52,11 @@ reference_glob(_Repo, _Glob) ->
|
||||
reference_lookup(_Repo, _Refname) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
-spec reference_iterator(term(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}.
|
||||
-spec reference_iterator(term(), iolist() | undefined) -> {ok, geef_ref:iterator()} | {error, term()}.
|
||||
reference_iterator(_Repo, _Regexp) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
-spec reference_next(geef_iterator()) -> {ok, term()} | {error, iterover | term()}.
|
||||
-spec reference_next(geef_ref:iterator()) -> {ok, term()} | {error, iterover | term()}.
|
||||
reference_next(_Handle) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
@@ -69,6 +69,7 @@ reference_resolve(_Handle) ->
|
||||
reference_type(_Handle) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
-spec reference_name(term()) -> {ok, binary()} | {error, term()}.
|
||||
reference_name(_Handle) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
|
||||
@@ -6,9 +6,14 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type object() :: #geef_object{type :: blob | tree | commit | tag}.
|
||||
-type object(Type) :: #geef_object{type :: Type}.
|
||||
|
||||
-export_type([object/0, object/1]).
|
||||
|
||||
-export([lookup/2, lookup/3]).
|
||||
|
||||
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, object()} | {error, term()}.
|
||||
lookup(Repo, Id = #geef_oid{oid=Oid}) ->
|
||||
case geef_repo:lookup_object(Repo, Oid) of
|
||||
{ok, Type, Handle} ->
|
||||
@@ -20,7 +25,7 @@ lookup(Repo, Id) ->
|
||||
lookup(Repo, geef_oid:parse(Id)).
|
||||
|
||||
%% As lookup/2, but it asserts that the type is correct
|
||||
-spec lookup(pid(), geef_oid() | iolist(), atom()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist(), atom()) -> {ok, object()} | {error, term()}.
|
||||
lookup(Repo, Id, Type) ->
|
||||
case lookup(Repo, Id) of
|
||||
{ok, Obj = #geef_object{type=Type}} ->
|
||||
|
||||
@@ -84,14 +84,14 @@ code_change(_OldVsn, State, _Extra) ->
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
-endif.
|
||||
|
||||
-spec exists(pid(), geef_oid() | iolist()) -> boolean().
|
||||
-spec exists(pid(), geef_oid:oid() | iolist()) -> boolean().
|
||||
exists(Pid, #geef_oid{oid=Oid}) ->
|
||||
gen_server:call(Pid, {exists, Oid});
|
||||
exists(Pid, Sha) ->
|
||||
#geef_oid{oid=Oid} = geef_oid:parse(Sha),
|
||||
gen_server:call(Pid, {exists, Oid}).
|
||||
|
||||
-spec write(pid(), iolist(), atom()) -> {ok, geef_oid()} | {error, term()}.
|
||||
-spec write(pid(), iolist(), atom()) -> {ok, geef_oid:oid()} | {error, term()}.
|
||||
write(Pid, Contents, Type) ->
|
||||
gen_server:call(Pid, {write, Contents, Type}).
|
||||
|
||||
|
||||
@@ -7,15 +7,18 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type oid() :: #geef_oid{oid :: binary()}.
|
||||
-export_type([oid/0]).
|
||||
|
||||
-export([parse/1, hex/1]).
|
||||
|
||||
%% @doc Get a hex-encoded string of the hash
|
||||
-spec hex(geef_oid()) -> binary().
|
||||
-spec hex(geef_oid:oid()) -> binary().
|
||||
hex(#geef_oid{oid=Oid}) ->
|
||||
geef_nif:oid_fmt(Oid).
|
||||
|
||||
%% @doc Parse an iolist as a hash
|
||||
-spec parse(iolist() | binary()) -> geef_oid().
|
||||
-spec parse(iolist() | binary()) -> geef_oid:oid().
|
||||
parse(Sha) ->
|
||||
Oid = geef_nif:oid_parse(Sha),
|
||||
#geef_oid{oid=Oid}.
|
||||
|
||||
@@ -15,7 +15,7 @@ line(Text) ->
|
||||
Prefix = io_lib:format("~4.16.0b", [Len]),
|
||||
[Prefix, Text, "\n"].
|
||||
|
||||
-spec parse(iolist()) -> {{want | have, geef_oid()}, binary()} | {error, ebufs}.
|
||||
-spec parse(iolist()) -> {{want | have, geef_oid:oid()}, binary()} | {error, ebufs}.
|
||||
parse(In) ->
|
||||
case unpack(In) of
|
||||
Err = {error, ebufs} ->
|
||||
@@ -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:oid()}, binary()} | {done, binary()} | {flush, binary()}.
|
||||
parse_pkt(In, 0) ->
|
||||
{flush, In};
|
||||
parse_pkt(In, Len) ->
|
||||
|
||||
@@ -1,26 +1,18 @@
|
||||
-record(geef_reference, {handle, name :: binary(), type :: oid | symbolic, target :: binary() | geef_oid()}).
|
||||
-record(geef_reference, {handle, name :: binary(), type :: oid | symbolic, target :: binary() | geef_oid:oid()}).
|
||||
-record(geef_oid, {oid :: binary()}).
|
||||
-record(geef_object, {type :: atom(), id :: geef_oid(), handle}).
|
||||
-record(geef_object, {type :: atom(), id :: geef_oid:oid(), handle}).
|
||||
-record(geef_index_entry,
|
||||
{ctime :: non_neg_integer(), mtime :: non_neg_integer(),
|
||||
dev :: non_neg_integer(), ino :: non_neg_integer(),
|
||||
mode :: non_neg_integer(), uid :: non_neg_integer(), gid :: non_neg_integer(),
|
||||
size :: non_neg_integer(),
|
||||
id :: geef_oid(),
|
||||
id :: geef_oid:oid(),
|
||||
flags, flags_extended,
|
||||
path :: iolist()}).
|
||||
|
||||
-record(geef_request, {service :: atom(), path :: binary(), host :: binary()}).
|
||||
-record(geef_tree_entry, {mode, type, id, name}).
|
||||
-record(geef_signature, {name :: iolist(), email :: iolist(), time :: geef_time()}).
|
||||
-record(geef_signature, {name :: iolist(), email :: iolist(), time :: geef_sig:time()}).
|
||||
-record(geef_iterator, {type :: atom(), repo :: pid(), regexp :: iolist(), handle}).
|
||||
|
||||
-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{}.
|
||||
-type geef_tree_entry() :: #geef_tree_entry{}.
|
||||
-type geef_signature() :: #geef_signature{}.
|
||||
-type geef_time() :: {erlang:timestamp(), non_neg_integer()}.
|
||||
-type geef_iterator() :: #geef_iterator{}.
|
||||
|
||||
@@ -4,12 +4,16 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-spec new(term()) -> geef_reference().
|
||||
-type iterator() :: #geef_iterator{type :: ref}.
|
||||
-type ref() :: #geef_reference{name :: binary()}.
|
||||
-export_type([reference/0, iterator/0]).
|
||||
|
||||
-spec new(term()) -> ref().
|
||||
new(Handle) ->
|
||||
{ok, Name} = geef_nif:reference_name(Handle),
|
||||
new(Name, Handle).
|
||||
|
||||
-spec new(binary(), term()) -> geef_reference().
|
||||
-spec new(binary(), term()) -> ref().
|
||||
new(Name, Handle) ->
|
||||
Type = geef_nif:reference_type(Handle),
|
||||
Bin = geef_nif:reference_target(Handle),
|
||||
@@ -21,7 +25,7 @@ new(Name, Handle) ->
|
||||
end,
|
||||
#geef_reference{handle=Handle, name=Name, type=Type, target=Target}.
|
||||
|
||||
-spec create(pid(), iolist(), geef_oid() | binary(), boolean()) -> {ok, geef_reference()} | {error, term()}.
|
||||
-spec create(pid(), iolist(), geef_oid:oid() | binary(), boolean()) -> {ok, ref()} | {error, term()}.
|
||||
create(Repo, Refname, Target, Force) ->
|
||||
case geef_repo:create_reference(Repo, Refname, Target, Force) of
|
||||
{ok, Ref} ->
|
||||
@@ -30,7 +34,7 @@ create(Repo, Refname, Target, Force) ->
|
||||
Err
|
||||
end.
|
||||
|
||||
-spec lookup(pid(), iolist()) -> {ok, geef_reference()} | {error, term()}.
|
||||
-spec lookup(pid(), iolist()) -> {ok, ref()} | {error, term()}.
|
||||
lookup(Repo, Refname) ->
|
||||
Name = iolist_to_binary(Refname),
|
||||
case geef_repo:lookup_reference(Repo, Name) of
|
||||
@@ -40,7 +44,7 @@ lookup(Repo, Refname) ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}.
|
||||
-spec iterator(pid(), iolist() | undefined) -> {ok, iterator()} | {error, term()}.
|
||||
iterator(Repo, Regexp) ->
|
||||
case geef_repo:iterator(Repo, Regexp) of
|
||||
{ok, Handle} ->
|
||||
@@ -49,10 +53,11 @@ iterator(Repo, Regexp) ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec iterator(pid()) -> {ok, geef_iterator()} | {error, term()}.
|
||||
-spec iterator(pid()) -> {ok, iterator()} | {error, term()}.
|
||||
iterator(Repo) ->
|
||||
iterator(Repo, undefined).
|
||||
|
||||
-spec next(iterator()) -> {ok, ref()} | {error, term()}.
|
||||
next(#geef_iterator{type=ref, handle=Handle}) ->
|
||||
case geef_nif:reference_next(Handle) of
|
||||
{ok, RefHandle} ->
|
||||
@@ -61,18 +66,18 @@ next(#geef_iterator{type=ref, handle=Handle}) ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec resolve(geef_reference()) -> {ok, geef_reference()} | {error, term()}.
|
||||
-spec resolve(ref()) -> {ok, ref()} | {error, term()}.
|
||||
resolve(Ref = #geef_reference{type=oid}) ->
|
||||
{ok, Ref}; % resolving an oid ref is a no-op, skip going into the NIF
|
||||
resolve(#geef_reference{handle=Handle}) ->
|
||||
resolve(#geef_reference{type=symbolic, handle=Handle}) ->
|
||||
case geef_nif:reference_resolve(Handle) of
|
||||
{ok, Ref} ->
|
||||
{ok, new(Ref)};
|
||||
Other ->
|
||||
Other = {error, _} ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec dwim(pid(), iolist()) -> {ok, geef_reference()} | {error, term()}.
|
||||
-spec dwim(pid(), iolist()) -> {ok, ref()} | {error, term()}.
|
||||
dwim(Repo, Name) ->
|
||||
case geef_repo:reference_dwim(Repo, Name) of
|
||||
{ok, Handle} ->
|
||||
@@ -82,7 +87,7 @@ dwim(Repo, Name) ->
|
||||
end.
|
||||
|
||||
%% @doc Get the shorthand name for a particular reference
|
||||
-spec shorthand(geef_reference() | binary()) -> binary().
|
||||
-spec shorthand(ref() | binary()) -> binary().
|
||||
shorthand(<<"refs/heads/", Rest/binary>>) ->
|
||||
Rest;
|
||||
shorthand(<<"refs/tags/", Rest/binary>>) ->
|
||||
|
||||
@@ -87,7 +87,7 @@ lookup_reference(Pid, Name) ->
|
||||
gen_server:call(Pid, {lookup_reference, Name}).
|
||||
|
||||
%% @private
|
||||
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}.
|
||||
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_ref:iterator()} | {error, term()}.
|
||||
iterator(Pid, Regexp) ->
|
||||
gen_server:call(Pid, {iterator, Regexp}).
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
%% @doc Push a commit. This commit and its parents will be included in
|
||||
%% the walk as long as they haven't been hidden. At least one commit
|
||||
%% must be pushed before starting a walk.
|
||||
-spec push(pid(), geef_oid() | iolist()) -> ok | {error, binary()}.
|
||||
-spec push(pid(), geef_oid:oid() | iolist()) -> ok | {error, binary()}.
|
||||
push(Pid, #geef_oid{oid=Oid}) ->
|
||||
gen_server:call(Pid, {push, Oid});
|
||||
push(Pid, Id) ->
|
||||
@@ -38,7 +38,7 @@ push(Pid, Id) ->
|
||||
|
||||
%% @doc Hide a commit. Hide a commit and its parents. Any Parent of
|
||||
%% this commit won't be included in the walk.
|
||||
-spec hide(pid(), geef_oid() | iolist()) -> ok | {error, binary()}.
|
||||
-spec hide(pid(), geef_oid:oid() | iolist()) -> ok | {error, binary()}.
|
||||
hide(Pid, #geef_oid{oid=Oid}) ->
|
||||
gen_server:call(Pid, {hide, Oid});
|
||||
hide(Pid, Id) ->
|
||||
|
||||
@@ -2,9 +2,13 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type time() :: {erlang:timestamp(), non_neg_integer()}.
|
||||
-type signature() :: #geef_signature{}.
|
||||
-export_type([time/0, signature/0]).
|
||||
|
||||
-export([new/2, new/3]).
|
||||
|
||||
-spec new(iolist(), iolist()) -> {ok, geef_signature()} | {error, term()}.
|
||||
-spec new(iolist(), iolist()) -> {ok, signature()} | {error, term()}.
|
||||
new(Name0, Email0) ->
|
||||
case geef_nif:signature_new(Name0, Email0) of
|
||||
{ok, Name, Email, Time0, Offset} ->
|
||||
@@ -14,7 +18,7 @@ new(Name0, Email0) ->
|
||||
Err
|
||||
end.
|
||||
|
||||
-spec new(iolist(), iolist(), geef_time()) -> {ok, geef_signature()} | {error, term()}.
|
||||
-spec new(iolist(), iolist(), time()) -> {ok, signature()} | {error, term()}.
|
||||
new(Name0, Email0, Time) ->
|
||||
case geef_nif:signature_new(Name0, Email0, 0) of
|
||||
{ok, Name, Email} ->
|
||||
|
||||
@@ -8,11 +8,14 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
|
||||
-type tag() :: geef_obj:object(tag).
|
||||
-export_type([tag/0]).
|
||||
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, tag()} | {error, term()}.
|
||||
lookup(Repo, Id) ->
|
||||
geef_obj:lookup(Repo, Id, tag).
|
||||
|
||||
-spec peel(geef_object()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec peel(tag()) -> {ok, geef_obj:object()} | {error, term()}.
|
||||
peel(#geef_object{type=tag, handle=Handle}) ->
|
||||
case geef_nif:tag_peel(Handle) of
|
||||
{ok, Type, Oid, PeeledHandle} ->
|
||||
|
||||
@@ -8,24 +8,29 @@
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
-type tree() :: geef_obj:object(tree).
|
||||
-type entry() :: #geef_tree_entry{}.
|
||||
-export_type([tree/0, entry/0]).
|
||||
|
||||
|
||||
from_nif({ok, Mode, Type, Oid, Name}) ->
|
||||
{ok, #geef_tree_entry{mode=Mode, type=Type, id=#geef_oid{oid=Oid}, name=Name}};
|
||||
from_nif(Err = {error, _}) ->
|
||||
Err.
|
||||
|
||||
-spec get(geef_object(), iolist()) -> {ok, geef_tree_entry()} | {error, term()}.
|
||||
-spec get(tree(), iolist()) -> {ok, entry()} | {error, term()}.
|
||||
get(#geef_object{type=tree,handle=Handle}, Path) ->
|
||||
from_nif(geef_nif:tree_bypath(Handle, Path)).
|
||||
|
||||
-spec nth(geef_object(), non_neg_integer()) -> {ok, geef_tree_entry()} | {error, term()}.
|
||||
-spec nth(tree(), non_neg_integer()) -> {ok, entry()} | {error, term()}.
|
||||
nth(#geef_object{type=tree,handle=Handle}, Nth) ->
|
||||
from_nif(geef_nif:tree_nth(Handle, Nth)).
|
||||
|
||||
-spec count(geef_object()) -> non_neg_integer().
|
||||
-spec count(tree()) -> non_neg_integer().
|
||||
count(#geef_object{type=tree,handle=Handle}) ->
|
||||
geef_nif:tree_count(Handle).
|
||||
|
||||
-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}.
|
||||
-spec lookup(pid(), geef_oid:oid() | iolist()) -> {ok, tree()} | {error, term()}.
|
||||
lookup(Repo, Id) ->
|
||||
geef_obj:lookup(Repo, Id, tree).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user