Skip to content
  • Thomas Gummerer's avatar
    split-index: don't write cache tree with null oid entries · 4bddd983
    Thomas Gummerer authored and Junio C Hamano's avatar Junio C Hamano committed
    In a96d3cc3
    
     ("cache-tree: reject entries with null sha1", 2017-04-21)
    we made sure that broken cache entries do not get propagated to new
    trees.  Part of that was making sure not to re-use an existing cache
    tree that includes a null oid.
    
    It did so by dropping the cache tree in 'do_write_index()' if one of
    the entries contains a null oid.  In split index mode however, there
    are two invocations to 'do_write_index()', one for the shared index
    and one for the split index.  The cache tree is only written once, to
    the split index.
    
    As we only loop through the elements that are effectively being
    written by the current invocation, that may not include the entry with
    a null oid in the split index (when it is already written to the
    shared index), where we write the cache tree.  Therefore in split
    index mode we may still end up writing the cache tree, even though
    there is an entry with a null oid in the index.
    
    Fix this by checking for null oids in prepare_to_write_split_index,
    where we loop the entries of the shared index as well as the entries for
    the split index.
    
    This fixes t7009 with GIT_TEST_SPLIT_INDEX.  Also add a new test that's
    more specifically showing the problem.
    
    Signed-off-by: default avatarThomas Gummerer <t.gummerer@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    4bddd983