git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 00/12] Clean up notes-related code around `load_subtree()`

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Aug 26, 2017, 08:28 UTC
Message-ID
<cover.1503734566.git.mhagger@alum.mit.edu>

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
Next: Michael Haggerty
Message 1 of 23 in “Clean up notes-related code around `load_subtree()`”
  1. 00/12 Clean up notes-related code around `load_subtree()`Michael Haggerty, Aug 26, 2017
  2. 01/12 notes: make GET_NIBBLE macro more robustMichael Haggerty, Aug 26, 2017
  3. 03/12 load_subtree(): reduce the scope of some local variablesMichael Haggerty, Aug 26, 2017
  4. 04/12 load_subtree(): fix incorrect commentMichael Haggerty, Aug 26, 2017
  5. 06/12 load_subtree(): check earlier whether an internal node is a tree entryMichael Haggerty, Aug 26, 2017
  6. 08/12 get_oid_hex_segment(): return 0 on successMichael Haggerty, Aug 26, 2017
  7. 10/12 get_oid_hex_segment(): don't pad the rest of `oid`Michael Haggerty, Aug 26, 2017
  8. 11/12 hex_to_bytes(): simpler replacement for `get_oid_hex_segment()`Michael Haggerty, Aug 26, 2017
  9. 12/12 load_subtree(): declare some variables to be `size_t`Michael Haggerty, Aug 26, 2017
  10. 07/12 load_subtree(): only consider blobs to be potential notesMichael Haggerty, Aug 26, 2017
  11. 05/12 load_subtree(): separate logic for internal vs. terminal entriesMichael Haggerty, Aug 26, 2017
  12. 09/12 load_subtree(): combine some common codeMichael Haggerty, Aug 26, 2017
  13. 02/12 load_subtree(): remove unnecessary conditionalMichael Haggerty, Aug 26, 2017
  14. Junio C HamanoAug 26, 2017
  15. Michael HaggertyAug 27, 2017
  16. Michael HaggertyAug 28, 2017
  17. Junio C HamanoSep 1, 2017
  18. Johan HerlandAug 26, 2017
  19. Jeff KingSep 9, 2017
  20. Michael HaggertySep 10, 2017
  21. Jeff KingSep 10, 2017
  22. Michael HaggertySep 12, 2017
  23. Lars SchneiderSep 12, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.