diff --git a/src/geef_blob.erl b/src/geef_blob.erl index 3ce41f9..09cadf3 100644 --- a/src/geef_blob.erl +++ b/src/geef_blob.erl @@ -8,18 +8,18 @@ -export([lookup/2, id/1, size/1, content/1]). --spec lookup(repo(), oid() | iolist()) -> object(). +-spec lookup(pid(), geef_oid() | iolist()) -> geef_object(). lookup(Repo, Id) -> geef_object:lookup(Repo, Id, blob). --spec id(object()) -> oid(). -id(Obj = #object{type=blob}) -> +-spec id(geef_object()) -> geef_oid(). +id(Obj = #geef_object{type=blob}) -> geef_object:id(Obj). -size(#object{type=blob, handle=Handle}) -> +size(#geef_object{type=blob, handle=Handle}) -> geef_nif:blob_size(Handle). -content(#object{type=blob, handle=Handle}) -> +content(#geef_object{type=blob, handle=Handle}) -> {ok, Content} = geef_nif:blob_content(Handle), Content. diff --git a/src/geef_commit.erl b/src/geef_commit.erl index 097d788..db97c49 100644 --- a/src/geef_commit.erl +++ b/src/geef_commit.erl @@ -3,22 +3,22 @@ -include("geef_records.hrl"). --spec tree_id(object()) -> oid(). -tree_id(#object{type=commit,handle=Handle}) -> +-spec tree_id(geef_object()) -> geef_oid(). +tree_id(#geef_object{type=commit,handle=Handle}) -> Oid = geef_nif:commit_tree_id(Handle), - #oid{oid=Oid}. + #geef_oid{oid=Oid}. -tree(#object{type=commit,handle=Handle}) -> +tree(#geef_object{type=commit,handle=Handle}) -> case geef_nif:commit_tree(Handle) of {ok, Type, Handle} -> - {ok, #object{type=Type, handle=Handle}}; + {ok, #geef_object{type=Type, handle=Handle}}; Other -> Other end. --spec lookup(repo(), oid() | iolist()) -> object(). +-spec lookup(pid(), geef_oid() | iolist()) -> geef_object(). lookup(Repo, Id) -> geef_object:lookup(Repo, Id, commit). -id(Obj = #object{type=commit}) -> +id(Obj = #geef_object{type=commit}) -> geef_object:id(Obj). diff --git a/src/geef_index.erl b/src/geef_index.erl index 4d20d61..7fbdd90 100644 --- a/src/geef_index.erl +++ b/src/geef_index.erl @@ -39,20 +39,20 @@ write(Pid) -> gen_server:call(Pid, write). %% @doc Write out the index's contents to its the repository. --spec write_tree(pid()) -> {ok, oid()} | {error, term()}. +-spec write_tree(pid()) -> {ok, geef_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, oid()} | {error, term()}. +-spec write_tree(pid(), pid()) -> {ok, geef_oid()} | {error, term()}. write_tree(Pid, Repo) -> gen_server:call(Pid, {write_tree, Repo}). -read_tree(Pid, #object{type=tree, handle=TreeHandle}) -> +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(), index_entry()) -> ok | {error, term()}. +-spec add(pid(), geef_index_entry()) -> ok | {error, term()}. add(Pid, Entry) -> gen_server:call(Pid, {add, Entry}). @@ -83,12 +83,12 @@ handle_call(write, _From, State = #state{handle=Handle}) -> {reply, Reply, State}; handle_call(write_tree, _From, State = #state{handle=Handle}) -> {ok, Oid} = geef_nif:index_write_tree(Handle), - Reply = #oid{oid=Oid}, + Reply = #geef_oid{oid=Oid}, {reply, Reply, State}; handle_call({write_tree, Repo}, _From, State = #state{handle=Handle}) -> RepoHandle = geef_repo:handle(Repo), {ok, Oid} = geef_nif:index_write_tree(Handle, RepoHandle), - Reply = {ok, #oid{oid=Oid}}, + Reply = {ok, #geef_oid{oid=Oid}}, {reply, Reply, State}; handle_call(clear, _From, State = #state{handle=Handle}) -> Reply = geef_nif:index_clear(Handle), diff --git a/src/geef_object.erl b/src/geef_object.erl index ceeaca8..644b3b3 100644 --- a/src/geef_object.erl +++ b/src/geef_object.erl @@ -8,11 +8,11 @@ -export([lookup/2, lookup/3, id/1]). --spec lookup(pid(), oid() | iolist()) -> {ok, object()} | {error, term()}. -lookup(Repo, #oid{oid=Oid}) -> +-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. +lookup(Repo, #geef_oid{oid=Oid}) -> case geef_repo:lookup_object(Repo, Oid) of {ok, Type, Handle} -> - {ok, #object{type=Type, handle=Handle}}; + {ok, #geef_object{type=Type, handle=Handle}}; {error, Err} -> {error, Err} end; @@ -20,20 +20,20 @@ lookup(Repo, Id) -> lookup(Repo, geef_oid:parse(Id)). %% As lookup/2, but it asserts that the type is correct --spec lookup(pid(), oid() | iolist(), atom()) -> {ok, object()} | {error, term()}. +-spec lookup(pid(), geef_oid() | iolist(), atom()) -> {ok, geef_object()} | {error, term()}. lookup(Repo, Id, Type) -> case lookup(Repo, Id) of - {ok, Obj = #object{type=Type}} -> + {ok, Obj = #geef_object{type=Type}} -> {ok, Obj}; {error, Err} -> {error, Err} end. --spec id(object()) -> {ok, oid()} | {error, term()}. -id(#object{handle=Handle}) -> +-spec id(geef_object()) -> {ok, geef_oid()} | {error, term()}. +id(#geef_object{handle=Handle}) -> case geef_nif:object_id(Handle) of {ok, Oid} -> - #oid{oid=Oid}; + #geef_oid{oid=Oid}; Other -> Other end. @@ -42,16 +42,16 @@ id(#object{handle=Handle}) -> lookup_test() -> {ok, Repo} = geef_repo:open(".."), - {ok, #object{type=commit}} = lookup(Repo, geef_oid:parse("b5b68cce8b92ca0e7bd48430617ac10c0f2c2923")), - {ok, #object{type=commit}} = lookup(Repo, "b5b68cce8b92ca0e7bd48430617ac10c0f2c2923"), - {ok, #object{type=commit}} = lookup(Repo, ["b5b68cce8b92ca0e7", "bd48430617ac10c0f2c2923"]), - {ok, #object{type=commit}} = lookup(Repo, <<"b5b68cce8b92ca0e7bd48430617ac10c0f2c2923">>). + {ok, #geef_object{type=commit}} = lookup(Repo, geef_oid:parse("b5b68cce8b92ca0e7bd48430617ac10c0f2c2923")), + {ok, #geef_object{type=commit}} = lookup(Repo, "b5b68cce8b92ca0e7bd48430617ac10c0f2c2923"), + {ok, #geef_object{type=commit}} = lookup(Repo, ["b5b68cce8b92ca0e7", "bd48430617ac10c0f2c2923"]), + {ok, #geef_object{type=commit}} = lookup(Repo, <<"b5b68cce8b92ca0e7bd48430617ac10c0f2c2923">>). id_test() -> {ok, Repo} = geef_repo:open(".."), Sha = <<"b5b68cce8b92ca0e7bd48430617ac10c0f2c2923">>, Id = geef_oid:parse(Sha), - {ok, Commit = #object{type=commit}} = lookup(Repo, Sha), + {ok, Commit = #geef_object{type=commit}} = lookup(Repo, Sha), Id = id(Commit). -endif. diff --git a/src/geef_odb.erl b/src/geef_odb.erl index 5b36b5f..807b254 100644 --- a/src/geef_odb.erl +++ b/src/geef_odb.erl @@ -8,17 +8,17 @@ -include("geef_records.hrl"). --spec exists(odb(), oid() | iolist()) -> boolean(). -exists(#odb{handle=Handle}, #oid{oid=Oid}) -> +-spec exists(geef_odb(), geef_oid() | iolist()) -> boolean(). +exists(#geef_odb{handle=Handle}, #geef_oid{oid=Oid}) -> geef_nif:odb_object_exists(Handle, Oid); -exists(Odb = #odb{}, Sha) -> +exists(Odb = #geef_odb{}, Sha) -> exists(Odb, geef_oid:parse(Sha)). --spec write(odb(), iolist(), atom()) -> {ok, oid()} | {error, term}. -write(#odb{handle=Handle}, Contents, Type) -> +-spec write(geef_odb(), iolist(), atom()) -> {ok, geef_oid()} | {error, term}. +write(#geef_odb{handle=Handle}, Contents, Type) -> case geef_nif:odb_write(Handle, Contents, Type) of {ok, Oid} -> - {ok, #oid{oid=Oid}}; + {ok, #geef_oid{oid=Oid}}; Other -> Other end. diff --git a/src/geef_oid.erl b/src/geef_oid.erl index 7c1b5c2..b1bddb8 100644 --- a/src/geef_oid.erl +++ b/src/geef_oid.erl @@ -10,15 +10,15 @@ -export([parse/1, fmt/1]). %% @doc Get the hex-encoded hash --spec fmt(oid()) -> binary(). -fmt(#oid{oid=Oid}) -> +-spec fmt(geef_oid()) -> binary(). +fmt(#geef_oid{oid=Oid}) -> geef_nif:oid_fmt(Oid). %% @doc Parse an iolist as a hash --spec parse(iolist()) -> oid(). +-spec parse(iolist()) -> geef_oid(). parse(Sha) -> Oid = geef_nif:oid_parse(Sha), - #oid{oid=Oid}. + #geef_oid{oid=Oid}. -ifdef(TEST). diff --git a/src/geef_records.hrl b/src/geef_records.hrl index f695b6e..3037ec5 100644 --- a/src/geef_records.hrl +++ b/src/geef_records.hrl @@ -1,15 +1,11 @@ --record(ref, {handle, type :: atom(), target :: binary() | oid()}). --record(repo, {handle}). --record(odb, {handle}). --record(revwalk, {handle}). --record(oid, {oid}). --record(object, {type :: atom(), handle}). --record(index_entry, {mode, id :: oid(), path :: iolist()}). +-record(geef_ref, {handle, type :: atom(), target :: binary() | geef_oid()}). +-record(geef_odb, {handle}). +-record(geef_oid, {oid}). +-record(geef_object, {type :: atom(), handle}). +-record(geef_index_entry, {mode, id :: geef_oid(), path :: iolist()}). --type ref() :: #ref{}. --type repo() :: #repo{}. --type revwalk() :: #revwalk{}. --type odb() :: #odb{}. --type oid() :: #oid{}. --type object() :: #object{}. --type index_entry() :: #index_entry{}. +-type geef_ref() :: #geef_ref{}. +-type geef_odb() :: #geef_odb{}. +-type geef_oid() :: #geef_oid{}. +-type geef_object() :: #geef_object{}. +-type geef_index_entry() :: #geef_index_entry{}. diff --git a/src/geef_ref.erl b/src/geef_ref.erl index 8f7dc74..876e0a2 100644 --- a/src/geef_ref.erl +++ b/src/geef_ref.erl @@ -1,10 +1,10 @@ -module(geef_ref). --export([lookup/2, resolve/1, name_to_id/2, create/4]). +-export([lookup/2, resolve/1, create/4, target/1]). -include("geef_records.hrl"). --spec new(term()) -> ref(). +-spec new(term()) -> geef_ref(). new(Handle) -> Type = geef_nif:reference_type(Handle), Bin = geef_nif:reference_target(Handle), @@ -12,17 +12,17 @@ new(Handle) -> symbolic -> Bin; oid -> - #oid{oid=Bin} + #geef_oid{oid=Bin} end, - #ref{handle=Handle, type=Type, target=Target}. + #geef_ref{handle=Handle, type=Type, target=Target}. --spec create(pid(), iolist(), oid() | binary(), boolean()) -> {ok, ref()} | {error, term()} +-spec create(pid(), iolist(), geef_oid() | binary(), boolean()) -> {ok, geef_ref()} | {error, term()} . create(Repo, Refname, Target, Force) -> {ok, Ref} = geef_repo:create_reference(Repo, Refname, Target, Force), {ok, new(Ref)}. --spec lookup(pid(), iolist()) -> {ok, ref()} | {error, term()}. +-spec lookup(pid(), iolist()) -> {ok, geef_ref()} | {error, term()}. lookup(Repo, Refname) -> case geef_repo:lookup_reference(Repo, Refname) of {ok, Ref} -> @@ -31,8 +31,8 @@ lookup(Repo, Refname) -> Other end. --spec resolve(ref()) -> {ok, ref()} | {error, term()}. -resolve(#ref{handle=Handle}) -> +-spec resolve(geef_ref()) -> {ok, geef_ref()} | {error, term()}. +resolve(#geef_ref{handle=Handle}) -> case geef_nif:reference_resolve(Handle) of {ok, Ref} -> {ok, new(Ref)}; @@ -40,11 +40,6 @@ resolve(#ref{handle=Handle}) -> Other end. --spec name_to_id(repo(), iolist()) -> {ok, oid()} | {error, binary()}. -name_to_id(#repo{handle=Handle}, Name) -> - case geef_nif:reference_to_id(Handle, Name) of - {ok, Oid} -> - {ok, #oid{oid=Oid}}; - Other -> - Other - end. +-spec target(geef_ref()) -> {geef_oid(), binary()}. +target(#geef_ref{target=Target}) -> + Target. diff --git a/src/geef_repo.erl b/src/geef_repo.erl index 9115570..591b9cd 100644 --- a/src/geef_repo.erl +++ b/src/geef_repo.erl @@ -33,7 +33,7 @@ discover(Path) -> %% @doc Open an existing repository. Path must point to the git-dir or %% worktree --spec open(iolist()) -> {ok, repo()} | {error, term()}. +-spec open(iolist()) -> {ok, pid()} | {error, term()}. open(Path) -> case geef_nif:repository_open(Path) of {ok, Handle} -> @@ -64,7 +64,7 @@ workdir(Pid) -> %% @doc The repository's current object database. This encompasses all %% the configured backends. --spec odb(pid()) -> {ok, odb()} | {error, term}. +-spec odb(pid()) -> {ok, geef_odb()} | {error, term}. odb(Pid) -> gen_server:call(Pid, odb). @@ -176,7 +176,7 @@ start_link(Handle) -> handle_odb(Handle) -> case geef_nif:repository_get_odb(Handle) of {ok, OdbHandle} -> - {ok, #odb{handle=OdbHandle}}; + {ok, #geef_odb{handle=OdbHandle}}; Other -> Other end. @@ -189,7 +189,7 @@ handle_revwalk(Handle) -> Error end. -handle_create_reference(Repo, Refname, #oid{oid=Oid}, Force) -> +handle_create_reference(Repo, Refname, #geef_oid{oid=Oid}, Force) -> geef_nif:reference_create(Repo, Refname, oid, Oid, Force); handle_create_reference(Repo, Refname, Target, Force) -> geef_nif:reference_create(Repo, Refname, symbolic, Target, Force). diff --git a/src/geef_revwalk.erl b/src/geef_revwalk.erl index 9c0d2cc..4920cb4 100644 --- a/src/geef_revwalk.erl +++ b/src/geef_revwalk.erl @@ -28,21 +28,21 @@ %% @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(), oid() | iolist()) -> ok | {error, binary()}. -push(Pid, #oid{oid=Oid}) -> +-spec push(pid(), geef_oid() | iolist()) -> ok | {error, binary()}. +push(Pid, #geef_oid{oid=Oid}) -> gen_server:call(Pid, {push, Oid}); push(Pid, Id) -> - #oid{oid=Oid} = geef_oid:parse(Id), + #geef_oid{oid=Oid} = geef_oid:parse(Id), gen_server:call(Pid, {push, Oid}). %% @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(), oid() | iolist()) -> ok | {error, binary()}. -hide(Pid, #oid{oid=Oid}) -> +-spec hide(pid(), geef_oid() | iolist()) -> ok | {error, binary()}. +hide(Pid, #geef_oid{oid=Oid}) -> gen_server:call(Pid, {hide, Oid}); hide(Pid, Id) -> - #oid{oid=Oid} = geef_oid:parse(Id), + #geef_oid{oid=Oid} = geef_oid:parse(Id), gen_server:call(Pid, {hide, Oid}). @@ -118,7 +118,7 @@ code_change(_OldVsn, State, _Extra) -> handle_next(Handle) -> case geef_nif:revwalk_next(Handle) of {ok, Oid} -> - {ok, #oid{oid=Oid}}; + {ok, #geef_oid{oid=Oid}}; Other -> Other end. diff --git a/src/geef_tree.erl b/src/geef_tree.erl index f13321c..7e06903 100644 --- a/src/geef_tree.erl +++ b/src/geef_tree.erl @@ -8,20 +8,20 @@ -include("geef_records.hrl"). --spec get(object(), iolist()) -> {ok, integer(), atom(), oid(), binary()} | {error, term()}. -get(#object{type=tree,handle=Handle}, Path) -> +-spec get(geef_object(), iolist()) -> {ok, integer(), atom(), geef_oid(), binary()} | {error, term()}. +get(#geef_object{type=tree,handle=Handle}, Path) -> case geef_nif:tree_bypath(Handle, Path) of - {ok, Mode, Type, Oid, Name} -> - {ok, Mode, Type, #oid{oid=Oid}, Name}; + {ok, Mode, Type, Geef_Oid, Name} -> + {ok, Mode, Type, #geef_oid{oid=Geef_Oid}, Name}; Other -> Other end. --spec id(object()) -> {ok, oid()} | {error, term()}. -id(Obj = #object{type=tree}) -> +-spec id(geef_object()) -> {ok, geef_oid()} | {error, term()}. +id(Obj = #geef_object{type=tree}) -> geef_object:id(Obj). --spec lookup(repo(), oid() | iolist()) -> {ok, object()} | {error, term()}. +-spec lookup(pid(), geef_oid() | iolist()) -> {ok, geef_object()} | {error, term()}. lookup(Repo, Id) -> geef_object:lookup(Repo, Id, tree). diff --git a/test/repo_test.erl b/test/repo_test.erl index 49cbbea..a036315 100644 --- a/test/repo_test.erl +++ b/test/repo_test.erl @@ -29,7 +29,7 @@ index_add_test(Repo) -> {ok, Odb} = geef_repo:odb(Repo), {ok, BlobId} = geef_odb:write(Odb, Data, blob), {ok, Idx} = geef_index:new(), - Entry = #index_entry{mode=8#100644, id=BlobId, path="README"}, + Entry = #geef_index_entry{mode=8#100644, id=BlobId, path="README"}, ok = geef_index:add(Idx, Entry), {ok, TreeId} = geef_index:write_tree(Idx, Repo), Expected = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"), @@ -42,8 +42,8 @@ create_ref_test(Repo) -> {ok, _} = geef_ref:create(Repo, "refs/heads/other", "refs/heads/branch", true), {ok, Ref0} = geef_ref:lookup(Repo, "refs/heads/branch"), {ok, Ref1} = geef_ref:lookup(Repo, "refs/heads/other"), - [?_assertEqual(Ref0#ref.target, Id), - ?_assertEqual(Ref1#ref.target, <<"refs/heads/branch">>)]. + [?_assertEqual(Ref0#geef_ref.target, Id), + ?_assertEqual(Ref1#geef_ref.target, <<"refs/heads/branch">>)]. rm_r(Path) -> case filelib:is_dir(Path) of