Simple version of index_add

This commit is contained in:
Carlos Martín Nieto
2013-05-03 14:05:00 +02:00
parent a5bbfa681b
commit 3f4d51c0e1
8 changed files with 82 additions and 30 deletions

View File

@@ -57,7 +57,7 @@ geef_index_write_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
return enif_make_badarg(env);
if (argc == 2) {
if (!enif_get_resource(env, argv[0], geef_repository_type, (void **) &repo))
if (!enif_get_resource(env, argv[1], geef_repository_type, (void **) &repo))
return enif_make_badarg(env);
error = git_index_write_tree_to(&id, index->index, repo->repo);
@@ -92,6 +92,52 @@ geef_index_read_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
return atoms.ok;
}
ERL_NIF_TERM
geef_index_add(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
geef_index *index;
const ERL_NIF_TERM *eentry, *oid;
int arity;
ErlNifBinary path, id;
git_index_entry entry;
if (!enif_get_resource(env, argv[0], geef_index_type, (void **) &index))
return enif_make_badarg(env);
if (!enif_get_tuple(env, argv[1], &arity, &eentry))
return enif_make_badarg(env);
if (arity != 4)
return enif_make_badarg(env);
/* TODO: check for the 'tree_entry' tag */
memset(&entry, 0, sizeof(entry));
if (!enif_get_uint(env, eentry[1], &entry.mode))
return enif_make_badarg(env);
if (!enif_inspect_iolist_as_binary(env, eentry[3], &path))
return enif_make_badarg(env);
if (!geef_terminate_binary(&path))
return geef_oom(env);
entry.path = (char *) path.data;
/* Extract the oid from the tuple */
if (!enif_get_tuple(env, eentry[2], &arity, &oid))
return enif_make_badarg(env);
if (!enif_inspect_binary(env, oid[1], &id))
return enif_make_badarg(env);
git_oid_fromraw(&entry.oid, id.data);
if (git_index_add(index->index, &entry) < 0)
return geef_error(env);
return atoms.ok;
}
ERL_NIF_TERM
geef_index_clear(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{