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

@@ -171,6 +171,7 @@ static ErlNifFunc geef_funcs[] =
{"index_write", 1, geef_index_write},
{"index_write_tree", 1, geef_index_write_tree},
{"index_write_tree", 2, geef_index_write_tree},
{"index_add", 2, geef_index_add},
{"index_clear", 1, geef_index_clear},
{"index_read_tree", 2, geef_index_read_tree},
};

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[])
{

View File

@@ -18,5 +18,7 @@ ERL_NIF_TERM geef_index_write(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[
ERL_NIF_TERM geef_index_write_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_index_clear(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_index_read_tree(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_index_add(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
ERL_NIF_TERM geef_index_new(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
#endif