in Core/src/Impl/Commands/StorageManager.cs [418:459]
private async Task<long> ValidateAndDeleteUnreachableAsync(ILogger logger, PathTree tree, ValidateMode mode)
{
logger.Info(mode == ValidateMode.Delete
? $"[{DateTime.Now:s}] Delete unreachable files{myId}..."
: $"[{DateTime.Now:s}] Validating unreachable files{myId}...");
long deleted = 0;
var stack = new Stack<PathTreeNode>();
stack.Push(tree.Root);
while (stack.Count > 0)
{
var node = stack.Pop();
if (node.HasChildren)
{
foreach (var child in node.GetChildren())
stack.Push(child);
}
if (!node.HasReferences)
{
foreach (var file in node.GetFiles())
{
if (mode == ValidateMode.Delete)
{
logger.Info($" Deleting {file}");
Interlocked.Increment(ref deleted);
await myStorage.DeleteAsync(file);
}
else
{
logger.Error($"The file {file} should be deleted as unreferenced");
if (mode == ValidateMode.Fix)
{
logger.Fix($"The file {file} will be deleted as unreferenced");
await myStorage.DeleteAsync(file);
}
}
}
}
}
return deleted;
}