From d0034b114226d6b21e7b81f7ce03e6221919f884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= Date: Wed, 10 Apr 2013 19:08:05 +0200 Subject: [PATCH] Add a test for revwalk --- c_src/geef.c | 1 + c_src/geef.h | 1 + c_src/revwalk.c | 7 ++++++- test/revwalk_test.erl | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 test/revwalk_test.erl diff --git a/c_src/geef.c b/c_src/geef.c index ca8f0d7..27f456a 100644 --- a/c_src/geef.c +++ b/c_src/geef.c @@ -67,6 +67,7 @@ static int load(ErlNifEnv *env, void **priv, ERL_NIF_TERM load_info) atoms.toposort = enif_make_atom(env, "sort_topo"); atoms.timesort = enif_make_atom(env, "sort_time"); atoms.reversesort = enif_make_atom(env, "sort_reverse"); + atoms.iterover = enif_make_atom(env, "iterover"); return 0; } diff --git a/c_src/geef.h b/c_src/geef.h index 263cc86..bd83944 100644 --- a/c_src/geef.h +++ b/c_src/geef.h @@ -20,6 +20,7 @@ typedef struct { ERL_NIF_TERM toposort; ERL_NIF_TERM timesort; ERL_NIF_TERM reversesort; + ERL_NIF_TERM iterover; } geef_atoms; extern geef_atoms atoms; diff --git a/c_src/revwalk.c b/c_src/revwalk.c index 9c6b093..9b13433 100644 --- a/c_src/revwalk.c +++ b/c_src/revwalk.c @@ -62,6 +62,7 @@ geef_revwalk_push(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) ERL_NIF_TERM geef_revwalk_next(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { + int error; ErlNifBinary bin; geef_revwalk *walk; @@ -71,8 +72,12 @@ geef_revwalk_next(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) if (!enif_alloc_binary(GIT_OID_RAWSZ, &bin)) return atoms.error; - if (git_revwalk_next((git_oid *)bin.data, walk->walk) < 0) + if ((error = git_revwalk_next((git_oid *)bin.data, walk->walk)) < 0) { + if (error == GIT_ITEROVER) + return enif_make_tuple2(env, atoms.error, atoms.iterover); + return geef_error(env); + } return enif_make_tuple2(env, atoms.ok, enif_make_binary(env, &bin)); } diff --git a/test/revwalk_test.erl b/test/revwalk_test.erl new file mode 100644 index 0000000..8d0b87c --- /dev/null +++ b/test/revwalk_test.erl @@ -0,0 +1,34 @@ +-module(revwalk_test). +-compile([export_all]). +-include_lib("eunit/include/eunit.hrl"). + +repo_test_() -> + case os:getenv("GEEF_RESOURCES") of + false -> + []; + _ -> + {foreach, fun start/0, fun stop/1, [fun amount_test/1]} + end. + +start() -> + BasePath = os:getenv("GEEF_RESOURCES"), + Path = filename:join([BasePath, "testrepo.git"]), + {ok, Repo} = geef_repo:open(Path), + Repo. + +count_walk(Walk, Acc) -> + case geef_revwalk:next(Walk) of + {ok, _} -> + count_walk(Walk, Acc + 1); + {error, iterover} -> + Acc + end. + +amount_test(Repo) -> + {ok, Walk} = geef_repo:revwalk(Repo), + Id = geef_oid:parse("a4a7dce85cf63874e984719f4fdd239f5145052f"), + ok = geef_revwalk:push(Walk, Id), + [?_assertEqual(6, count_walk(Walk, 0))]. + +stop(_Repo) -> + ok.