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>
This commit is contained in:
committed by
Junio C Hamano
parent
b0032d1e06
commit
00fbe63627
12
notes.h
12
notes.h
@@ -161,6 +161,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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user