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

Re: [PATCHv11 20/20] builtin-gc: Teach the new --notes option to garbage-collect notes

From
Johan Herland <johan@herland.net>
Date
Jan 27, 2010, 12:02 UTC
Message-ID
<201001271302.17368.johan@herland.net>
In-Reply-To
<7vtyufp6r9.fsf@alter.siamese.dyndns.org>
On Thursday 21 January 2010, Junio C Hamano wrote:
Show 17 quoted lines
> Stephen Boyd <bebarino@gmail.com> writes:
> > On Sun, Jan 17, 2010 at 1:04 PM, Johan Herland wrote:
> >> The new --notes option triggers a call to gc_notes(), which removes
> >> note objects that reference non-existing objects.
> >
> > Shouldn't notes be unconditionally garbage collected? Or maybe there's
> > a reason why notes should be treated differently that isn't written
> > here.
> 
> A few thoughts, inspired by this patch, but on other things around
> "notes":
> 
>  - This is more about pruning notes regarding objects that are no longer
>    availabe from _the tip_ of the notes tree.  It doesn't run (and I am
>    not suggesting to make it it to run) filter-branch to eradicate all
>    such stale notes from the notes commit ancestry, so in that sense this
>    is not really a garbage collection.
I've removed this patch from the next iteration of the series...
>  - We would want to have "notes prune" subcommand that lets us do the
>    pruning without all the other "gc" operation.  "git gc" would of
>  course call the same underlying code "notes prune" would use if we want
>  to be able to trigger "notes prune" from it.
...and replaced it with "git notes prune".
Show 11 quoted lines
>  - Because there is no public interface to list objects that are
>  annotated with the most recent notes tree, the only thing this pruning
>  affects is the look-up overhead of "log --show-notes".  As such, it
>  might be better to later add tree rebalancing in "notes prune" and at
>  that point, it will become even less about garbage collection and more
>  about performance ("notes optimize?").
> 
>  - Do we want to have a public interface to list objects that are
>    annotated with notes?  "git notes" probably deserves a bit more
>    subcommands other than "(edit|show)" to help users, e.g. "list" and
>    "remove".
Added in the next iteration of the series.
>  - If this were "notes optimize" (this is just me thinking aloud),
>  perhaps we would want to do this at some key places (e.g. when you
>    automatically rebalance the tree).

There is currently no explicit rebalancing of the tree. The only thing "git notes prune" does, is call remove_note() for all notes referencing unreachable objects. Instead the tree is always kept in "balance" by remove_note() calling note_tree_consolidate() for the part of the tree affected by the removed note.

...Johan
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Junio C Hamano
Message 26 of 26 in “[PATCHv11 00/20] git notes”
  1. Johan HerlandJan 17, 2010
  2. 01/20 Minor non-functional fixes to notes.cJohan Herland, Jan 17, 2010
  3. 02/20 Notes API: get_commit_notes() -> format_note() + remove the commit restrictionJohan Herland, Jan 17, 2010
  4. 03/20 Add tests for checking correct handling of $GIT_NOTES_REF and core.notesRefJohan Herland, Jan 17, 2010
  5. 04/20 Notes API: init_notes(): Initialize the notes tree from the given notes refJohan Herland, Jan 17, 2010
  6. 05/20 Notes API: add_note(): Add note objects to the internal notes tree structureJohan Herland, Jan 17, 2010
  7. 06/20 Notes API: remove_note(): Remove note objects from the notes tree structureJohan Herland, Jan 17, 2010
  8. 07/20 Notes API: get_note(): Return the note annotating the given objectJohan Herland, Jan 17, 2010
  9. 08/20 Notes API: for_each_note(): Traverse the entire notes tree with a callbackJohan Herland, Jan 17, 2010
  10. 09/20 Notes API: write_notes_tree(): Store the notes tree in the databaseJohan Herland, Jan 17, 2010
  11. 10/20 Notes API: Allow multiple concurrent notes trees with new struct notes_treeJohan Herland, Jan 17, 2010
  12. 11/20 Refactor notes concatenation into a flexible interface for combining notesJohan Herland, Jan 17, 2010
  13. 12/20 Builtin-ify git-notesJohan Herland, Jan 17, 2010
  14. Stephen BoydJan 21, 2010
  15. Johan HerlandJan 26, 2010
  16. 13/20 t3301: Verify successful annotation of non-commitsJohan Herland, Jan 17, 2010
  17. 14/20 t3305: Verify that adding many notes with git-notes triggers increased fanoutJohan Herland, Jan 17, 2010
  18. 15/20 Teach notes code to properly preserve non-notes in the notes treeJohan Herland, Jan 17, 2010
  19. 16/20 Teach builtin-notes to remove empty notesJohan Herland, Jan 17, 2010
  20. 17/20 builtin-notes: Teach -d option for deleting existing notesJohan Herland, Jan 17, 2010
  21. 18/20 t3305: Verify that removing notes triggers automatic fanout consolidationJohan Herland, Jan 17, 2010
  22. 19/20 Notes API: gc_notes(): Prune notes that belong to non-existing objectsJohan Herland, Jan 17, 2010
  23. 20/20 builtin-gc: Teach the new --notes option to garbage-collect notesJohan Herland, Jan 17, 2010
  24. Stephen BoydJan 21, 2010
  25. Junio C HamanoJan 21, 2010
  26. Johan HerlandJan 27, 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.