Add reference_type()
This commit is contained in:
@@ -40,6 +40,8 @@ static int load(ErlNifEnv *env, void **priv, ERL_NIF_TERM load_info)
|
|||||||
atoms.true = enif_make_atom(env, "true");
|
atoms.true = enif_make_atom(env, "true");
|
||||||
atoms.false = enif_make_atom(env, "false");
|
atoms.false = enif_make_atom(env, "false");
|
||||||
atoms.repository = enif_make_atom(env, "repository");
|
atoms.repository = enif_make_atom(env, "repository");
|
||||||
|
atoms.oid = enif_make_atom(env, "oid");
|
||||||
|
atoms.symbolic = enif_make_atom(env, "symbolic");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -79,6 +81,7 @@ static ErlNifFunc geef_funcs[] =
|
|||||||
{"reference_lookup", 2, geef_reference_lookup},
|
{"reference_lookup", 2, geef_reference_lookup},
|
||||||
{"reference_resolve", 1, geef_reference_resolve},
|
{"reference_resolve", 1, geef_reference_resolve},
|
||||||
{"reference_id", 1, geef_reference_id},
|
{"reference_id", 1, geef_reference_id},
|
||||||
|
{"reference_type", 1, geef_reference_type},
|
||||||
{"oid_fmt", 1, geef_oid_fmt},
|
{"oid_fmt", 1, geef_oid_fmt},
|
||||||
{"oid_parse", 1, geef_oid_parse},
|
{"oid_parse", 1, geef_oid_parse},
|
||||||
};
|
};
|
||||||
|
|||||||
12
c_src/geef.h
12
c_src/geef.h
@@ -6,11 +6,13 @@
|
|||||||
ERL_NIF_TERM geef_error(ErlNifEnv *env);
|
ERL_NIF_TERM geef_error(ErlNifEnv *env);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ERL_NIF_TERM ok;
|
ERL_NIF_TERM ok;
|
||||||
ERL_NIF_TERM error;
|
ERL_NIF_TERM error;
|
||||||
ERL_NIF_TERM true;
|
ERL_NIF_TERM true;
|
||||||
ERL_NIF_TERM false;
|
ERL_NIF_TERM false;
|
||||||
ERL_NIF_TERM repository;
|
ERL_NIF_TERM repository;
|
||||||
|
ERL_NIF_TERM oid;
|
||||||
|
ERL_NIF_TERM symbolic;
|
||||||
} geef_atoms;
|
} geef_atoms;
|
||||||
|
|
||||||
extern geef_atoms atoms;
|
extern geef_atoms atoms;
|
||||||
|
|||||||
@@ -210,3 +210,30 @@ geef_reference_to_id(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
|||||||
|
|
||||||
return enif_make_binary(env, &bin);
|
return enif_make_binary(env, &bin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ERL_NIF_TERM
|
||||||
|
geef_reference_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
||||||
|
{
|
||||||
|
geef_ref *ref;
|
||||||
|
int type;
|
||||||
|
ERL_NIF_TERM term_type;
|
||||||
|
|
||||||
|
if (!enif_get_resource(env, argv[0], geef_ref_type, (void **) &ref))
|
||||||
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
|
type = git_reference_type(ref->ref);
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case GIT_REF_OID:
|
||||||
|
term_type = atoms.oid;
|
||||||
|
break;
|
||||||
|
case GIT_REF_SYMBOLIC:
|
||||||
|
term_type = atoms.symbolic;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
term_type = atoms.error;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return term_type;
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ ERL_NIF_TERM geef_reference_glob(ErlNifEnv *env, int argc, const ERL_NIF_TERM ar
|
|||||||
ERL_NIF_TERM geef_reference_lookup(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
ERL_NIF_TERM geef_reference_lookup(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||||
ERL_NIF_TERM geef_reference_resolve(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
ERL_NIF_TERM geef_reference_resolve(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||||
ERL_NIF_TERM geef_reference_id(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
ERL_NIF_TERM geef_reference_id(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||||
|
ERL_NIF_TERM geef_reference_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||||
|
|
||||||
void geef_ref_free(ErlNifEnv *env, void *cd);
|
void geef_ref_free(ErlNifEnv *env, void *cd);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
-export([hex_to_raw/1, repository/1, repository_get_path/1, repository_get_odb/1,
|
-export([hex_to_raw/1, repository/1, repository_get_path/1, repository_get_odb/1,
|
||||||
repository_init/2, repository_is_bare/1, repository_get_workdir/1, reference_list/1,
|
repository_init/2, repository_is_bare/1, repository_get_workdir/1, reference_list/1,
|
||||||
reference_to_id/2, reference_glob/2, reference_lookup/2, reference_resolve/1,
|
reference_to_id/2, reference_glob/2, reference_lookup/2, reference_resolve/1,
|
||||||
reference_id/1, odb_object_exists/2]).
|
reference_id/1, reference_type/1, odb_object_exists/2]).
|
||||||
|
|
||||||
-export([oid_fmt/1, oid_parse/1]).
|
-export([oid_fmt/1, oid_parse/1]).
|
||||||
|
|
||||||
@@ -47,6 +47,9 @@ reference_id(_Handle) ->
|
|||||||
reference_resolve(_Handle) ->
|
reference_resolve(_Handle) ->
|
||||||
nif_error(?LINE).
|
nif_error(?LINE).
|
||||||
|
|
||||||
|
reference_type(_Handle) ->
|
||||||
|
nif_error(?LINE).
|
||||||
|
|
||||||
repository(Path) ->
|
repository(Path) ->
|
||||||
case repository_open(Path) of
|
case repository_open(Path) of
|
||||||
{ok, Handle} ->
|
{ok, Handle} ->
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
-module(reference, [Handle]).
|
-module(reference, [Handle]).
|
||||||
-export([resolve/0, id/0]).
|
-export([resolve/0, id/0, type/0]).
|
||||||
|
|
||||||
resolve() ->
|
resolve() ->
|
||||||
case geef:reference_resolve(Handle) of
|
case geef:reference_resolve(Handle) of
|
||||||
@@ -12,3 +12,7 @@ resolve() ->
|
|||||||
-spec id() -> binary().
|
-spec id() -> binary().
|
||||||
id() ->
|
id() ->
|
||||||
geef:reference_id(Handle).
|
geef:reference_id(Handle).
|
||||||
|
|
||||||
|
-spec type() -> oid | symbolic | error.
|
||||||
|
type() ->
|
||||||
|
geef:reference_type(Handle).
|
||||||
|
|||||||
Reference in New Issue
Block a user