1 #include "clar_libgit2.h"
3 static git_repository
*_repo
;
4 static git_signature
*_sig
;
6 void test_notes_notes__initialize(void)
8 _repo
= cl_git_sandbox_init("testrepo.git");
9 cl_git_pass(git_signature_now(&_sig
, "alice", "alice@example.com"));
12 void test_notes_notes__cleanup(void)
14 git_signature_free(_sig
);
17 cl_git_sandbox_cleanup();
20 static void assert_note_equal(git_note
*note
, char *message
, git_oid
*note_oid
) {
23 cl_assert_equal_s(git_note_message(note
), message
);
24 cl_assert_equal_oid(git_note_id(note
), note_oid
);
26 cl_git_pass(git_blob_lookup(&blob
, _repo
, note_oid
));
27 cl_assert_equal_s(git_note_message(note
), (const char *)git_blob_rawcontent(blob
));
32 static void create_note(git_oid
*note_oid
, const char *canonical_namespace
, const char *target_sha
, const char *message
)
36 cl_git_pass(git_oid_fromstr(&oid
, target_sha
));
37 cl_git_pass(git_note_create(note_oid
, _repo
, canonical_namespace
, _sig
, _sig
, &oid
, message
, 0));
42 const char *annotated_object_sha
;
44 list_expectations
[] = {
45 { "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045" },
46 { "1c73b1f51762155d357bcd1fd4f2c409ef80065b", "9fd738e8f7967c078dceed8190330fc8648ee56a" },
47 { "257b43746b6b46caa4aa788376c647cce0a33e2b", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750" },
48 { "1ec1c8e03f461f4f5d3f3702172483662e7223f3", "c47800c7266a2be04c571c04d5a6614691ea99bd" },
52 #define EXPECTATIONS_COUNT (sizeof(list_expectations)/sizeof(list_expectations[0])) - 1
54 static int note_list_cb(
55 const git_oid
*blob_id
, const git_oid
*annotated_obj_id
, void *payload
)
57 git_oid expected_note_oid
, expected_target_oid
;
59 unsigned int *count
= (unsigned int *)payload
;
61 cl_assert(*count
< EXPECTATIONS_COUNT
);
63 cl_git_pass(git_oid_fromstr(&expected_note_oid
, list_expectations
[*count
].note_sha
));
64 cl_assert_equal_oid(&expected_note_oid
, blob_id
);
66 cl_git_pass(git_oid_fromstr(&expected_target_oid
, list_expectations
[*count
].annotated_object_sha
));
67 cl_assert_equal_oid(&expected_target_oid
, annotated_obj_id
);
74 struct note_create_payload
{
76 const char *object_oid
;
80 static int note_list_create_cb(
81 const git_oid
*blob_oid
, const git_oid
*annotated_obj_id
, void *payload
)
83 git_oid expected_note_oid
, expected_target_oid
;
84 struct note_create_payload
*notes
= payload
;
87 for (i
= 0; notes
[i
].note_oid
!= NULL
; i
++) {
88 cl_git_pass(git_oid_fromstr(&expected_note_oid
, notes
[i
].note_oid
));
90 if (git_oid_cmp(&expected_note_oid
, blob_oid
) != 0)
93 cl_git_pass(git_oid_fromstr(&expected_target_oid
, notes
[i
].object_oid
));
95 if (git_oid_cmp(&expected_target_oid
, annotated_obj_id
) != 0)
102 cl_fail("Did not see expected note");
106 static void assert_notes_seen(struct note_create_payload payload
[], size_t n
)
110 for (i
= 0; payload
[i
].note_oid
!= NULL
; i
++) {
115 cl_assert_equal_i(seen
, n
);
118 void test_notes_notes__can_create_a_note(void)
121 static struct note_create_payload can_create_a_note
[] = {
122 { "1c9b1bc36730582a42d56eeee0dc58673d7ae869", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", 0 },
126 create_note(¬e_oid
, "refs/notes/i-can-see-dead-notes", can_create_a_note
[0].object_oid
, "I decorate 4a20\n");
128 cl_git_pass(git_note_foreach(_repo
, "refs/notes/i-can-see-dead-notes", note_list_create_cb
, &can_create_a_note
));
130 assert_notes_seen(can_create_a_note
, 1);
133 void test_notes_notes__can_create_a_note_from_commit(void)
136 git_oid notes_commit_out
;
138 static struct note_create_payload can_create_a_note_from_commit
[] = {
139 { "1c9b1bc36730582a42d56eeee0dc58673d7ae869", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", 0 },
143 cl_git_pass(git_oid_fromstr(&oid
, can_create_a_note_from_commit
[0].object_oid
));
145 cl_git_pass(git_note_commit_create(¬es_commit_out
, NULL
, _repo
, NULL
, _sig
, _sig
, &oid
, "I decorate 4a20\n", 1));
147 /* create_from_commit will not update any ref,
148 * so we must manually create the ref, that points to the commit */
149 cl_git_pass(git_reference_create(&ref
, _repo
, "refs/notes/i-can-see-dead-notes", ¬es_commit_out
, 0, NULL
));
151 cl_git_pass(git_note_foreach(_repo
, "refs/notes/i-can-see-dead-notes", note_list_create_cb
, &can_create_a_note_from_commit
));
153 assert_notes_seen(can_create_a_note_from_commit
, 1);
155 git_reference_free(ref
);
159 /* Test that we can create a note from a commit, given an existing commit */
160 void test_notes_notes__can_create_a_note_from_commit_given_an_existing_commit(void)
163 git_oid notes_commit_out
;
164 git_commit
*existing_notes_commit
= NULL
;
166 static struct note_create_payload can_create_a_note_from_commit_given_an_existing_commit
[] = {
167 { "1c9b1bc36730582a42d56eeee0dc58673d7ae869", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", 0 },
168 { "1aaf94147c21f981e0a20bf57b89137c5a6aae52", "9fd738e8f7967c078dceed8190330fc8648ee56a", 0 },
172 cl_git_pass(git_oid_fromstr(&oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
174 cl_git_pass(git_note_commit_create(¬es_commit_out
, NULL
, _repo
, NULL
, _sig
, _sig
, &oid
, "I decorate 4a20\n", 0));
176 cl_git_pass(git_oid_fromstr(&oid
, "9fd738e8f7967c078dceed8190330fc8648ee56a"));
178 git_commit_lookup(&existing_notes_commit
, _repo
, ¬es_commit_out
);
180 cl_assert(existing_notes_commit
);
182 cl_git_pass(git_note_commit_create(¬es_commit_out
, NULL
, _repo
, existing_notes_commit
, _sig
, _sig
, &oid
, "I decorate 9fd7\n", 0));
184 /* create_from_commit will not update any ref,
185 * so we must manually create the ref, that points to the commit */
186 cl_git_pass(git_reference_create(&ref
, _repo
, "refs/notes/i-can-see-dead-notes", ¬es_commit_out
, 0, NULL
));
188 cl_git_pass(git_note_foreach(_repo
, "refs/notes/i-can-see-dead-notes", note_list_create_cb
, &can_create_a_note_from_commit_given_an_existing_commit
));
190 assert_notes_seen(can_create_a_note_from_commit_given_an_existing_commit
, 2);
192 git_commit_free(existing_notes_commit
);
193 git_reference_free(ref
);
197 * $ git notes --ref i-can-see-dead-notes add -m "I decorate a65f" a65fedf39aefe402d3bb6e24df4d4f5fe4547750
198 * $ git notes --ref i-can-see-dead-notes add -m "I decorate c478" c47800c7266a2be04c571c04d5a6614691ea99bd
199 * $ git notes --ref i-can-see-dead-notes add -m "I decorate 9fd7 and 4a20" 9fd738e8f7967c078dceed8190330fc8648ee56a
200 * $ git notes --ref i-can-see-dead-notes add -m "I decorate 9fd7 and 4a20" 4a202b346bb0fb0db7eff3cffeb3c70babbd2045
202 * $ git notes --ref i-can-see-dead-notes list
203 * 1c73b1f51762155d357bcd1fd4f2c409ef80065b 4a202b346bb0fb0db7eff3cffeb3c70babbd2045
204 * 1c73b1f51762155d357bcd1fd4f2c409ef80065b 9fd738e8f7967c078dceed8190330fc8648ee56a
205 * 257b43746b6b46caa4aa788376c647cce0a33e2b a65fedf39aefe402d3bb6e24df4d4f5fe4547750
206 * 1ec1c8e03f461f4f5d3f3702172483662e7223f3 c47800c7266a2be04c571c04d5a6614691ea99bd
208 * $ git ls-tree refs/notes/i-can-see-dead-notes
209 * 100644 blob 1c73b1f51762155d357bcd1fd4f2c409ef80065b 4a202b346bb0fb0db7eff3cffeb3c70babbd2045
210 * 100644 blob 1c73b1f51762155d357bcd1fd4f2c409ef80065b 9fd738e8f7967c078dceed8190330fc8648ee56a
211 * 100644 blob 257b43746b6b46caa4aa788376c647cce0a33e2b a65fedf39aefe402d3bb6e24df4d4f5fe4547750
212 * 100644 blob 1ec1c8e03f461f4f5d3f3702172483662e7223f3 c47800c7266a2be04c571c04d5a6614691ea99bd
214 void test_notes_notes__can_retrieve_a_list_of_notes_for_a_given_namespace(void)
216 git_oid note_oid1
, note_oid2
, note_oid3
, note_oid4
;
217 unsigned int retrieved_notes
= 0;
219 create_note(¬e_oid1
, "refs/notes/i-can-see-dead-notes", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", "I decorate a65f\n");
220 create_note(¬e_oid2
, "refs/notes/i-can-see-dead-notes", "c47800c7266a2be04c571c04d5a6614691ea99bd", "I decorate c478\n");
221 create_note(¬e_oid3
, "refs/notes/i-can-see-dead-notes", "9fd738e8f7967c078dceed8190330fc8648ee56a", "I decorate 9fd7 and 4a20\n");
222 create_note(¬e_oid4
, "refs/notes/i-can-see-dead-notes", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", "I decorate 9fd7 and 4a20\n");
224 cl_git_pass(git_note_foreach
225 (_repo
, "refs/notes/i-can-see-dead-notes", note_list_cb
, &retrieved_notes
));
227 cl_assert_equal_i(4, retrieved_notes
);
230 static int note_cancel_cb(
231 const git_oid
*blob_id
, const git_oid
*annotated_obj_id
, void *payload
)
233 unsigned int *count
= (unsigned int *)payload
;
236 GIT_UNUSED(annotated_obj_id
);
243 void test_notes_notes__can_cancel_foreach(void)
245 git_oid note_oid1
, note_oid2
, note_oid3
, note_oid4
;
246 unsigned int retrieved_notes
= 0;
248 create_note(¬e_oid1
, "refs/notes/i-can-see-dead-notes", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", "I decorate a65f\n");
249 create_note(¬e_oid2
, "refs/notes/i-can-see-dead-notes", "c47800c7266a2be04c571c04d5a6614691ea99bd", "I decorate c478\n");
250 create_note(¬e_oid3
, "refs/notes/i-can-see-dead-notes", "9fd738e8f7967c078dceed8190330fc8648ee56a", "I decorate 9fd7 and 4a20\n");
251 create_note(¬e_oid4
, "refs/notes/i-can-see-dead-notes", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", "I decorate 9fd7 and 4a20\n");
255 git_note_foreach(_repo
, "refs/notes/i-can-see-dead-notes",
256 note_cancel_cb
, &retrieved_notes
));
259 void test_notes_notes__retrieving_a_list_of_notes_for_an_unknown_namespace_returns_ENOTFOUND(void)
262 unsigned int retrieved_notes
= 0;
264 error
= git_note_foreach(_repo
, "refs/notes/i-am-not", note_list_cb
, &retrieved_notes
);
266 cl_assert_equal_i(GIT_ENOTFOUND
, error
);
268 cl_assert_equal_i(0, retrieved_notes
);
271 void test_notes_notes__inserting_a_note_without_passing_a_namespace_uses_the_default_namespace(void)
273 git_oid note_oid
, target_oid
;
274 git_note
*note
, *default_namespace_note
;
275 git_buf default_ref
= GIT_BUF_INIT
;
277 cl_git_pass(git_oid_fromstr(&target_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
278 cl_git_pass(git_note_default_ref(&default_ref
, _repo
));
280 create_note(¬e_oid
, NULL
, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
282 cl_git_pass(git_note_read(¬e
, _repo
, NULL
, &target_oid
));
283 cl_git_pass(git_note_read(&default_namespace_note
, _repo
, default_ref
.ptr
, &target_oid
));
285 assert_note_equal(note
, "hello world\n", ¬e_oid
);
286 assert_note_equal(default_namespace_note
, "hello world\n", ¬e_oid
);
288 git_buf_dispose(&default_ref
);
290 git_note_free(default_namespace_note
);
293 void test_notes_notes__can_insert_a_note_with_a_custom_namespace(void)
295 git_oid note_oid
, target_oid
;
298 cl_git_pass(git_oid_fromstr(&target_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
300 create_note(¬e_oid
, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world on a custom namespace\n");
302 cl_git_pass(git_note_read(¬e
, _repo
, "refs/notes/some/namespace", &target_oid
));
304 assert_note_equal(note
, "hello world on a custom namespace\n", ¬e_oid
);
310 * $ git notes --ref fanout list 8496071c1b46c854b31185ea97743be6a8774479
311 * 08b041783f40edfe12bb406c9c9a8a040177c125
313 void test_notes_notes__creating_a_note_on_a_target_which_already_has_one_returns_EEXISTS(void)
316 git_oid note_oid
, target_oid
;
318 cl_git_pass(git_oid_fromstr(&target_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
320 create_note(¬e_oid
, NULL
, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
321 error
= git_note_create(¬e_oid
, _repo
, NULL
, _sig
, _sig
, &target_oid
, "hello world\n", 0);
323 cl_assert_equal_i(GIT_EEXISTS
, error
);
325 create_note(¬e_oid
, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
326 error
= git_note_create(¬e_oid
, _repo
, "refs/notes/some/namespace", _sig
, _sig
, &target_oid
, "hello world\n", 0);
328 cl_assert_equal_i(GIT_EEXISTS
, error
);
332 void test_notes_notes__creating_a_note_on_a_target_can_overwrite_existing_note(void)
334 git_oid note_oid
, target_oid
;
335 git_note
*note
, *namespace_note
;
337 cl_git_pass(git_oid_fromstr(&target_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
339 create_note(¬e_oid
, NULL
, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello old world\n");
340 cl_git_pass(git_note_create(¬e_oid
, _repo
, NULL
, _sig
, _sig
, &target_oid
, "hello new world\n", 1));
342 cl_git_pass(git_note_read(¬e
, _repo
, NULL
, &target_oid
));
343 assert_note_equal(note
, "hello new world\n", ¬e_oid
);
345 create_note(¬e_oid
, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello old world\n");
346 cl_git_pass(git_note_create(¬e_oid
, _repo
, "refs/notes/some/namespace", _sig
, _sig
, &target_oid
, "hello new ref world\n", 1));
348 cl_git_pass(git_note_read(&namespace_note
, _repo
, "refs/notes/some/namespace", &target_oid
));
349 assert_note_equal(namespace_note
, "hello new ref world\n", ¬e_oid
);
352 git_note_free(namespace_note
);
355 static char *messages
[] = {
356 "08c041783f40edfe12bb406c9c9a8a040177c125",
357 "96c45fbe09ab7445fc7c60fd8d17f32494399343",
358 "48cc7e38dcfc1ec87e70ec03e08c3e83d7a16aa1",
359 "24c3eaafb681c3df668f9df96f58e7b8c756eb04",
360 "96ca1b6ccc7858ae94684777f85ac0e7447f7040",
361 "7ac2db4378a08bb244a427c357e0082ee0d57ac6",
362 "e6cba23dbf4ef84fe35e884f017f4e24dc228572",
363 "c8cf3462c7d8feba716deeb2ebe6583bd54589e2",
364 "39c16b9834c2d665ac5f68ad91dc5b933bad8549",
365 "f3c582b1397df6a664224ebbaf9d4cc952706597",
366 "29cec67037fe8e89977474988219016ae7f342a6",
367 "36c4cd238bf8e82e27b740e0741b025f2e8c79ab",
368 "f1c45a47c02e01d5a9a326f1d9f7f756373387f8",
369 "4aca84406f5daee34ab513a60717c8d7b1763ead",
370 "84ce167da452552f63ed8407b55d5ece4901845f",
374 #define MESSAGES_COUNT (sizeof(messages)/sizeof(messages[0])) - 1
376 /* Test that we can read a note */
377 void test_notes_notes__can_read_a_note(void)
379 git_oid note_oid
, target_oid
;
382 create_note(¬e_oid
, "refs/notes/i-can-see-dead-notes", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", "I decorate 4a20\n");
384 cl_git_pass(git_oid_fromstr(&target_oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
386 cl_git_pass(git_note_read(¬e
, _repo
, "refs/notes/i-can-see-dead-notes", &target_oid
));
388 cl_assert_equal_s(git_note_message(note
), "I decorate 4a20\n");
393 /* Test that we can read a note with from commit api */
394 void test_notes_notes__can_read_a_note_from_a_commit(void)
396 git_oid oid
, notes_commit_oid
;
397 git_commit
*notes_commit
;
400 cl_git_pass(git_oid_fromstr(&oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
401 cl_git_pass(git_note_commit_create(¬es_commit_oid
, NULL
, _repo
, NULL
, _sig
, _sig
, &oid
, "I decorate 4a20\n", 1));
402 cl_git_pass(git_commit_lookup(¬es_commit
, _repo
, ¬es_commit_oid
));
403 cl_assert(notes_commit
);
405 cl_git_pass(git_note_commit_read(¬e
, _repo
, notes_commit
, &oid
));
406 cl_assert_equal_s(git_note_message(note
), "I decorate 4a20\n");
408 git_commit_free(notes_commit
);
412 /* Test that we can read a commit with no note fails */
413 void test_notes_notes__attempt_to_read_a_note_from_a_commit_with_no_note_fails(void)
415 git_oid oid
, notes_commit_oid
;
416 git_commit
*notes_commit
;
419 cl_git_pass(git_oid_fromstr(&oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
421 cl_git_pass(git_note_commit_create(¬es_commit_oid
, NULL
, _repo
, NULL
, _sig
, _sig
, &oid
, "I decorate 4a20\n", 1));
423 git_commit_lookup(¬es_commit
, _repo
, ¬es_commit_oid
);
425 cl_git_pass(git_note_commit_remove(¬es_commit_oid
, _repo
, notes_commit
, _sig
, _sig
, &oid
));
426 git_commit_free(notes_commit
);
428 git_commit_lookup(¬es_commit
, _repo
, ¬es_commit_oid
);
430 cl_assert(notes_commit
);
432 cl_git_fail_with(GIT_ENOTFOUND
, git_note_commit_read(¬e
, _repo
, notes_commit
, &oid
));
434 git_commit_free(notes_commit
);
438 * $ git ls-tree refs/notes/fanout
439 * 040000 tree 4b22b35d44b5a4f589edf3dc89196399771796ea 84
441 * $ git ls-tree 4b22b35
442 * 040000 tree d71aab4f9b04b45ce09bcaa636a9be6231474759 96
444 * $ git ls-tree d71aab4
445 * 100644 blob 08b041783f40edfe12bb406c9c9a8a040177c125 071c1b46c854b31185ea97743be6a8774479
447 void test_notes_notes__can_insert_a_note_in_an_existing_fanout(void)
450 git_oid note_oid
, target_oid
;
453 cl_git_pass(git_oid_fromstr(&target_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
455 for (i
= 0; i
< MESSAGES_COUNT
; i
++) {
456 cl_git_pass(git_note_create(¬e_oid
, _repo
, "refs/notes/fanout", _sig
, _sig
, &target_oid
, messages
[i
], 0));
457 cl_git_pass(git_note_read(&_note
, _repo
, "refs/notes/fanout", &target_oid
));
458 git_note_free(_note
);
460 git_oid_cpy(&target_oid
, ¬e_oid
);
465 * $ git notes --ref fanout list 8496071c1b46c854b31185ea97743be6a8774479
466 * 08b041783f40edfe12bb406c9c9a8a040177c125
468 void test_notes_notes__can_read_a_note_in_an_existing_fanout(void)
470 git_oid note_oid
, target_oid
;
473 cl_git_pass(git_oid_fromstr(&target_oid
, "8496071c1b46c854b31185ea97743be6a8774479"));
474 cl_git_pass(git_note_read(¬e
, _repo
, "refs/notes/fanout", &target_oid
));
476 cl_git_pass(git_oid_fromstr(¬e_oid
, "08b041783f40edfe12bb406c9c9a8a040177c125"));
477 cl_assert_equal_oid(git_note_id(note
), ¬e_oid
);
482 /* Can remove a note */
483 void test_notes_notes__can_remove_a_note(void)
485 git_oid note_oid
, target_oid
;
488 create_note(¬e_oid
, "refs/notes/i-can-see-dead-notes", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", "I decorate 4a20\n");
490 cl_git_pass(git_oid_fromstr(&target_oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
491 cl_git_pass(git_note_remove(_repo
, "refs/notes/i-can-see-dead-notes", _sig
, _sig
, &target_oid
));
493 cl_git_fail(git_note_read(¬e
, _repo
, "refs/notes/i-can-see-dead-notes", &target_oid
));
496 /* Can remove a note from a commit */
497 void test_notes_notes__can_remove_a_note_from_commit(void)
499 git_oid oid
, notes_commit_oid
;
500 git_note
*note
= NULL
;
501 git_commit
*existing_notes_commit
;
504 cl_git_pass(git_oid_fromstr(&oid
, "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"));
506 cl_git_pass(git_note_commit_create(¬es_commit_oid
, NULL
, _repo
, NULL
, _sig
, _sig
, &oid
, "I decorate 4a20\n", 0));
508 cl_git_pass(git_commit_lookup(&existing_notes_commit
, _repo
, ¬es_commit_oid
));
510 cl_assert(existing_notes_commit
);
512 cl_git_pass(git_note_commit_remove(¬es_commit_oid
, _repo
, existing_notes_commit
, _sig
, _sig
, &oid
));
514 /* remove_from_commit will not update any ref,
515 * so we must manually create the ref, that points to the commit */
516 cl_git_pass(git_reference_create(&ref
, _repo
, "refs/notes/i-can-see-dead-notes", ¬es_commit_oid
, 0, NULL
));
518 cl_git_fail(git_note_read(¬e
, _repo
, "refs/notes/i-can-see-dead-notes", &oid
));
520 git_commit_free(existing_notes_commit
);
521 git_reference_free(ref
);
526 void test_notes_notes__can_remove_a_note_in_an_existing_fanout(void)
531 cl_git_pass(git_oid_fromstr(&target_oid
, "8496071c1b46c854b31185ea97743be6a8774479"));
532 cl_git_pass(git_note_remove(_repo
, "refs/notes/fanout", _sig
, _sig
, &target_oid
));
534 cl_git_fail(git_note_read(¬e
, _repo
, "refs/notes/fanout", &target_oid
));
537 void test_notes_notes__removing_a_note_which_doesnt_exists_returns_ENOTFOUND(void)
542 cl_git_pass(git_oid_fromstr(&target_oid
, "8496071c1b46c854b31185ea97743be6a8774479"));
543 cl_git_pass(git_note_remove(_repo
, "refs/notes/fanout", _sig
, _sig
, &target_oid
));
545 error
= git_note_remove(_repo
, "refs/notes/fanout", _sig
, _sig
, &target_oid
);
547 cl_assert_equal_i(GIT_ENOTFOUND
, error
);
550 void test_notes_notes__can_iterate_default_namespace(void)
552 git_note_iterator
*iter
;
554 git_oid note_id
, annotated_id
;
555 git_oid note_created
[2];
556 const char* note_message
[] = {
562 create_note(¬e_created
[0], "refs/notes/commits",
563 "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message
[0]);
564 create_note(¬e_created
[1], "refs/notes/commits",
565 "c47800c7266a2be04c571c04d5a6614691ea99bd", note_message
[1]);
567 cl_git_pass(git_note_iterator_new(&iter
, _repo
, NULL
));
569 for (i
= 0; (err
= git_note_next(¬e_id
, &annotated_id
, iter
)) >= 0; ++i
) {
570 cl_git_pass(git_note_read(¬e
, _repo
, NULL
, &annotated_id
));
571 cl_assert_equal_s(git_note_message(note
), note_message
[i
]);
575 cl_assert_equal_i(GIT_ITEROVER
, err
);
576 cl_assert_equal_i(2, i
);
577 git_note_iterator_free(iter
);
580 void test_notes_notes__can_iterate_custom_namespace(void)
582 git_note_iterator
*iter
;
584 git_oid note_id
, annotated_id
;
585 git_oid note_created
[2];
586 const char* note_message
[] = {
592 create_note(¬e_created
[0], "refs/notes/beer",
593 "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", note_message
[0]);
594 create_note(¬e_created
[1], "refs/notes/beer",
595 "c47800c7266a2be04c571c04d5a6614691ea99bd", note_message
[1]);
597 cl_git_pass(git_note_iterator_new(&iter
, _repo
, "refs/notes/beer"));
599 for (i
= 0; (err
= git_note_next(¬e_id
, &annotated_id
, iter
)) >= 0; ++i
) {
600 cl_git_pass(git_note_read(¬e
, _repo
, "refs/notes/beer", &annotated_id
));
601 cl_assert_equal_s(git_note_message(note
), note_message
[i
]);
605 cl_assert_equal_i(GIT_ITEROVER
, err
);
606 cl_assert_equal_i(2, i
);
607 git_note_iterator_free(iter
);
610 void test_notes_notes__empty_iterate(void)
612 git_note_iterator
*iter
;
614 cl_git_fail(git_note_iterator_new(&iter
, _repo
, "refs/notes/commits"));
617 void test_notes_notes__iterate_from_commit(void)
619 git_note_iterator
*iter
;
621 git_oid note_id
, annotated_id
;
623 git_oid notes_commit_oids
[2];
624 git_commit
*notes_commits
[2];
625 const char* note_message
[] = {
631 cl_git_pass(git_oid_fromstr(&(oids
[0]), "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"));
632 cl_git_pass(git_oid_fromstr(&(oids
[1]), "c47800c7266a2be04c571c04d5a6614691ea99bd"));
634 cl_git_pass(git_note_commit_create(¬es_commit_oids
[0], NULL
, _repo
, NULL
, _sig
, _sig
, &(oids
[0]), note_message
[0], 0));
636 git_commit_lookup(¬es_commits
[0], _repo
, ¬es_commit_oids
[0]);
637 cl_assert(notes_commits
[0]);
639 cl_git_pass(git_note_commit_create(¬es_commit_oids
[1], NULL
, _repo
, notes_commits
[0], _sig
, _sig
, &(oids
[1]), note_message
[1], 0));
641 git_commit_lookup(¬es_commits
[1], _repo
, ¬es_commit_oids
[1]);
642 cl_assert(notes_commits
[1]);
644 cl_git_pass(git_note_commit_iterator_new(&iter
, notes_commits
[1]));
646 for (i
= 0; (err
= git_note_next(¬e_id
, &annotated_id
, iter
)) >= 0; ++i
) {
647 cl_git_pass(git_note_commit_read(¬e
, _repo
, notes_commits
[1], &annotated_id
));
648 cl_assert_equal_s(git_note_message(note
), note_message
[i
]);
652 cl_assert_equal_i(GIT_ITEROVER
, err
);
653 cl_assert_equal_i(2, i
);
655 git_note_iterator_free(iter
);
656 git_commit_free(notes_commits
[0]);
657 git_commit_free(notes_commits
[1]);