Skip to content
  • Junio C Hamano's avatar
    unpack-trees.c: prepare for looking ahead in the index · da165f47
    Junio C Hamano authored
    
    
    This prepares but does not yet implement a look-ahead in the index entries
    when traverse-trees.c decides to give us tree entries in an order that
    does not match what is in the index.
    
    A case where a look-ahead in the index is necessary happens when merging
    branch B into branch A while the index matches the current branch A, using
    a tree O as their common ancestor, and these three trees looks like this:
    
       O        A       B
       t                t
       t-i      t-i     t-i
       t-j      t-j
                t/1
                t/2
    
    The traverse_trees() function gets "t", "t-i" and "t" from trees O, A and
    B first, and notices that A may have a matching "t" behind "t-i" and "t-j"
    (indeed it does), and tells A to give that entry instead.  After unpacking
    blob "t" from tree B (as it hasn't changed since O in B and A removed it,
    it will result in its removal), it descends into directory "t/".
    
    The side that walked index in parallel to the tree traversal used to be
    implemented with one pointer, o->pos, that points at the next index entry
    to be processed.  When this happens, the pointer o->pos still points at
    "t-i" that is the first entry.  We should be able to skip "t-i" and "t-j"
    and locate "t/1" from the index while the recursive invocation of
    traverse_trees() walks and match entries found there, and later come back
    to process "t-i".
    
    While that look-ahead is not implemented yet, this adds a flag bit,
    CE_UNPACKED, to mark the entries in the index that has already been
    processed.  o->pos pointer has been renamed to o->cache_bottom and it
    points at the first entry that may still need to be processed.
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    da165f47