Add support for index_entry's size field

This commit is contained in:
Carlos Martín Nieto
2013-09-01 19:56:35 +02:00
parent e39a17fe43
commit 15ba2dd65f
4 changed files with 13 additions and 12 deletions

View File

@@ -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

View File

@@ -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}.

View File

@@ -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()}).

View File

@@ -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) ->