mirror of
https://git.proxmox.com/git/libgit2
synced 2025-06-18 21:35:20 +00:00
add option to allow git note overwrite
This commit is contained in:
parent
853488eed4
commit
b60b4562fe
@ -76,6 +76,7 @@ GIT_EXTERN(const git_oid *) git_note_oid(const git_note *note);
|
|||||||
* defaults to "refs/notes/commits"
|
* defaults to "refs/notes/commits"
|
||||||
* @param oid OID of the git object to decorate
|
* @param oid OID of the git object to decorate
|
||||||
* @param note Content of the note to add for object oid
|
* @param note Content of the note to add for object oid
|
||||||
|
* @param force Overwrite existing note
|
||||||
*
|
*
|
||||||
* @return 0 or an error code
|
* @return 0 or an error code
|
||||||
*/
|
*/
|
||||||
@ -86,7 +87,8 @@ GIT_EXTERN(int) git_note_create(
|
|||||||
const git_signature *committer,
|
const git_signature *committer,
|
||||||
const char *notes_ref,
|
const char *notes_ref,
|
||||||
const git_oid *oid,
|
const git_oid *oid,
|
||||||
const char *note);
|
const char *note,
|
||||||
|
int force);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
11
src/notes.c
11
src/notes.c
@ -270,7 +270,8 @@ static int note_write(git_oid *out,
|
|||||||
const char *note,
|
const char *note,
|
||||||
git_tree *commit_tree,
|
git_tree *commit_tree,
|
||||||
const char *target,
|
const char *target,
|
||||||
git_commit **parents)
|
git_commit **parents,
|
||||||
|
int allow_note_overwrite)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
git_oid oid;
|
git_oid oid;
|
||||||
@ -283,7 +284,8 @@ static int note_write(git_oid *out,
|
|||||||
|
|
||||||
if ((error = manipulate_note_in_tree_r(
|
if ((error = manipulate_note_in_tree_r(
|
||||||
&tree, repo, commit_tree, &oid, target, 0,
|
&tree, repo, commit_tree, &oid, target, 0,
|
||||||
insert_note_in_tree_eexists_cb, insert_note_in_tree_enotfound_cb)) < 0)
|
allow_note_overwrite ? insert_note_in_tree_enotfound_cb : insert_note_in_tree_eexists_cb,
|
||||||
|
insert_note_in_tree_enotfound_cb)) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (out)
|
if (out)
|
||||||
@ -449,7 +451,8 @@ int git_note_create(
|
|||||||
const git_signature *committer,
|
const git_signature *committer,
|
||||||
const char *notes_ref,
|
const char *notes_ref,
|
||||||
const git_oid *oid,
|
const git_oid *oid,
|
||||||
const char *note)
|
const char *note,
|
||||||
|
int allow_note_overwrite)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
char *target = NULL;
|
char *target = NULL;
|
||||||
@ -465,7 +468,7 @@ int git_note_create(
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
error = note_write(out, repo, author, committer, notes_ref,
|
error = note_write(out, repo, author, committer, notes_ref,
|
||||||
note, tree, target, &commit);
|
note, tree, target, &commit, allow_note_overwrite);
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
git__free(target);
|
git__free(target);
|
||||||
|
@ -34,7 +34,7 @@ static void create_note(git_oid *note_oid, const char *canonical_namespace, cons
|
|||||||
git_oid oid;
|
git_oid oid;
|
||||||
|
|
||||||
cl_git_pass(git_oid_fromstr(&oid, target_sha));
|
cl_git_pass(git_oid_fromstr(&oid, target_sha));
|
||||||
cl_git_pass(git_note_create(note_oid, _repo, _sig, _sig, canonical_namespace, &oid, message));
|
cl_git_pass(git_note_create(note_oid, _repo, _sig, _sig, canonical_namespace, &oid, message, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
@ -194,16 +194,40 @@ void test_notes_notes__creating_a_note_on_a_target_which_already_has_one_returns
|
|||||||
cl_git_pass(git_oid_fromstr(&target_oid, "08b041783f40edfe12bb406c9c9a8a040177c125"));
|
cl_git_pass(git_oid_fromstr(&target_oid, "08b041783f40edfe12bb406c9c9a8a040177c125"));
|
||||||
|
|
||||||
create_note(¬e_oid, NULL, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
|
create_note(¬e_oid, NULL, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
|
||||||
error = git_note_create(¬e_oid, _repo, _sig, _sig, NULL, &target_oid, "hello world\n");
|
error = git_note_create(¬e_oid, _repo, _sig, _sig, NULL, &target_oid, "hello world\n", 0);
|
||||||
cl_git_fail(error);
|
cl_git_fail(error);
|
||||||
cl_assert_equal_i(GIT_EEXISTS, error);
|
cl_assert_equal_i(GIT_EEXISTS, error);
|
||||||
|
|
||||||
create_note(¬e_oid, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
|
create_note(¬e_oid, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello world\n");
|
||||||
error = git_note_create(¬e_oid, _repo, _sig, _sig, "refs/notes/some/namespace", &target_oid, "hello world\n");
|
error = git_note_create(¬e_oid, _repo, _sig, _sig, "refs/notes/some/namespace", &target_oid, "hello world\n", 0);
|
||||||
cl_git_fail(error);
|
cl_git_fail(error);
|
||||||
cl_assert_equal_i(GIT_EEXISTS, error);
|
cl_assert_equal_i(GIT_EEXISTS, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test_notes_notes__creating_a_note_on_a_target_can_overwrite_existing_note(void)
|
||||||
|
{
|
||||||
|
git_oid note_oid, target_oid;
|
||||||
|
git_note *note, *namespace_note;
|
||||||
|
|
||||||
|
cl_git_pass(git_oid_fromstr(&target_oid, "08b041783f40edfe12bb406c9c9a8a040177c125"));
|
||||||
|
|
||||||
|
create_note(¬e_oid, NULL, "08b041783f40edfe12bb406c9c9a8a040177c125", "hello old world\n");
|
||||||
|
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, NULL, &target_oid, "hello new world\n", 1));
|
||||||
|
|
||||||
|
cl_git_pass(git_note_read(¬e, _repo, NULL, &target_oid));
|
||||||
|
assert_note_equal(note, "hello new world\n", ¬e_oid);
|
||||||
|
|
||||||
|
create_note(¬e_oid, "refs/notes/some/namespace", "08b041783f40edfe12bb406c9c9a8a040177c125", "hello old world\n");
|
||||||
|
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, "refs/notes/some/namespace", &target_oid, "hello new ref world\n", 1));
|
||||||
|
|
||||||
|
cl_git_pass(git_note_read(&namespace_note, _repo, "refs/notes/some/namespace", &target_oid));
|
||||||
|
assert_note_equal(namespace_note, "hello new ref world\n", ¬e_oid);
|
||||||
|
|
||||||
|
git_note_free(note);
|
||||||
|
git_note_free(namespace_note);
|
||||||
|
}
|
||||||
|
|
||||||
static char *messages[] = {
|
static char *messages[] = {
|
||||||
"08c041783f40edfe12bb406c9c9a8a040177c125",
|
"08c041783f40edfe12bb406c9c9a8a040177c125",
|
||||||
"96c45fbe09ab7445fc7c60fd8d17f32494399343",
|
"96c45fbe09ab7445fc7c60fd8d17f32494399343",
|
||||||
@ -244,7 +268,7 @@ void test_notes_notes__can_insert_a_note_in_an_existing_fanout(void)
|
|||||||
cl_git_pass(git_oid_fromstr(&target_oid, "08b041783f40edfe12bb406c9c9a8a040177c125"));
|
cl_git_pass(git_oid_fromstr(&target_oid, "08b041783f40edfe12bb406c9c9a8a040177c125"));
|
||||||
|
|
||||||
for (i = 0; i < MESSAGES_COUNT; i++) {
|
for (i = 0; i < MESSAGES_COUNT; i++) {
|
||||||
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, "refs/notes/fanout", &target_oid, messages[i]));
|
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, "refs/notes/fanout", &target_oid, messages[i], 0));
|
||||||
cl_git_pass(git_note_read(&_note, _repo, "refs/notes/fanout", &target_oid));
|
cl_git_pass(git_note_read(&_note, _repo, "refs/notes/fanout", &target_oid));
|
||||||
git_note_free(_note);
|
git_note_free(_note);
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ void test_notes_notesref__config_corenotesref(void)
|
|||||||
|
|
||||||
cl_git_pass(git_config_set_string(_cfg, "core.notesRef", "refs/notes/mydefaultnotesref"));
|
cl_git_pass(git_config_set_string(_cfg, "core.notesRef", "refs/notes/mydefaultnotesref"));
|
||||||
|
|
||||||
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, NULL, &oid, "test123test\n"));
|
cl_git_pass(git_note_create(¬e_oid, _repo, _sig, _sig, NULL, &oid, "test123test\n", 0));
|
||||||
|
|
||||||
cl_git_pass(git_note_read(&_note, _repo, NULL, &oid));
|
cl_git_pass(git_note_read(&_note, _repo, NULL, &oid));
|
||||||
cl_assert(!strcmp(git_note_message(_note), "test123test\n"));
|
cl_assert(!strcmp(git_note_message(_note), "test123test\n"));
|
||||||
|
Loading…
Reference in New Issue
Block a user