Keep an object's id in the record

We have the information there anyway, so don't make us allocate a new
binary every time.
This commit is contained in:
Carlos Martín Nieto
2013-06-05 22:15:40 +02:00
parent 525fae1ee6
commit d21d2cb9b0
5 changed files with 16 additions and 18 deletions

View File

@@ -11,6 +11,7 @@ geef_tag_peel(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
geef_object *obj, *peeled;
ERL_NIF_TERM term_peeled;
ErlNifBinary id;
if (!enif_get_resource(env, argv[0], geef_object_type, (void **) &obj))
return enif_make_badarg(env);
@@ -25,11 +26,18 @@ geef_tag_peel(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
if (git_tag_peel(&peeled->obj, (git_tag *)obj->obj) < 0)
return geef_error(env);
if(geef_oid_bin(&id, git_object_id(obj->obj)) < 0) {
enif_release_resource(peeled);
git_object_free(obj->obj);
return geef_oom(env);
}
peeled->repo = obj->repo;
enif_keep_resource(peeled->repo);
term_peeled = enif_make_resource(env, peeled);
enif_release_resource(peeled);
return enif_make_tuple3(env, atoms.ok, geef_object_type2atom(git_object_type(peeled->obj)), term_peeled);
return enif_make_tuple4(env, atoms.ok, geef_object_type2atom(git_object_type(peeled->obj)),
enif_make_binary(env, &id), term_peeled);
}