Simple version of index_add
This commit is contained in:
@@ -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},
|
||||
};
|
||||
|
||||
@@ -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[])
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user