summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: dcf783a)
raw | patch | inline | side by side (parent: dcf783a)
author | Thomas Rast <trast@student.ethz.ch> | |
Fri, 12 Mar 2010 17:04:36 +0000 (18:04 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Sat, 13 Mar 2010 05:55:40 +0000 (21:55 -0800) |
Currently, the notes copying is a bit wasteful since it always creates
new trees, even if no notes were copied at all.
Teach add_note() and remove_note() to flag the affected notes tree as
changed ('dirty'). Then teach builtin/notes.c to use this knowledge
and avoid committing trees that weren't changed.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Acked-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
new trees, even if no notes were copied at all.
Teach add_note() and remove_note() to flag the affected notes tree as
changed ('dirty'). Then teach builtin/notes.c to use this knowledge
and avoid committing trees that weren't changed.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Acked-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-notes.c | patch | blob | history | |
notes.c | patch | blob | history | |
notes.h | patch | blob | history |
diff --git a/builtin-notes.c b/builtin-notes.c
index 2e45be9de7ba561f421e82516144ba6f182c5e99..e5046b98ed1bd086457562fd21d494259c765f45 100644 (file)
--- a/builtin-notes.c
+++ b/builtin-notes.c
t = &default_notes_tree;
if (!t->initialized || !t->ref || !*t->ref)
die("Cannot commit uninitialized/unreferenced notes tree");
+ if (!t->dirty)
+ return 0; /* don't have to commit an unchanged tree */
/* Prepare commit message and reflog message */
strbuf_addstr(&buf, "notes: "); /* commit message starts at index 7 */
index 2feeb7bb06ce5073d6813e447f13f1205e2d87c4..0261e7898a5ed6412f92a614818f75c53253b280 100644 (file)
--- a/notes.c
+++ b/notes.c
t->ref = notes_ref ? xstrdup(notes_ref) : NULL;
t->combine_notes = combine_notes;
t->initialized = 1;
+ t->dirty = 0;
if (flags & NOTES_INIT_EMPTY || !notes_ref ||
read_ref(notes_ref, object_sha1))
if (!t)
t = &default_notes_tree;
assert(t->initialized);
+ t->dirty = 1;
if (!combine_notes)
combine_notes = t->combine_notes;
l = (struct leaf_node *) xmalloc(sizeof(struct leaf_node));
if (!t)
t = &default_notes_tree;
assert(t->initialized);
+ t->dirty = 1;
hashcpy(l.key_sha1, object_sha1);
hashclr(l.val_sha1);
return note_tree_remove(t, t->root, 0, &l);