mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-19 13:10:13 -07:00
Fixed: Directory not empty exception deleting nested empty subdirs (#974)
This commit is contained in:
parent
31cb5fe523
commit
254a8ce64c
2 changed files with 25 additions and 2 deletions
|
@ -122,6 +122,21 @@ namespace NzbDrone.Common.Test.DiskTests
|
||||||
Directory.Exists(sourceDir).Should().BeFalse();
|
Directory.Exists(sourceDir).Should().BeFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_be_able_to_delete_nested_empty_subdirs()
|
||||||
|
{
|
||||||
|
var artistDir = Path.Combine(GetTempFilePath(), "Artist");
|
||||||
|
var albumDir = Path.Combine(artistDir, "Album");
|
||||||
|
|
||||||
|
Directory.CreateDirectory(Path.Combine(albumDir));
|
||||||
|
Directory.CreateDirectory(Path.Combine(albumDir, "Album"));
|
||||||
|
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD1"));
|
||||||
|
Directory.CreateDirectory(Path.Combine(albumDir, "Album", "CD2"));
|
||||||
|
|
||||||
|
Subject.RemoveEmptySubfolders(artistDir);
|
||||||
|
Directory.Exists(albumDir).Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void empty_folder_should_return_folder_modified_date()
|
public void empty_folder_should_return_folder_modified_date()
|
||||||
{
|
{
|
||||||
|
|
|
@ -154,6 +154,13 @@ namespace NzbDrone.Common.Disk
|
||||||
return _fileSystem.Directory.GetDirectories(path);
|
return _fileSystem.Directory.GetDirectories(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string[] GetDirectories(string path, SearchOption searchOption)
|
||||||
|
{
|
||||||
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
|
||||||
|
return _fileSystem.Directory.GetDirectories(path, "*", searchOption);
|
||||||
|
}
|
||||||
|
|
||||||
public string[] GetFiles(string path, SearchOption searchOption)
|
public string[] GetFiles(string path, SearchOption searchOption)
|
||||||
{
|
{
|
||||||
Ensure.That(path, () => path).IsValidPath();
|
Ensure.That(path, () => path).IsValidPath();
|
||||||
|
@ -500,10 +507,11 @@ namespace NzbDrone.Common.Disk
|
||||||
|
|
||||||
public void RemoveEmptySubfolders(string path)
|
public void RemoveEmptySubfolders(string path)
|
||||||
{
|
{
|
||||||
var subfolders = GetDirectories(path);
|
var subfolders = GetDirectories(path, SearchOption.AllDirectories);
|
||||||
var files = GetFiles(path, SearchOption.AllDirectories);
|
var files = GetFiles(path, SearchOption.AllDirectories);
|
||||||
|
|
||||||
foreach (var subfolder in subfolders)
|
// By sorting by length descending we ensure we always delete children before parents
|
||||||
|
foreach (var subfolder in subfolders.OrderByDescending(x => x.Length))
|
||||||
{
|
{
|
||||||
if (files.None(f => subfolder.IsParentPath(f)))
|
if (files.None(f => subfolder.IsParentPath(f)))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue