git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v6 12/13] notes: track whether notes_trees were changed at all

From
Thomas Rast <trast@student.ethz.ch>
Date
Mar 10, 2010, 14:05 UTC
Message-ID
<f4ef87cbd1f0bb98d8c8d2cc7dd6d3e417ec2875.1268229087.git.trast@student.ethz.ch>
In-Reply-To
<cover.1268229087.git.trast@student.ethz.ch>

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>
---
New in this iteration
 builtin/notes.c |    2 ++
 notes.c         |    3 +++
 notes.h         |    1 +
 3 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/builtin/notes.c b/builtin/notes.c
index cb30ad0..4543d11 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -240,6 +240,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 b1b15e9..ffda597 100644
--- a/notes.c
+++ b/notes.c
@@ -926,6 +926,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))
@@ -1014,6 +1015,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));
@@ -1029,6 +1031,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 e1868d8..ee5d47b 100644
--- a/notes.h
+++ b/notes.h
@@ -40,6 +40,7 @@
 	char *ref;
 	combine_notes_fn *combine_notes;
 	int initialized;
+	int dirty;
 } default_notes_tree;
 
 /*
-- 
1.7.0.2.407.g21ebda
Previous: Johan HerlandNext: Johan Herland
Message 58 of 66 in “several notes refs, post-rewrite, notes rewriting”
  1. 00/12 several notes refs, post-rewrite, notes rewritingThomas Rast, Feb 20, 2010
  2. 01/12 Support showing notes from more than one notes treeThomas Rast, Feb 20, 2010
  3. Junio C HamanoFeb 21, 2010
  4. 02/12 Documentation: document post-rewrite hookThomas Rast, Feb 20, 2010
  5. 03/12 commit --amend: invoke post-rewrite hookThomas Rast, Feb 20, 2010
  6. Junio C HamanoFeb 21, 2010
  7. 04/12 rebase: invoke post-rewrite hookThomas Rast, Feb 20, 2010
  8. 05/12 rebase -i: invoke post-rewrite hookThomas Rast, Feb 20, 2010
  9. 06/12 notes: implement 'git notes copy --stdin'Thomas Rast, Feb 20, 2010
  10. Junio C HamanoFeb 21, 2010
  11. 07/12 notes: implement helpers needed for note copying during rewriteThomas Rast, Feb 20, 2010
  12. Junio C HamanoFeb 21, 2010
  13. 08/12 rebase: support automatic notes copyingThomas Rast, Feb 20, 2010
  14. 09/12 commit --amend: copy notes to the new commitThomas Rast, Feb 20, 2010
  15. 10/12 filter-branch: invoke post-rewrite hookThomas Rast, Feb 20, 2010
  16. 11/12 filter-branch: learn how to filter notesThomas Rast, Feb 20, 2010
  17. 12/12 notes: add shorthand --ref to override GIT_NOTES_REFThomas Rast, Feb 20, 2010
  18. Junio C HamanoFeb 21, 2010
  19. Thomas RastFeb 21, 2010
  20. Junio C HamanoFeb 22, 2010
  21. 00/11 several notes refs, post-rewrite, notes rewritingThomas Rast, Feb 23, 2010
  22. 01/11 test-lib: unset GIT_NOTES_REF to stop it from influencing testsThomas Rast, Feb 23, 2010
  23. 02/11 Support showing notes from more than one notes treeThomas Rast, Feb 23, 2010
  24. Junio C HamanoFeb 23, 2010
  25. Thomas RastFeb 23, 2010
  26. format-patch: learn to fill comment section of email from notesThomas Rast, Feb 23, 2010
  27. BROKEN -- format-patch: learn to fill comment section of email from notesThomas Rast, Feb 23, 2010
  28. Thomas RastFeb 23, 2010
  29. Stephen BoydFeb 24, 2010
  30. Junio C HamanoFeb 23, 2010
  31. Thomas RastMar 10, 2010
  32. 03/11 Documentation: document post-rewrite hookThomas Rast, Feb 23, 2010
  33. 04/11 commit --amend: invoke post-rewrite hookThomas Rast, Feb 23, 2010
  34. 05/11 rebase: invoke post-rewrite hookThomas Rast, Feb 23, 2010
  35. 06/11 rebase -i: invoke post-rewrite hookThomas Rast, Feb 23, 2010
  36. Junio C HamanoFeb 24, 2010
  37. 07/11 notes: implement 'git notes copy --stdin'Thomas Rast, Feb 23, 2010
  38. 08/11 notes: implement helpers needed for note copying during rewriteThomas Rast, Feb 23, 2010
  39. 09/11 rebase: support automatic notes copyingThomas Rast, Feb 23, 2010
  40. Junio C HamanoFeb 25, 2010
  41. 00/13 several notes refs, post-rewrite, notes rewritingThomas Rast, Mar 10, 2010
  42. 01/13 test-lib: unset GIT_NOTES_REF to stop it from influencing testsThomas Rast, Mar 10, 2010
  43. Johan HerlandMar 11, 2010
  44. 02/13 Support showing notes from more than one notes treeThomas Rast, Mar 10, 2010
  45. Johan HerlandMar 11, 2010
  46. 03/13 Documentation: document post-rewrite hookThomas Rast, Mar 10, 2010
  47. 04/13 commit --amend: invoke post-rewrite hookThomas Rast, Mar 10, 2010
  48. 05/13 rebase: invoke post-rewrite hookThomas Rast, Mar 10, 2010
  49. 06/13 rebase -i: invoke post-rewrite hookThomas Rast, Mar 10, 2010
  50. 07/13 notes: implement 'git notes copy --stdin'Thomas Rast, Mar 10, 2010
  51. Johan HerlandMar 11, 2010
  52. 08/13 notes: implement helpers needed for note copying during rewriteThomas Rast, Mar 10, 2010
  53. Johan HerlandMar 11, 2010
  54. 09/13 rebase: support automatic notes copyingThomas Rast, Mar 10, 2010
  55. 10/13 commit --amend: copy notes to the new commitThomas Rast, Mar 10, 2010
  56. 11/13 notes: add shorthand --ref to override GIT_NOTES_REFThomas Rast, Mar 10, 2010
  57. Johan HerlandMar 11, 2010
  58. 12/13 notes: track whether notes_trees were changed at allThomas Rast, Mar 10, 2010
  59. Johan HerlandMar 11, 2010
  60. 13/13 git-notes(1): add a section about the meaning of historyThomas Rast, Mar 10, 2010
  61. Johan HerlandMar 11, 2010
  62. Junio C HamanoMar 10, 2010
  63. 10/11 commit --amend: copy notes to the new commitThomas Rast, Feb 23, 2010
  64. 11/11 notes: add shorthand --ref to override GIT_NOTES_REFThomas Rast, Feb 23, 2010
  65. Junio C HamanoFeb 23, 2010
  66. Thomas RastFeb 23, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.