mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 21:56:44 +00:00
fixed minor issues with new note iterator
* fixed style issues * use new iterator functions for git_note_foreach()
This commit is contained in:
parent
1a90dcf64e
commit
f7b1850215
@ -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,
|
||||||
|
66
src/notes.c
66
src/notes.c
@ -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, ¬es_ref)) &&
|
return error;
|
||||||
!(error = git_iterator_for_tree(&iter, tree)))
|
|
||||||
error = git_iterator_current(iter, &item);
|
|
||||||
|
|
||||||
while (!error && item) {
|
while (!(error = git_note_next(¬e_id, &annotated_id, iter))) {
|
||||||
error = process_entry_path(item->path, &annotated_object_id);
|
if (note_cb(¬e_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, ¬es_ref);
|
error = retrieve_note_tree_and_commit(&tree, &commit, repo, ¬es_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;
|
||||||
}
|
}
|
||||||
|
@ -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 \
|
||||||
|
@ -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(¬e_created[0], "refs/notes/commits",
|
create_note(¬e_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(¬e_id, &annotated_id, iter) != GIT_ITEROVER; ++i)
|
for (i = 0; (err = git_note_next(¬e_id, &annotated_id, iter)) >= 0; ++i) {
|
||||||
{
|
|
||||||
cl_git_pass(git_note_read(¬e, _repo, NULL, &annotated_id));
|
cl_git_pass(git_note_read(¬e, _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(¬e_created[0], "refs/notes/beer",
|
create_note(¬e_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(¬e_id, &annotated_id, iter) != GIT_ITEROVER; ++i)
|
for (i = 0; (err = git_note_next(¬e_id, &annotated_id, iter)) >= 0; ++i) {
|
||||||
{
|
|
||||||
cl_git_pass(git_note_read(¬e, _repo, "refs/notes/beer", &annotated_id));
|
cl_git_pass(git_note_read(¬e, _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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user