Currently, "git notes" behaves like "git commit --allow-empty" when committing notes trees. In particular, removing nonexisting notes leads to empty commits "commits with no diff". Change this to avoid unnecessary notes commits. Signed-off-by: Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> --- I can't believe there's no easier way to lookup the sha1 of a tree of a commit but I didn't find any, and I did not want to employ the diff machinery for diffing the trees when their sha1 is (should be) known. builtin/notes.c | 14 +++++++++----- 1 files changed, 9 insertions(+), 5 deletions(-) diff --git a/builtin/notes.c b/builtin/notes.c index fbc347c..48da228 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -303,11 +303,15 @@ int commit_notes(struct notes_tree *t, const char *msg) hashclr(prev_commit); parent = NULL; } - if (commit_tree(buf.buf + 7, tree_sha1, parent, new_commit, NULL)) - die("Failed to commit notes tree to database"); - - /* Update notes ref with new commit */ - update_ref(buf.buf, t->ref, new_commit, prev_commit, 0, DIE_ON_ERR); + if (!parent || parse_commit(parent->item) || parse_tree(parent->item->tree) || + hashcmp(parent->item->tree->object.sha1, tree_sha1)) { + /* avoid recommitting the same tree */ + if (commit_tree(buf.buf + 7, tree_sha1, parent, new_commit, NULL)) + die("Failed to commit notes tree to database"); + + /* Update notes ref with new commit */ + update_ref(buf.buf, t->ref, new_commit, prev_commit, 0, DIE_ON_ERR); + } strbuf_release(&buf); return 0; -- 1.7.2.2.398.g5af70 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html