From 10fd93da8ec6bb4edec0ad8aba041baf43af4707 Mon Sep 17 00:00:00 2001 From: Mert Akinc Date: Wed, 23 Jan 2019 13:29:52 -0600 Subject: [PATCH] DirectoryTidier should not attempt to delete a directory if a new file was added under it. --- src/GitTfs/Core/DirectoryTidier.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/GitTfs/Core/DirectoryTidier.cs b/src/GitTfs/Core/DirectoryTidier.cs index ecf5bb70..fa2b085d 100644 --- a/src/GitTfs/Core/DirectoryTidier.cs +++ b/src/GitTfs/Core/DirectoryTidier.cs @@ -46,6 +46,8 @@ namespace GitTfs.Core { if (fileAndOperation.Value == FileOperation.Remove) _filesInTfs.Remove(fileAndOperation.Key.ToLowerInvariant()); + else if (fileAndOperation.Value == FileOperation.Add || fileAndOperation.Value == FileOperation.RenameTo) + _filesInTfs.Add(fileAndOperation.Key.ToLowerInvariant()); } var deletedDirs = new List(); @@ -133,24 +135,16 @@ namespace GitTfs.Core private IEnumerable CalculateCandidateDirectories() { var directoriesWithRemovedFiles = new HashSet(StringComparer.InvariantCultureIgnoreCase); - var directoriesBlockedForRemoval = new HashSet(StringComparer.InvariantCultureIgnoreCase); - foreach (var fileAndOperation in _fileOperations) + foreach (var removedFilePath in _fileOperations.Where(x => x.Value == FileOperation.Remove).Select(x => x.Key)) { - var directory = GetDirectoryName(fileAndOperation.Key); - switch (fileAndOperation.Value) + var directory = GetDirectoryName(removedFilePath); + if (directory != null) { - case FileOperation.Remove: - directoriesWithRemovedFiles.Add(directory); - break; - default: - directoriesBlockedForRemoval.Add(directory); - break; + directoriesWithRemovedFiles.Add(directory); } } - directoriesBlockedForRemoval.Add(null); - directoriesWithRemovedFiles.ExceptWith(directoriesBlockedForRemoval); return directoriesWithRemovedFiles; } }