#ifndef NOTES_H
#define NOTES_H

/*
 * Flags controlling behaviour of notes tree initialization
 *
 * Default behaviour is to initialize the notes tree from the tree object
 * specified by the given (or default) notes ref.
 */
#define NOTES_INIT_EMPTY 1

/*
 * Initialize internal notes tree structure with the notes tree at the given
 * ref. If given ref is NULL, the value of the $GIT_NOTES_REF environment
 * variable is used, and if that is missing, the default notes ref is used
 * ("refs/notes/commits").
 *
 * If you need to re-intialize the internal notes tree structure (e.g. loading
 * from a different notes ref), please first de-initialize the current notes
 * tree by calling free_notes().
 */
void init_notes(const char *notes_ref, int flags);

/* Add the given note object to the internal notes tree structure */
void add_note(const unsigned char *object_sha1,
		const unsigned char *note_sha1);

/* Remove the given note object from the internal notes tree structure */
void remove_note(const unsigned char *object_sha1);

/*
 * Get the note object SHA1 containing the note data for the given object
 *
 * Return NULL if the given object has no notes.
 */
const unsigned char *get_note(const unsigned char *object_sha1);

/* Free (and de-initialize) the internal notes tree structure */
void free_notes(void);

/* Flags controlling how notes are formatted */
#define NOTES_SHOW_HEADER 1
#define NOTES_INDENT 2

/*
 * Fill the given strbuf with the notes associated with the given object.
 *
 * If the internal notes structure is not initialized, it will be auto-
 * initialized to the default value (see documentation for init_notes() above).
 *
 * 'flags' is a bitwise combination of the above formatting flags.
 */
void format_note(const unsigned char *object_sha1, struct strbuf *sb,
		const char *output_encoding, int flags);

#endif
