1. 14 Jun, 2017 4 commits
  2. 13 Jun, 2017 12 commits
  3. 12 Jun, 2017 15 commits
  4. 11 Jun, 2017 6 commits
  5. 10 Jun, 2017 3 commits
    • git_futils_rmdir: only allow `EBUSY` when asked · 4a0df574
      Only ignore `EBUSY` from `rmdir` when the `GIT_RMDIR_SKIP_NONEMPTY` bit
      is set.
      Edward Thomson committed
    • checkout: cope with untracked files in directory deletion · 83989d70
      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.
      Edward Thomson committed
    • checkout: do not delete directories with untracked entries · 0ef405b3
      If the `GIT_CHECKOUT_FORCE` flag is given to any of the `git_checkout`
      invocations, we remove files which were previously staged. But while
      doing so, we unfortunately also remove unstaged files in a directory
      which contains at least one staged file, resulting in potential data
      loss.
      
      This commit adds two tests to verify behavior.
      Patrick Steinhardt committed