public void Apply() { if (!_fullPath.StartsWithIgnoreCase(_rootDirectory)) { DeleteInsteadOfRename(); return; } var newDirectoryInfo = _fileSystem.GetDirectoryInfo(_fullPath); var newRelativePath = PathHelper.EnsureTrailingSlash(PathHelper.MakeRelative(_rootDirectory, _fullPath)); if (!newDirectoryInfo.Exists || !_fileSystemFilter.IsDirectoryAllowed(newRelativePath, newDirectoryInfo.Attributes)) { DeleteInsteadOfRename(); return; } var oldRelativePath = PathHelper.MakeRelative(_rootDirectory, _oldFullPath); if (_entries.ContainsDirectoryEntry(oldRelativePath)) { _entries.RenameDirectory(oldRelativePath, newRelativePath, _fileSystem.ToShortRelativePath(_fullPath, _rootDirectory)); } else { (new DirectoryCreated(_entries, _rootDirectory, _fileSystem, _fileSystemFilter, _fullPath)).Apply(); } }
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); } } } } }
public Delay50MsNoFiltering() { _fileSystem = Substitute.For<IFileSystem>(); var watchers = GetWatchersFromMsBuildFileSystemWatcher(_fileSystem); _fileSystemFilter = Substitute.For<IMsBuildFileSystemFilter>(); _fileSystemFilter.IsFileAllowed(Arg.Any<string>(), Arg.Any<FileAttributes>()).ReturnsForAnyArgs(true); _fileSystemFilter.IsDirectoryAllowed(Arg.Any<string>(), Arg.Any<FileAttributes>()).ReturnsForAnyArgs(true); _taskScheduler = new ControlledTaskScheduler(SynchronizationContext.Current); _fileSystemWatcher = new MsBuildFileSystemWatcher(ProjectDirectory, "*", 50, 50, _fileSystem, _fileSystemFilter, Substitute.For<IActionLog>(), _taskScheduler); _taskScheduler.Link(_fileSystemWatcher.SourceBlock, c => { _changeset = c; }); _fileSystemWatcher.Start(); _fileWatcher = watchers.FileWatcher; _directoryWatcher = watchers.DirectoryWatcher; _attributesWatcher = watchers.AttributesWatcher; }
public Delay50MsNoFiltering() { _fileSystem = Substitute.For <IFileSystem>(); var watchers = GetWatchersFromMsBuildFileSystemWatcher(_fileSystem); _fileSystemFilter = Substitute.For <IMsBuildFileSystemFilter>(); _fileSystemFilter.IsFileAllowed(Arg.Any <string>(), Arg.Any <FileAttributes>()).ReturnsForAnyArgs(true); _fileSystemFilter.IsDirectoryAllowed(Arg.Any <string>(), Arg.Any <FileAttributes>()).ReturnsForAnyArgs(true); _taskScheduler = new ControlledTaskScheduler(SynchronizationContext.Current); _fileSystemWatcher = new MsBuildFileSystemWatcher(ProjectDirectory, "*", 50, 50, _fileSystem, _fileSystemFilter, Substitute.For <IActionLog>(), _taskScheduler); _taskScheduler.Link(_fileSystemWatcher.SourceBlock, c => { _changeset = c; }); _fileSystemWatcher.Start(); _fileWatcher = watchers.FileWatcher; _directoryWatcher = watchers.DirectoryWatcher; _attributesWatcher = watchers.AttributesWatcher; }