diff options
author | Johan Herland <johan@herland.net> | 2010-02-13 22:28:27 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-02-13 19:36:14 -0800 |
commit | 00fbe63627b72c807e558643f0634e435137122f (patch) | |
tree | f3adebf65ff12fafffcd7a79d1deff3e88801850 /notes.h | |
parent | b0032d1e06e4a53d908309fce6ad3c5f5a3559a3 (diff) | |
download | git-00fbe63627b72c807e558643f0634e435137122f.tar.gz |
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>
Diffstat (limited to 'notes.h')
-rw-r--r-- | notes.h | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -162,6 +162,18 @@ int for_each_note(struct notes_tree *t, int flags, each_note_fn fn, int write_notes_tree(struct notes_tree *t, unsigned char *result); /* + * Remove all notes annotating non-existing objects from the given notes tree + * + * All notes in the given notes_tree that are associated with objects that no + * longer exist in the database, are removed from the notes tree. + * + * IMPORTANT: The changes made by prune_notes() to the given notes_tree + * structure are not persistent until a subsequent call to write_notes_tree() + * returns zero. + */ +void prune_notes(struct notes_tree *t); + +/* * Free (and de-initialize) the given notes_tree structure * * IMPORTANT: Changes made to the given notes_tree since the last, successful |