Notes API: prune_notes(): Prune notes that belong to non-existing objects
commit00fbe63627b72c807e558643f0634e435137122f
authorJohan Herland <johan@herland.net>
Sat, 13 Feb 2010 21:28:27 +0000 (13 22:28 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 14 Feb 2010 03:36:14 +0000 (13 19:36 -0800)
treef3adebf65ff12fafffcd7a79d1deff3e88801850
parentb0032d1e06e4a53d908309fce6ad3c5f5a3559a3
Notes API: prune_notes(): Prune notes that belong to non-existing objects

When an object is made unreachable by Git, any notes that annotate that object
are not automagically made unreachable, since all notes are always trivially
reachable from a notes ref. In order to remove notes for non-existing objects,
we therefore need to add functionality for traversing the notes tree and
explicitly removing references to notes that annotate non-reachable objects.
Thus the notes objects themselves also become unreachable, and are removed
by a later garbage collect.

prune_notes() performs this traversal (by using for_each_note() internally),
and removes the notes in question from the notes tree.

Note that the effect of prune_notes() is not persistent unless a subsequent
call to write_notes_tree() is made.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
notes.c
notes.h