mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-17 15:02:34 +02:00
Fixed recursion issue when emptying recycle bin
This commit is contained in:
parent
83679214b3
commit
e8e852100c
@ -213,6 +213,38 @@ public void GetParentFolder_should_remove_trailing_slash_before_getting_parent_f
|
|||||||
Subject.GetParentFolder(path).Should().Be(parent);
|
Subject.GetParentFolder(path).Should().Be(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void RemoveEmptySubfolders_should_remove_nested_empty_folder()
|
||||||
|
{
|
||||||
|
var mainDir = GetTempFilePath();
|
||||||
|
var subDir1 = Path.Combine(mainDir, "depth1");
|
||||||
|
var subDir2 = Path.Combine(subDir1, "depth2");
|
||||||
|
Directory.CreateDirectory(subDir2);
|
||||||
|
|
||||||
|
Subject.RemoveEmptySubfolders(mainDir);
|
||||||
|
|
||||||
|
Directory.Exists(mainDir).Should().Be(true);
|
||||||
|
Directory.Exists(subDir1).Should().Be(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void RemoveEmptySubfolders_should_not_remove_nested_nonempty_folder()
|
||||||
|
{
|
||||||
|
var mainDir = GetTempFilePath();
|
||||||
|
var subDir1 = Path.Combine(mainDir, "depth1");
|
||||||
|
var subDir2 = Path.Combine(subDir1, "depth2");
|
||||||
|
var file = Path.Combine(subDir1, "file1.txt");
|
||||||
|
Directory.CreateDirectory(subDir2);
|
||||||
|
File.WriteAllText(file, "I should not be deleted");
|
||||||
|
|
||||||
|
Subject.RemoveEmptySubfolders(mainDir);
|
||||||
|
|
||||||
|
Directory.Exists(mainDir).Should().Be(true);
|
||||||
|
Directory.Exists(subDir1).Should().Be(true);
|
||||||
|
Directory.Exists(subDir2).Should().Be(false);
|
||||||
|
File.Exists(file).Should().Be(true);
|
||||||
|
}
|
||||||
|
|
||||||
private void DoHardLinkRename(FileShare fileShare)
|
private void DoHardLinkRename(FileShare fileShare)
|
||||||
{
|
{
|
||||||
var sourceDir = GetTempFilePath();
|
var sourceDir = GetTempFilePath();
|
||||||
|
@ -146,7 +146,7 @@ public bool FolderEmpty(string path)
|
|||||||
{
|
{
|
||||||
Ensure.That(path, () => path).IsValidPath();
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
|
||||||
return Directory.EnumerateDirectories(path).Empty();
|
return Directory.EnumerateFileSystemEntries(path).Empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string[] GetDirectories(string path)
|
public string[] GetDirectories(string path)
|
||||||
@ -526,14 +526,21 @@ public List<FileInfo> GetFileInfos(string path)
|
|||||||
|
|
||||||
public void RemoveEmptySubfolders(string path)
|
public void RemoveEmptySubfolders(string path)
|
||||||
{
|
{
|
||||||
var subfolders = GetDirectories(path);
|
// Depth first search for empty subdirectories
|
||||||
var files = GetFiles(path, SearchOption.AllDirectories);
|
foreach (var subdir in Directory.EnumerateDirectories(path))
|
||||||
|
|
||||||
foreach (var subfolder in subfolders)
|
|
||||||
{
|
{
|
||||||
if (files.None(f => subfolder.IsParentPath(f)))
|
RemoveEmptySubfolders(subdir);
|
||||||
|
|
||||||
|
if (Directory.EnumerateFileSystemEntries(subdir).Empty())
|
||||||
{
|
{
|
||||||
DeleteFolder(subfolder, false);
|
try
|
||||||
|
{
|
||||||
|
Directory.Delete(subdir, false);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Warn(ex, "Failed to remove empty directory {0}", subdir);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -206,14 +206,12 @@ private void RemoveEmptyMovieFolder(string path)
|
|||||||
{
|
{
|
||||||
if (_configService.DeleteEmptyFolders)
|
if (_configService.DeleteEmptyFolders)
|
||||||
{
|
{
|
||||||
if (_diskProvider.GetFiles(path, SearchOption.AllDirectories).Empty())
|
_diskProvider.RemoveEmptySubfolders(path);
|
||||||
|
|
||||||
|
if (_diskProvider.FolderEmpty(path))
|
||||||
{
|
{
|
||||||
_diskProvider.DeleteFolder(path, true);
|
_diskProvider.DeleteFolder(path, true);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
_diskProvider.RemoveEmptySubfolders(path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user