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.false = enif_make_atom(env, "false");
|
||||
atoms.repository = enif_make_atom(env, "repository");
|
||||
atoms.oid = enif_make_atom(env, "oid");
|
||||
atoms.symbolic = enif_make_atom(env, "symbolic");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -79,6 +81,7 @@ static ErlNifFunc geef_funcs[] =
|
||||
{"reference_lookup", 2, geef_reference_lookup},
|
||||
{"reference_resolve", 1, geef_reference_resolve},
|
||||
{"reference_id", 1, geef_reference_id},
|
||||
{"reference_type", 1, geef_reference_type},
|
||||
{"oid_fmt", 1, geef_oid_fmt},
|
||||
{"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);
|
||||
|
||||
typedef struct {
|
||||
ERL_NIF_TERM ok;
|
||||
ERL_NIF_TERM error;
|
||||
ERL_NIF_TERM true;
|
||||
ERL_NIF_TERM false;
|
||||
ERL_NIF_TERM repository;
|
||||
ERL_NIF_TERM ok;
|
||||
ERL_NIF_TERM error;
|
||||
ERL_NIF_TERM true;
|
||||
ERL_NIF_TERM false;
|
||||
ERL_NIF_TERM repository;
|
||||
ERL_NIF_TERM oid;
|
||||
ERL_NIF_TERM symbolic;
|
||||
} geef_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);
|
||||
}
|
||||
|
||||
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_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_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
|
||||
void geef_ref_free(ErlNifEnv *env, void *cd);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user