• Johan Herland's avatar
    Refactor notes concatenation into a flexible interface for combining notes · 73f464b5
    Johan Herland authored
    When adding a note to an object that already has an existing note, the
    current solution is to concatenate the contents of the two notes. However,
    the caller may instead wish to _overwrite_ the existing note with the new
    note, or maybe even _ignore_ the new note, and keep the existing one. There
    might also be other ways of combining notes that are only known to the
    caller.
    
    Therefore, instead of unconditionally concatenating notes, we let the caller
    specify how to combine notes, by passing in a pointer to a function for
    combining notes. The caller may choose to implement its own function for
    notes combining, but normally one of the following three conveniently
    supplied notes combination functions will be sufficient:
    
    - combine_notes_concatenate() combines the two notes by appending the
      contents of the new note to the contents of the existing note.
    
    - combine_notes_overwrite() replaces the existing note with the new note.
    
    - combine_notes_ignore() keeps the existing note, and ignores the new note.
    
    A combine_notes function can be passed to init_notes() to choose a default
    combine_notes function for that notes tree. If NULL is given, the notes tree
    falls back to combine_notes_concatenate() as the ultimate default.
    
    A combine_notes function can also be passed directly to add_note(), to
    control the notes combining behaviour for a note addition in particular.
    If NULL is passed, the combine_notes function registered for the given
    notes tree is used.
    Signed-off-by: default avatarJohan Herland <[email protected]>
    Signed-off-by: default avatarJunio C Hamano <[email protected]>
    73f464b5
notes.h 7.41 KB