Skip to content
  • Jeff King's avatar
    checkout $tree: do not throw away unchanged index entries · c5326bd6
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    When we "git checkout $tree", we pull paths from $tree into
    the index, and then check the resulting entries out to the
    worktree. Our method for the first step is rather
    heavy-handed, though; it clobbers the entire existing index
    entry, even if the content is the same. This means we lose
    our stat information, leading checkout_entry to later
    rewrite the entire file with identical content.
    
    Instead, let's see if we have the identical entry already in
    the index, in which case we leave it in place. That lets
    checkout_entry do the right thing. Our tests cover two
    interesting cases:
    
      1. We make sure that a file which has no changes is not
         rewritten.
    
      2. We make sure that we do update a file that is unchanged
         in the index (versus $tree), but has working tree
         changes. We keep the old index entry, and
         checkout_entry is able to realize that our stat
         information is out of date.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    c5326bd6