For now it simply includes reading in the reflog as a list of entries. This does mean that the drop/append functions don't need to be wrapped, as we can use erlang's list handling. It however also means that we cannot write this back out, as there is currently no way to create an empty reflog that we can fill with our own list.
113 lines
4.5 KiB
Erlang
113 lines
4.5 KiB
Erlang
-module(repo_test).
|
|
-compile([export_all]).
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-include("src/geef_records.hrl").
|
|
|
|
repo_test_() ->
|
|
{foreach, fun start/0, fun stop/1, [fun bare_test/1, fun odb_write_test/1,
|
|
fun ref_test/1, fun index_add_test/1,
|
|
fun ref_iter_test/1, fun revparse_test/1,
|
|
fun commit_create_test/1]}.
|
|
|
|
start() ->
|
|
{A, B, C} = now(),
|
|
N = node(),
|
|
TmpDir = io_lib:format("/tmp/geef-~p~p~p~p.git", [N, A, B, C]),
|
|
{ok, Repo} = geef_repo:init(TmpDir, true),
|
|
Repo.
|
|
|
|
bare_test(Repo) ->
|
|
[?_assertEqual(geef_repo:is_bare(Repo), true)].
|
|
|
|
odb_write_test(Repo) ->
|
|
Data = <<"This is some text that will go in a file">>,
|
|
{ok, Odb} = geef_repo:odb(Repo),
|
|
{ok, Actual} = geef_odb:write(Odb, Data, blob),
|
|
Expected = geef_oid:parse("c300118399f01fe52b316061b5d32beb27e0adfd"),
|
|
[?_assertEqual(Actual, Expected)].
|
|
|
|
revparse_test(Repo) ->
|
|
odb_write_test(Repo),
|
|
{ok, Obj} = geef_revparse:single(Repo, "c300118399"),
|
|
[?_assertEqual(Obj#geef_object.type, blob),
|
|
?_assertEqual(Obj#geef_object.id, geef_oid:parse("c300118399f01fe52b316061b5d32beb27e0adfd"))].
|
|
|
|
index_add_test(Repo) ->
|
|
Data = <<"This is some text that will go in a file">>,
|
|
{ok, Odb} = geef_repo:odb(Repo),
|
|
{ok, BlobId} = geef_odb:write(Odb, Data, blob),
|
|
{ok, Idx} = geef_index:new(),
|
|
{NowMega, NowSecs, _} = os:timestamp(),
|
|
Time = NowMega * 1000000 + NowSecs,
|
|
Entry = #geef_index_entry{mode=8#100644, id=BlobId, path="README", size=size(Data), mtime=Time},
|
|
ok = geef_index:add(Idx, Entry),
|
|
{ok, TreeId} = geef_index:write_tree(Idx, Repo),
|
|
Expected = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"),
|
|
{ok, Entry1} = geef_index:get(Idx, "README", 0),
|
|
[?_assertEqual(Expected, TreeId),
|
|
?_assertEqual(BlobId, Entry1#geef_index_entry.id),
|
|
?_assertEqual(size(Data), Entry1#geef_index_entry.size),
|
|
?_assertEqual(Time, Entry1#geef_index_entry.mtime),
|
|
?_assertEqual(geef_index:count(Idx), 1)].
|
|
|
|
ref_test(Repo) ->
|
|
odb_write_test(Repo),
|
|
Id = geef_oid:parse("c300118399f01fe52b316061b5d32beb27e0adfd"),
|
|
{ok, _} = geef_ref:create(Repo, "refs/heads/branch", Id, true),
|
|
{ok, _} = geef_ref:create_symbolic(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"),
|
|
{ok, Ref2} = geef_ref:resolve(Ref0),
|
|
{ok, Dwimed} = geef_ref:dwim(Repo, "branch"),
|
|
{ok, Reflog} = geef_reflog:read(Repo, "refs/heads/branch"),
|
|
[?_assertEqual(Ref0#geef_reference.target, Id),
|
|
?_assertEqual(Ref1#geef_reference.target, <<"refs/heads/branch">>),
|
|
?_assertEqual(<<"branch">>, geef_ref:shorthand(Ref0)),
|
|
?_assertEqual(Ref2#geef_reference.target, Id),
|
|
?_assertEqual({ok, true}, geef_ref:has_log(Ref0)),
|
|
?_assertEqual(1, length(Reflog)),
|
|
?_assertEqual(Ref0, Dwimed)].
|
|
|
|
ref_iter_test(Repo) ->
|
|
odb_write_test(Repo),
|
|
Id = geef_oid:parse("c300118399f01fe52b316061b5d32beb27e0adfd"),
|
|
{ok, _} = geef_ref:create(Repo, "refs/heads/branch", Id, true),
|
|
{ok, _} = geef_ref:create_symbolic(Repo, "refs/heads/other", "refs/heads/branch", true),
|
|
{ok, Iter0} = geef_ref:iterator(Repo),
|
|
{ok, Ref0} = geef_ref:next(Iter0),
|
|
{ok, Ref1} = geef_ref:next(Iter0),
|
|
Res0 = geef_ref:next(Iter0),
|
|
{ok, Iter1} = geef_ref:iterator(Repo, "refs/heads/b*"),
|
|
{ok, Ref2} = geef_ref:next(Iter1),
|
|
Res1 = geef_ref:next(Iter1),
|
|
[?_assertEqual(Ref0#geef_reference.name, <<"refs/heads/branch">>),
|
|
?_assertEqual(Ref1#geef_reference.name, <<"refs/heads/other">>),
|
|
?_assertEqual(Res0, {error, iterover}),
|
|
?_assertEqual(Ref2#geef_reference.name, <<"refs/heads/branch">>),
|
|
?_assertEqual(Res1, {error, iterover})].
|
|
|
|
commit_create_test(Repo) ->
|
|
odb_write_test(Repo),
|
|
index_add_test(Repo),
|
|
TreeId = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"),
|
|
CommitId = geef_oid:parse("bf968373f95f8fed2a24f9d25ebf06521359c6bc"),
|
|
Sig = #geef_signature{name= <<"foo">>, email= <<"bar">>, time={{1381,949139,0}, 120}},
|
|
Message = <<"Commit message">>,
|
|
Resp = geef_commit:create(Repo, Sig, Message, TreeId, []),
|
|
[?_assertMatch({ok, CommitId}, Resp)].
|
|
|
|
rm_r(Path) ->
|
|
case filelib:is_dir(Path) of
|
|
false ->
|
|
file:delete(Path);
|
|
true ->
|
|
{ok, Entries} = file:list_dir(Path),
|
|
lists:foreach(fun(X) -> ok = rm_r(filename:join([Path, X])) end, Entries),
|
|
file:del_dir(Path)
|
|
end.
|
|
|
|
stop(Repo) ->
|
|
Path = geef_repo:path(Repo),
|
|
geef_repo:stop(Repo),
|
|
ok = rm_r(Path).
|