Add support for index_entry's size field
This commit is contained in:
@@ -107,15 +107,14 @@ geef_index_add(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
|||||||
if (!enif_get_tuple(env, argv[1], &arity, &eentry))
|
if (!enif_get_tuple(env, argv[1], &arity, &eentry))
|
||||||
return enif_make_badarg(env);
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
if (arity != 13)
|
|
||||||
return enif_make_badarg(env);
|
|
||||||
|
|
||||||
/* TODO: check for the 'tree_entry' tag */
|
|
||||||
memset(&entry, 0, sizeof(entry));
|
memset(&entry, 0, sizeof(entry));
|
||||||
|
|
||||||
if (!enif_get_uint(env, eentry[5], &entry.mode))
|
if (!enif_get_uint(env, eentry[5], &entry.mode))
|
||||||
return enif_make_badarg(env);
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
|
if (!enif_get_int64(env, eentry[8], &entry.file_size))
|
||||||
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
if (!enif_inspect_iolist_as_binary(env, eentry[12], &path))
|
if (!enif_inspect_iolist_as_binary(env, eentry[12], &path))
|
||||||
return enif_make_badarg(env);
|
return enif_make_badarg(env);
|
||||||
|
|
||||||
@@ -152,7 +151,7 @@ geef_index_count(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
|
|||||||
ERL_NIF_TERM entry_to_term(ErlNifEnv *env, const git_index_entry *entry)
|
ERL_NIF_TERM entry_to_term(ErlNifEnv *env, const git_index_entry *entry)
|
||||||
{
|
{
|
||||||
ErlNifBinary id, path;
|
ErlNifBinary id, path;
|
||||||
ERL_NIF_TERM mode;
|
ERL_NIF_TERM mode, file_size;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if (geef_oid_bin(&id, &entry->oid) < 0)
|
if (geef_oid_bin(&id, &entry->oid) < 0)
|
||||||
@@ -166,9 +165,10 @@ ERL_NIF_TERM entry_to_term(ErlNifEnv *env, const git_index_entry *entry)
|
|||||||
memcpy(path.data, entry->path, len);
|
memcpy(path.data, entry->path, len);
|
||||||
|
|
||||||
mode = enif_make_uint(env, entry->mode);
|
mode = enif_make_uint(env, entry->mode);
|
||||||
|
file_size = enif_make_int64(env, entry->file_size);
|
||||||
|
|
||||||
return enif_make_tuple4(env, atoms.ok, enif_make_binary(env, &path), enif_make_binary(env, &id),
|
return enif_make_tuple5(env, atoms.ok, enif_make_binary(env, &path), enif_make_binary(env, &id),
|
||||||
mode);
|
mode, file_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
ERL_NIF_TERM
|
ERL_NIF_TERM
|
||||||
|
|||||||
@@ -74,8 +74,8 @@ get(Pid, Path, Stage) ->
|
|||||||
nth(Pid, Nth) ->
|
nth(Pid, Nth) ->
|
||||||
maybe_entry(gen_server:call(Pid, {nth, Nth})).
|
maybe_entry(gen_server:call(Pid, {nth, Nth})).
|
||||||
|
|
||||||
maybe_entry({ok, Path, Id, Mode}) ->
|
maybe_entry({ok, Path, Id, Mode, Size}) ->
|
||||||
{ok, #geef_index_entry{path=Path, id=#geef_oid{oid=Id}, mode=Mode}};
|
{ok, #geef_index_entry{path=Path, id=#geef_oid{oid=Id}, mode=Mode, size=Size}};
|
||||||
maybe_entry(Error = {error, _}) ->
|
maybe_entry(Error = {error, _}) ->
|
||||||
Error.
|
Error.
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ handle_call({get, Path, Stage}, _From, State = #state{handle=Handle}) ->
|
|||||||
Reply = geef_nif:index_get(Handle, Path, Stage),
|
Reply = geef_nif:index_get(Handle, Path, Stage),
|
||||||
{reply, Reply, State};
|
{reply, Reply, State};
|
||||||
|
|
||||||
handle_call({add, Entry}, _From, State = #state{handle=Handle}) ->
|
handle_call({add, Entry = #geef_index_entry{}}, _From, State = #state{handle=Handle}) ->
|
||||||
Reply = geef_nif:index_add(Handle, Entry),
|
Reply = geef_nif:index_add(Handle, Entry),
|
||||||
{reply, Reply, State}.
|
{reply, Reply, State}.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{ctime :: non_neg_integer(), mtime :: non_neg_integer(),
|
{ctime :: non_neg_integer(), mtime :: non_neg_integer(),
|
||||||
dev :: non_neg_integer(), ino :: non_neg_integer(),
|
dev :: non_neg_integer(), ino :: non_neg_integer(),
|
||||||
mode :: non_neg_integer(), uid :: non_neg_integer(), gid :: non_neg_integer(),
|
mode :: non_neg_integer(), uid :: non_neg_integer(), gid :: non_neg_integer(),
|
||||||
size :: non_neg_integer(),
|
size = 0 :: non_neg_integer(),
|
||||||
id :: geef_oid:oid(),
|
id :: geef_oid:oid(),
|
||||||
flags, flags_extended,
|
flags, flags_extended,
|
||||||
path :: iolist()}).
|
path :: iolist()}).
|
||||||
|
|||||||
@@ -30,13 +30,14 @@ index_add_test(Repo) ->
|
|||||||
{ok, Odb} = geef_repo:odb(Repo),
|
{ok, Odb} = geef_repo:odb(Repo),
|
||||||
{ok, BlobId} = geef_odb:write(Odb, Data, blob),
|
{ok, BlobId} = geef_odb:write(Odb, Data, blob),
|
||||||
{ok, Idx} = geef_index:new(),
|
{ok, Idx} = geef_index:new(),
|
||||||
Entry = #geef_index_entry{mode=8#100644, id=BlobId, path="README"},
|
Entry = #geef_index_entry{mode=8#100644, id=BlobId, path="README", size=size(Data)},
|
||||||
ok = geef_index:add(Idx, Entry),
|
ok = geef_index:add(Idx, Entry),
|
||||||
{ok, TreeId} = geef_index:write_tree(Idx, Repo),
|
{ok, TreeId} = geef_index:write_tree(Idx, Repo),
|
||||||
Expected = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"),
|
Expected = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"),
|
||||||
{ok, Entry1} = geef_index:get(Idx, "README", 0),
|
{ok, Entry1} = geef_index:get(Idx, "README", 0),
|
||||||
[?_assertEqual(Expected, TreeId),
|
[?_assertEqual(Expected, TreeId),
|
||||||
?_assertEqual(BlobId, Entry1#geef_index_entry.id),
|
?_assertEqual(BlobId, Entry1#geef_index_entry.id),
|
||||||
|
?_assertEqual(size(Data), Entry1#geef_index_entry.size),
|
||||||
?_assertEqual(geef_index:count(Idx), 1)].
|
?_assertEqual(geef_index:count(Idx), 1)].
|
||||||
|
|
||||||
ref_test(Repo) ->
|
ref_test(Repo) ->
|
||||||
|
|||||||
Reference in New Issue
Block a user