summaryrefslogtreecommitdiff
path: root/notes.c
diff options
context:
space:
mode:
authorThomas Rast <trast@student.ethz.ch>2010-03-12 18:04:36 +0100
committerJunio C Hamano <gitster@pobox.com>2010-03-12 21:55:40 -0800
commit7f710ea98262c7d81006c16c727796d9e6aeaa81 (patch)
treebe026f4db0cc4df1a9a972f8c0561b873abd1148 /notes.c
parentdcf783a26110ab99f2052e378ee76c3542a4b9e9 (diff)
downloadgit-7f710ea98262c7d81006c16c727796d9e6aeaa81.tar.gz
notes: track whether notes_trees were changed at all
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>
Diffstat (limited to 'notes.c')
-rw-r--r--notes.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/notes.c b/notes.c
index 2feeb7bb06..0261e7898a 100644
--- a/notes.c
+++ b/notes.c
@@ -933,6 +933,7 @@ void init_notes(struct notes_tree *t, const char *notes_ref,
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))
@@ -1011,6 +1012,7 @@ void add_note(struct notes_tree *t, const unsigned char *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));
@@ -1026,6 +1028,7 @@ void remove_note(struct notes_tree *t, const unsigned char *object_sha1)
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);