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))
|
||||
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));
|
||||
|
||||
if (!enif_get_uint(env, eentry[5], &entry.mode))
|
||||
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))
|
||||
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)
|
||||
{
|
||||
ErlNifBinary id, path;
|
||||
ERL_NIF_TERM mode;
|
||||
ERL_NIF_TERM mode, file_size;
|
||||
size_t len;
|
||||
|
||||
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);
|
||||
|
||||
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),
|
||||
mode);
|
||||
return enif_make_tuple5(env, atoms.ok, enif_make_binary(env, &path), enif_make_binary(env, &id),
|
||||
mode, file_size);
|
||||
}
|
||||
|
||||
ERL_NIF_TERM
|
||||
|
||||
@@ -74,8 +74,8 @@ get(Pid, Path, Stage) ->
|
||||
nth(Pid, Nth) ->
|
||||
maybe_entry(gen_server:call(Pid, {nth, Nth})).
|
||||
|
||||
maybe_entry({ok, Path, Id, Mode}) ->
|
||||
{ok, #geef_index_entry{path=Path, id=#geef_oid{oid=Id}, mode=Mode}};
|
||||
maybe_entry({ok, Path, Id, Mode, Size}) ->
|
||||
{ok, #geef_index_entry{path=Path, id=#geef_oid{oid=Id}, mode=Mode, size=Size}};
|
||||
maybe_entry(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, 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, Reply, State}.
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{ctime :: non_neg_integer(), mtime :: non_neg_integer(),
|
||||
dev :: non_neg_integer(), ino :: 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(),
|
||||
flags, flags_extended,
|
||||
path :: iolist()}).
|
||||
|
||||
@@ -30,13 +30,14 @@ index_add_test(Repo) ->
|
||||
{ok, Odb} = geef_repo:odb(Repo),
|
||||
{ok, BlobId} = geef_odb:write(Odb, Data, blob),
|
||||
{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, TreeId} = geef_index:write_tree(Idx, Repo),
|
||||
Expected = geef_oid:parse("5a20bbbf65ea75ad4d9f995d179156824ccca3a1"),
|
||||
{ok, Entry1} = geef_index:get(Idx, "README", 0),
|
||||
[?_assertEqual(Expected, TreeId),
|
||||
?_assertEqual(BlobId, Entry1#geef_index_entry.id),
|
||||
?_assertEqual(size(Data), Entry1#geef_index_entry.size),
|
||||
?_assertEqual(geef_index:count(Idx), 1)].
|
||||
|
||||
ref_test(Repo) ->
|
||||
|
||||
Reference in New Issue
Block a user