notes: Don't create (empty) commit when removing non-existing notes

Extend remove_note() in the notes API to return whether or not a note was
actually removed. Use this in 'git notes remove' to skip the creation of
a notes commit when no notes were actually removed.

Also add a test illustrating the change in behavior.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johan Herland
2010-08-31 17:56:50 +02:00
committed by Junio C Hamano
parent d8a9480384
commit 1ee1e43df3
4 changed files with 30 additions and 9 deletions

View File

@ -769,6 +769,7 @@ static int remove_cmd(int argc, const char **argv, const char *prefix)
const char *object_ref;
struct notes_tree *t;
unsigned char object[20];
int retval;
argc = parse_options(argc, argv, prefix, options,
git_notes_remove_usage, 0);
@ -785,12 +786,17 @@ static int remove_cmd(int argc, const char **argv, const char *prefix)
t = init_notes_check("remove");
fprintf(stderr, "Removing note for object %s\n", sha1_to_hex(object));
remove_note(t, object);
retval = remove_note(t, object);
if (retval)
fprintf(stderr, "Object %s has no note\n", sha1_to_hex(object));
else {
fprintf(stderr, "Removing note for object %s\n",
sha1_to_hex(object));
commit_notes(t, "Notes removed by 'git notes remove'");
commit_notes(t, "Notes removed by 'git notes remove'");
}
free_notes(t);
return 0;
return retval;
}
static int prune(int argc, const char **argv, const char *prefix)