128 lines
5.1 KiB
Erlang
128 lines
5.1 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, fun commit_message_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)].
|
|
|
|
set_logallrefupdates(Repo) ->
|
|
{ok, Config} = geef_repo:config(Repo),
|
|
ok = geef_config:set(Config, "core.logallrefupdates", true).
|
|
|
|
ref_test(Repo) ->
|
|
odb_write_test(Repo),
|
|
set_logallrefupdates(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, Reflog0} = geef_reflog:read(Repo, "refs/heads/branch"),
|
|
ok = geef_reflog:delete(Repo, "refs/heads/branch"),
|
|
{ok, Reflog1} = 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(Reflog0)),
|
|
?_assertEqual(0, length(Reflog1)),
|
|
?_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)].
|
|
|
|
commit_message_test(Repo) ->
|
|
commit_create_test(Repo),
|
|
CommitId = geef_oid:parse("bf968373f95f8fed2a24f9d25ebf06521359c6bc"),
|
|
{ok, Commit} = geef_commit:lookup(Repo, CommitId),
|
|
Resp = geef_commit:message(Commit),
|
|
[?_assertMatch({ok, <<"Commit message">>}, 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).
|