Add reference_type()

This commit is contained in:
Carlos Martín Nieto
2013-01-23 06:16:49 +01:00
parent 71eea735d2
commit 7ac46fbf5e
6 changed files with 47 additions and 7 deletions

View File

@@ -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},
};

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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);