fixed minor issues with new note iterator

* fixed style issues
* use new iterator functions for git_note_foreach()
This commit is contained in:
Nico von Geyso 2013-03-06 22:25:01 +01:00
parent 1a90dcf64e
commit f7b1850215
4 changed files with 49 additions and 62 deletions

View File

@ -59,7 +59,8 @@ GIT_EXTERN(int) git_note_iterator_new(
GIT_EXTERN(void) git_note_iterator_free(git_note_iterator *it); GIT_EXTERN(void) git_note_iterator_free(git_note_iterator *it);
/** /**
* Next iteration step for note iteration * Returns the current item (note_id and annotated_id) and advance the iterator
* internally to the next value
* *
* The notes must not be freed manually by the user. * The notes must not be freed manually by the user.
* *
@ -67,7 +68,8 @@ GIT_EXTERN(void) git_note_iterator_free(git_note_iterator *it);
* @param note_id id of blob containing the message * @param note_id id of blob containing the message
* @param annotated_id id of the git object being annotated * @param annotated_id id of the git object being annotated
* *
* @return 0, GIT_ITEROVER or an error code * @return 0 (no error), GIT_ITEROVER (iteration is done) or an error code
* (negative value)
*/ */
GIT_EXTERN(int) git_note_next( GIT_EXTERN(int) git_note_next(
git_oid* note_id, git_oid* note_id,

View File

@ -531,8 +531,7 @@ void git_note_free(git_note *note)
static int process_entry_path( static int process_entry_path(
const char* entry_path, const char* entry_path,
git_oid *annotated_object_id git_oid *annotated_object_id)
)
{ {
int error = -1; int error = -1;
size_t i = 0, j = 0, len; size_t i = 0, j = 0, len;
@ -569,8 +568,7 @@ static int process_entry_path(
goto cleanup; goto cleanup;
} }
if ((error = git_oid_fromstr(annotated_object_id, buf.ptr)) < 0) error = git_oid_fromstr(annotated_object_id, buf.ptr);
goto cleanup;
cleanup: cleanup:
git_buf_free(&buf); git_buf_free(&buf);
@ -585,33 +583,26 @@ int git_note_foreach(
{ {
int error; int error;
git_note_iterator *iter = NULL; git_note_iterator *iter = NULL;
git_tree *tree = NULL; git_oid note_id, annotated_id;
git_commit *commit = NULL;
git_oid annotated_object_id;
const git_index_entry *item;
if (!(error = retrieve_note_tree_and_commit( if ((error = git_note_iterator_new(&iter, repo, notes_ref)) < 0)
&tree, &commit, repo, &notes_ref)) && return error;
!(error = git_iterator_for_tree(&iter, tree)))
error = git_iterator_current(iter, &item);
while (!error && item) { while (!(error = git_note_next(&note_id, &annotated_id, iter))) {
error = process_entry_path(item->path, &annotated_object_id); if (note_cb(&note_id, &annotated_id, payload)) {
if (note_cb(&item->oid, &annotated_object_id, payload))
error = GIT_EUSER; error = GIT_EUSER;
break;
if (!error) }
error = git_iterator_advance(iter, &item);
} }
git_iterator_free(iter); if (error == GIT_ITEROVER)
git_tree_free(tree); error = 0;
git_commit_free(commit);
git_note_iterator_free(iter);
return error; return error;
} }
void git_note_iterator_free(git_note_iterator *it) void git_note_iterator_free(git_note_iterator *it)
{ {
if (it == NULL) if (it == NULL)
@ -624,23 +615,20 @@ void git_note_iterator_free(git_note_iterator *it)
int git_note_iterator_new( int git_note_iterator_new(
git_note_iterator **it, git_note_iterator **it,
git_repository *repo, git_repository *repo,
const char *notes_ref const char *notes_ref)
)
{ {
int error; int error;
git_commit *commit = NULL; git_commit *commit = NULL;
git_tree *tree = NULL; git_tree *tree = NULL;
error = retrieve_note_tree_and_commit(&tree, &commit, repo, &notes_ref); error = retrieve_note_tree_and_commit(&tree, &commit, repo, &notes_ref);
if (!error) { if (error < 0)
*it = (git_note_iterator *)git__malloc(sizeof(git_iterator)); goto cleanup;
GITERR_CHECK_ALLOC(*it);
error = git_iterator_for_tree(it, tree); if ((error = git_iterator_for_tree(it, tree)) < 0)
if (error)
git_iterator_free(*it); git_iterator_free(*it);
}
cleanup:
git_tree_free(tree); git_tree_free(tree);
git_commit_free(commit); git_commit_free(commit);
@ -650,24 +638,24 @@ int git_note_iterator_new(
int git_note_next( int git_note_next(
git_oid* note_id, git_oid* note_id,
git_oid* annotated_id, git_oid* annotated_id,
git_note_iterator *it git_note_iterator *it)
)
{ {
int error; int error;
const git_index_entry *item; const git_index_entry *item;
error = git_iterator_current(it, &item); if (error = git_iterator_current(it, &item) < 0)
if (!error && item) { goto exit;
git_oid_cpy(note_id, &item->oid);
if (item != NULL) {
git_oid_cpy(note_id, &item->oid);
error = process_entry_path(item->path, annotated_id); error = process_entry_path(item->path, annotated_id);
if (!error) if (error >= 0)
error = git_iterator_advance(it, NULL); error = git_iterator_advance(it, NULL);
} else {
error = GIT_ITEROVER;
} }
if (!error && !item) exit:
error = GIT_ITEROVER;
return error; return error;
} }

View File

@ -12,8 +12,6 @@
#include "git2/oid.h" #include "git2/oid.h"
#include "git2/types.h" #include "git2/types.h"
#include "iterator.h"
#define GIT_NOTES_DEFAULT_REF "refs/notes/commits" #define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
#define GIT_NOTES_DEFAULT_MSG_ADD \ #define GIT_NOTES_DEFAULT_MSG_ADD \

View File

@ -41,7 +41,6 @@ static struct {
const char *note_sha; const char *note_sha;
const char *annotated_object_sha; const char *annotated_object_sha;
} }
list_expectations[] = { list_expectations[] = {
{ "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045" }, { "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045" },
{ "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "9fd738e8f7967c078dceed8190330fc8648ee56a" }, { "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "9fd738e8f7967c078dceed8190330fc8648ee56a" },
@ -330,7 +329,7 @@ void test_notes_notes__can_iterate_default_namespace(void)
"I decorate a65f\n", "I decorate a65f\n",
"I decorate c478\n" "I decorate c478\n"
}; };
int i; int i, err;
create_note(&note_created[0], "refs/notes/commits", create_note(&note_created[0], "refs/notes/commits",
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message[0]); "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message[0]);
@ -339,13 +338,13 @@ void test_notes_notes__can_iterate_default_namespace(void)
cl_git_pass(git_note_iterator_new(&iter, _repo, NULL)); cl_git_pass(git_note_iterator_new(&iter, _repo, NULL));
for (i = 0; git_note_next(&note_id, &annotated_id, iter) != GIT_ITEROVER; ++i) for (i = 0; (err = git_note_next(&note_id, &annotated_id, iter)) >= 0; ++i) {
{
cl_git_pass(git_note_read(&note, _repo, NULL, &annotated_id)); cl_git_pass(git_note_read(&note, _repo, NULL, &annotated_id));
cl_assert_equal_s(git_note_message(note), note_message[i]); cl_assert_equal_s(git_note_message(note), note_message[i]);
} }
cl_assert(i == 2); cl_assert_equal_i(GIT_ITEROVER, err);
cl_assert_equal_i(2, i);
git_note_iterator_free(iter); git_note_iterator_free(iter);
} }
@ -359,7 +358,7 @@ void test_notes_notes__can_iterate_custom_namespace(void)
"I decorate a65f\n", "I decorate a65f\n",
"I decorate c478\n" "I decorate c478\n"
}; };
int i; int i, err;
create_note(&note_created[0], "refs/notes/beer", create_note(&note_created[0], "refs/notes/beer",
"a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message[0]); "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message[0]);
@ -368,13 +367,13 @@ void test_notes_notes__can_iterate_custom_namespace(void)
cl_git_pass(git_note_iterator_new(&iter, _repo, "refs/notes/beer")); cl_git_pass(git_note_iterator_new(&iter, _repo, "refs/notes/beer"));
for (i = 0; git_note_next(&note_id, &annotated_id, iter) != GIT_ITEROVER; ++i) for (i = 0; (err = git_note_next(&note_id, &annotated_id, iter)) >= 0; ++i) {
{
cl_git_pass(git_note_read(&note, _repo, "refs/notes/beer", &annotated_id)); cl_git_pass(git_note_read(&note, _repo, "refs/notes/beer", &annotated_id));
cl_assert_equal_s(git_note_message(note), note_message[i]); cl_assert_equal_s(git_note_message(note), note_message[i]);
} }
cl_assert(i == 2); cl_assert_equal_i(GIT_ITEROVER, err);
cl_assert_equal_i(2, i);
git_note_iterator_free(iter); git_note_iterator_free(iter);
} }