Teach notes code to properly preserve non-notes in the notes tree
authorJohan Herland <johan@herland.net>
Sat, 13 Feb 2010 21:28:23 +0000 (22:28 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 14 Feb 2010 03:36:13 +0000 (19:36 -0800)
commit851c2b3791f24e319c23331887d4b8150ca4d9ba
treef178c0cfacf7bbda0079d006da35a03dea9dfd12
parent048cdd4665efafde2902cb72376f2ca497254246
Teach notes code to properly preserve non-notes in the notes tree

The note tree structure allows for non-note entries to coexist with note
entries in a notes tree. Although we certainly expect there to be very
few non-notes in a notes tree, we should still support them to a certain
degree.

This patch teaches the notes code to preserve non-notes when updating the
notes tree with write_notes_tree(). Non-notes are not affected by fanout
restructuring.

For non-notes to be handled correctly, we can no longer allow subtree
entries that do not match the fanout structure produced by the notes code
itself. This means that fanouts like 4/36, 6/34, 8/32, 4/4/32, etc. are
no longer recognized as note subtrees; only 2-based fanouts are allowed
(2/38, 2/2/36, 2/2/2/34, etc.). Since the notes code has never at any point
_produced_ non-2-based fanouts, it is highly unlikely that this change will
cause problems for anyone.

The patch also adds some tests verifying the correct handling of non-notes
in a notes tree.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
notes.c
notes.h
t/t3303-notes-subtrees.sh
t/t3304-notes-mixed.sh