diff --git a/lib/geef.ex b/lib/geef.ex index f2501e0..2530693 100644 --- a/lib/geef.ex +++ b/lib/geef.ex @@ -7,6 +7,7 @@ defmodule Geef do alias Geef.Object alias Geef.Commit alias Geef.Tree + alias Geef.TreeEntry alias Geef.Blob alias Geef.Tag end diff --git a/lib/geef/tree.ex b/lib/geef/tree.ex index f26ce87..a76b896 100644 --- a/lib/geef/tree.ex +++ b/lib/geef/tree.ex @@ -1,5 +1,8 @@ +defrecord Geef.TreeEntry, Record.extract(:geef_tree_entry, from: "src/geef_records.hrl") + defmodule Geef.Tree do alias Geef.Object + alias Geef.TreeEntry def lookup(repo, id) do case :geef_tree.lookup(repo, id) do @@ -11,7 +14,12 @@ defmodule Geef.Tree do end def get(tree = Object[type: :tree], path) do - :geef_tree.get(set_elem(tree, 0, :geef_object), path) + case :geef_tree.get(set_elem(tree, 0, :geef_object), path) do + {:ok, entry} -> + {:ok, TreeEntry.new entry} + error -> + error + end end end diff --git a/src/geef_records.hrl b/src/geef_records.hrl index ba4f835..c1a2738 100644 --- a/src/geef_records.hrl +++ b/src/geef_records.hrl @@ -11,9 +11,11 @@ path :: iolist()}). -record(geef_request, {service :: atom, path :: binary(), host :: binary()}). +-record(geef_tree_entry, {mode, type, id, name}). -type geef_reference() :: #geef_reference{}. -type geef_oid() :: #geef_oid{}. -type geef_object() :: #geef_object{}. -type geef_index_entry() :: #geef_index_entry{}. -type geef_request() :: #geef_request{}. +-type geef_tree_entry() :: #geef_tree_entry{}. diff --git a/src/geef_tree.erl b/src/geef_tree.erl index 7da9bb4..668bef8 100644 --- a/src/geef_tree.erl +++ b/src/geef_tree.erl @@ -8,11 +8,12 @@ -include("geef_records.hrl"). --spec get(geef_object(), iolist()) -> {ok, integer(), atom(), geef_oid(), binary()} | {error, term()}. +-spec get(geef_object(), iolist()) -> {ok, geef_tree_entry()} | {error, term()}. get(#geef_object{type=tree,handle=Handle}, Path) -> case geef_nif:tree_bypath(Handle, Path) of {ok, Mode, Type, Geef_Oid, Name} -> - {ok, Mode, Type, #geef_oid{oid=Geef_Oid}, Name}; + {ok, #geef_tree_entry{mode=Mode, type=Type, + id=#geef_oid{oid=Geef_Oid}, name=Name}}; Other -> Other end. @@ -29,5 +30,7 @@ bypath_test() -> {ok, Repo} = geef_repo:open(".."), {ok, Tree} = geef_obj:lookup(Repo, geef_oid:parse("395e1c39cb203640b78da8458a42afdb92bef7aa")), Id = geef_oid:parse("80d5c15a040c93a4f98f4496a05ebf30cdd58650"), - {ok, 8#100644, blob, Id, <<"README.md">>} = geef_tree:get(Tree, "README.md"). + Expected = #geef_tree_entry{mode=8#100644, type=blob, id=Id, name = <<"README.md">>}, + {ok, Actual}= geef_tree:get(Tree, "README.md"), + ?assertEqual(Expected, Actual). -endif.