Add geef_reflog:delete()
This commit is contained in:
@@ -177,6 +177,7 @@ static ErlNifFunc geef_funcs[] =
|
||||
{"reference_dwim", 2, geef_reference_dwim},
|
||||
{"reference_has_log", 2, geef_reference_has_log},
|
||||
{"reflog_read", 2, geef_reflog_read},
|
||||
{"reflog_delete", 2, geef_reflog_delete},
|
||||
{"oid_fmt", 1, geef_oid_fmt},
|
||||
{"oid_parse", 1, geef_oid_parse},
|
||||
{"object_lookup", 2, geef_object_lookup},
|
||||
|
||||
@@ -65,3 +65,26 @@ on_oom:
|
||||
git_reflog_free(reflog);
|
||||
return geef_oom(env);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
geef_reflog_delete(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
||||
{
|
||||
geef_repository *repo;
|
||||
ErlNifBinary bin;
|
||||
int error;
|
||||
|
||||
if (!enif_get_resource(env, argv[0], geef_repository_type, (void **) &repo))
|
||||
return enif_make_badarg(env);
|
||||
|
||||
if (!enif_inspect_iolist_as_binary(env, argv[1], &bin))
|
||||
return enif_make_badarg(env);
|
||||
|
||||
if (!geef_terminate_binary(&bin))
|
||||
return geef_oom(env);
|
||||
|
||||
error = git_reflog_delete(repo->repo, (char *) bin.data);
|
||||
|
||||
enif_release_binary(&bin);
|
||||
|
||||
return error ? geef_error(env) : atoms.ok;
|
||||
}
|
||||
|
||||
@@ -5,5 +5,6 @@
|
||||
#include <git2.h>
|
||||
|
||||
ERL_NIF_TERM geef_reflog_read(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reflog_delete(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -77,6 +77,10 @@ reference_has_log(_Handle, _Name) ->
|
||||
reflog_read(_Handle, _Name) ->
|
||||
?NIF_FN.
|
||||
|
||||
-spec reflog_delete(term(), iolist()) -> ok | {error, term()}.
|
||||
reflog_delete(_Handle, _Name) ->
|
||||
?NIF_FN.
|
||||
|
||||
odb_object_exists(_Val, _Val) ->
|
||||
nif_error(?LINE).
|
||||
|
||||
|
||||
@@ -3,13 +3,12 @@
|
||||
-module(geef_reflog).
|
||||
|
||||
-include("geef_records.hrl").
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
-type entry() :: #geef_reflog_entry{}.
|
||||
-export_type([entry/0]).
|
||||
|
||||
%% API
|
||||
-export([read/2]).
|
||||
-export([read/2, delete/2]).
|
||||
|
||||
to_entry({Name, Email, Timestamp, Offset, IdOld, IdNew, Message}) ->
|
||||
Sig = geef_sig:convert(Name, Email, Timestamp, Offset),
|
||||
@@ -24,3 +23,6 @@ read(Repo, Name) ->
|
||||
Other ->
|
||||
Other
|
||||
end.
|
||||
|
||||
delete(Repo, Name) ->
|
||||
geef_repo:reflog_delete(Repo, Name).
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
lookup_object/2, revwalk/1, stop/1,
|
||||
reference_dwim/2, handle/1, iterator/2]).
|
||||
-export([reference_has_log/2]).
|
||||
-export([reflog_read/2]).
|
||||
-export([reflog_read/2, reflog_delete/2]).
|
||||
|
||||
-include("geef_records.hrl").
|
||||
-record(state, {handle}).
|
||||
@@ -100,6 +100,10 @@ reference_has_log(Pid, Name) ->
|
||||
reflog_read(Pid, Name) ->
|
||||
gen_server:call(Pid, {reflog_read, Name}).
|
||||
|
||||
%% @private
|
||||
reflog_delete(Pid, Name) ->
|
||||
gen_server:call(Pid, {reflog_delete, Name}).
|
||||
|
||||
stop(Pid) ->
|
||||
gen_server:call(Pid, stop).
|
||||
|
||||
@@ -150,6 +154,10 @@ handle_call({reflog_read, Name}, _From, State = #state{handle=Handle}) ->
|
||||
Reply = geef_nif:reflog_read(Handle, Name),
|
||||
{reply, Reply, State};
|
||||
|
||||
handle_call({reflog_delete, Name}, _From, State = #state{handle=Handle}) ->
|
||||
Reply = geef_nif:reflog_delete(Handle, Name),
|
||||
{reply, Reply, State};
|
||||
|
||||
handle_call(stop, _From, State) ->
|
||||
{stop, normal, ok, State};
|
||||
handle_call(revwalk, _From, State = #state{handle=Handle}) ->
|
||||
|
||||
@@ -59,13 +59,16 @@ ref_test(Repo) ->
|
||||
{ok, Ref1} = geef_ref:lookup(Repo, "refs/heads/other"),
|
||||
{ok, Ref2} = geef_ref:resolve(Ref0),
|
||||
{ok, Dwimed} = geef_ref:dwim(Repo, "branch"),
|
||||
{ok, Reflog} = ?debugVal(geef_reflog:read(Repo, "refs/heads/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(Reflog)),
|
||||
?_assertEqual(1, length(Reflog0)),
|
||||
?_assertEqual(0, length(Reflog1)),
|
||||
?_assertEqual(Ref0, Dwimed)].
|
||||
|
||||
ref_iter_test(Repo) ->
|
||||
|
||||
Reference in New Issue
Block a user