Skip to content
  • Mike Hommey's avatar
    fast-import: properly fanout notes when tree is imported · 405d7f4a
    Mike Hommey authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    In typical uses of fast-import, trees are inherited from a parent
    commit. In that case, the tree_entry for the branch looks like:
    
      .versions[1].sha1 = $some_sha1
      .tree = <tree structure loaded from $some_sha1>
    
    However, when trees are imported, rather than inherited, that is not the
    case. One can import a tree with a filemodify command, replacing the
    root tree object.
    
    e.g.
      "M 040000 $some_sha1 \n"
    
    In this case, the tree_entry for the branch looks like:
    
      .versions[1].sha1 = $some_sha1
      .tree = NULL
    
    When adding new notes with the notemodify command, do_change_note_fanout
    is called to get a notes count, and to do so, it loops over the
    tree_entry->tree, but doesn't do anything when the tree is NULL.
    
    In the latter case above, it means do_change_note_fanout thinks the tree
    contains no notes, and new notes are added with no fanout.
    
    Interestingly, do_change_note_fanout does check whether subdirectories
    have a NULL .tree, in which case it uses load_tree(). Which means the
    right behaviour happens when using the filemodify command to import
    subdirectories.
    
    This change makes do_change_note_fanount call load_tree() whenever the
    tree_entry it is given has no tree loaded, making all cases handled
    equally.
    
    Signed-off-by: default avatarMike Hommey <mh@glandium.org>
    Reviewed-by: default avatarJohan Herland <johan@herland.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    405d7f4a