• Show log

    Commit

  • Hash : 83989d70
    Author : Edward Thomson
    Date : 2017-06-08T22:23:53

    checkout: cope with untracked files in directory deletion
    
    When deleting a directory during checkout, do not simply delete the
    directory, since there may be untracked files.  Instead, go into
    the iterator and examine each file.
    
    In the original code (the code with the faulty assumption), we look to
    see if there's an index entry beneath the directory that we want to
    remove.   Eg, it looks to see if we have a workdir entry foo and an
    index entry foo/bar.txt. If this is not the case, then the working
    directory must have precious files in that directory. This part is okay.
    The part that's not okay is if there is an index entry foo/bar.txt. It
    just blows away the whole damned directory.
    
    That's not cool.
    
    Instead, by simply pushing the directory itself onto the stack and
    iterating each entry, we will deal with the files one by one - whether
    they're in the index (and can be force removed) or not (and are
    precious).
    
    The original code was a bad optimization, assuming that we didn't need
    to git_iterator_advance_into if there was any index entry in the folder.
    That's wrong - we could have optimized this iff all folder entries are
    in the index.
    
    Instead, we need to simply dig into the directory and analyze its
    entries.