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