public void Apply()
{
if (!_directoryFullPath.StartsWithIgnoreCase(_rootDirectory))
{
return;
}
Queue <string> directories = new Queue <string>();
directories.Enqueue(_directoryFullPath);
while (directories.Count > 0)
{
var directoryPath = directories.Dequeue();
var directory = _fileSystem.GetDirectoryInfo(directoryPath);
var relativeDirectoryPath = PathHelper.MakeRelative(_rootDirectory, directoryPath);
if (!directory.Exists)
{
continue;
}
// We don't want to add root directory
if (!string.IsNullOrEmpty(relativeDirectoryPath))
{
relativeDirectoryPath = PathHelper.EnsureTrailingSlash(relativeDirectoryPath);
// We don't add symlinks
if (directory.Attributes.HasFlag(FileAttributes.ReparsePoint))
{
continue;
}
if (!_fileSystemFilter.IsDirectoryAllowed(relativeDirectoryPath, directory.Attributes))
{
continue;
}
_entries.AddDirectory(relativeDirectoryPath);
}
foreach (var entry in directory.EnumerateFileSystemInfos())
{
if (entry is IDirectoryInfo)
{
directories.Enqueue(entry.FullName);
}
else
{
var relativeFilePath = PathHelper.MakeRelative(_rootDirectory, entry.FullName);
if (_fileSystemFilter.IsFileAllowed(relativeFilePath, entry.Attributes))
{
_entries.AddFile(relativeFilePath);
}
}
}
}
}