While putzing around in the notes code quite some time ago, I found this comment: /* * Determine full path for this non-note entry: * The filename is already found in entry.path, but the * directory part of the path must be deduced from the subtree * containing this entry. We assume here that the overall notes * tree follows a strict byte-based progressive fanout * structure (i.e. using 2/38, 2/2/36, etc. fanouts, and not * e.g. 4/36 fanout). This means that if a non-note is found at * path "dead/beef", the following code will register it as * being found on "de/ad/beef". * On the other hand, if you use such non-obvious non-note * paths in the middle of a notes tree, you deserve what's * coming to you ;). Note that for non-notes that are not * SHA1-like at the top level, there will be no problems. * * To conclude, it is strongly advised to make sure non-notes * have at least one non-hex character in the top-level path * component. */ This was enough of a nerd snipe to get me to dig into the code. It turns out that the comment is incorrect, but there was nevertheless plenty that could be cleaned up in the area: * Make macro `GIT_NIBBLE` safer by adding some parentheses * Remove some dead code * Fix some memory leaks * Fix some obsolete and incorrect comments * Reject "notes" that are not blobs I hope the result is also easier to understand. This branch is also available from my Git fork [1] as branch `load-subtree-cleanup`. Michael [1] https://github.com/mhagger/git Michael Haggerty (12): notes: make GET_NIBBLE macro more robust load_subtree(): remove unnecessary conditional load_subtree(): reduce the scope of some local variables load_subtree(): fix incorrect comment load_subtree(): separate logic for internal vs. terminal entries load_subtree(): check earlier whether an internal node is a tree entry load_subtree(): only consider blobs to be potential notes get_oid_hex_segment(): return 0 on success load_subtree(): combine some common code get_oid_hex_segment(): don't pad the rest of `oid` hex_to_bytes(): simpler replacement for `get_oid_hex_segment()` load_subtree(): declare some variables to be `size_t` notes.c | 136 +++++++++++++++++++++++++++++++--------------------------------- 1 file changed, 66 insertions(+), 70 deletions(-) -- 2.11.0