summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin-notes.c2
-rw-r--r--notes.c3
-rw-r--r--notes.h1
3 files changed, 6 insertions, 0 deletions
diff --git a/builtin-notes.c b/builtin-notes.c
index 2e45be9de7..e5046b98ed 100644
--- a/builtin-notes.c
+++ b/builtin-notes.c
@@ -249,6 +249,8 @@ int commit_notes(struct notes_tree *t, const char *msg)
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 */
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);
diff --git a/notes.h b/notes.h
index b7fafb448b..ee65bd1a24 100644
--- a/notes.h
+++ b/notes.h
@@ -40,6 +40,7 @@ extern struct notes_tree {
char *ref;
combine_notes_fn *combine_notes;
int initialized;
+ int dirty;
} default_notes_tree;
/*