public bool AddFileSystemNode(PowershellFileParser parser) { if (this.DocumentHierarchy.GetNode(parser.Path) != null || parser.Path == this.DocumentHierarchy.RootNode.Path) { return false; } INode lastDirNode = this.FillHierarchyWithIntermediateDirectories(parser.Path, parser.IsDirectory, parser.ErrorMessage); if (!parser.IsDirectory) { FileNode fileNode = this.DocumentHierarchy.CreateNewFileNode(parser.Path, parser.FileContents, lastDirNode, parser.ErrorMessage); if (parser.RootPowershellItem != null) { this.DocumentHierarchy.CreateNewPowershellItemNode(parser.Path, parser.RootPowershellItem, fileNode); var parent = fileNode.Parent; while (parent != null && parent is DirectoryNode) { if (parser.RootPowershellItem.ParsingErrors != null) { ((DirectoryNode)parent).AddFileError(fileNode.Name); } else { ((DirectoryNode)parent).RemoveFileError(fileNode.Name); } parent = parent.Parent; } } } return true; }
public bool AddFileSystemNode(PowershellFileParser parser) { if (this.DocumentHierarchy.GetNode(parser.Path) != null || parser.Path == this.DocumentHierarchy.RootNode.Path) { return(false); } INode lastDirNode = this.FillHierarchyWithIntermediateDirectories(parser.Path, parser.IsDirectory, parser.ErrorMessage); if (!parser.IsDirectory) { FileNode fileNode = this.DocumentHierarchy.CreateNewFileNode(parser.Path, parser.FileContents, lastDirNode, parser.ErrorMessage); if (parser.RootPowershellItem != null) { this.DocumentHierarchy.CreateNewPowershellItemNode(parser.Path, parser.RootPowershellItem, fileNode); var parent = fileNode.Parent; while (parent != null && parent is DirectoryNode) { if (parser.RootPowershellItem.ParsingErrors != null) { ((DirectoryNode)parent).AddFileError(fileNode.Name); } else { ((DirectoryNode)parent).RemoveFileError(fileNode.Name); } parent = parent.Parent; } } } return(true); }
private IEnumerable <PowershellFileParser> GetFilesInDirectory(string path, FilesPatternProvider filesPatternProvider) { IEnumerable <string> files = null; PowershellFileParser parser = null; try { files = Directory.GetFiles(path, filesPatternProvider.GetFilesPattern()).Where(f => filesPatternProvider.DoesFileMatch(f)); } catch (Exception e) { parser = new PowershellFileParser(path, isDirectory: true, errorMessage: e.Message); } if (parser != null) { yield return(parser); yield break; } foreach (string file in files) { parser = new PowershellFileParser(file, isDirectory: false); yield return(parser); } }
private IEnumerable <PowershellFileParser> GetFileList(string path, FilesPatternProvider filesPatternProvider, BackgroundIndexer worker) { PowershellFileParser parser = null; Queue <string> pathsToEnumerate = new Queue <string>(); if (File.Exists(path) && filesPatternProvider.DoesFileMatch(path)) { parser = new PowershellFileParser(path, isDirectory: false); yield return(parser); this.ReportProgress(worker, path); yield break; } if (!Directory.Exists(path) || !filesPatternProvider.DoesDirectoryMatch(path)) { yield break; } parser = new PowershellFileParser(path, isDirectory: true); yield return(parser); pathsToEnumerate.Enqueue(path); while (pathsToEnumerate.Any()) { IEnumerable <string> dirs = null; parser = null; string currentPath = pathsToEnumerate.Dequeue(); foreach (var file in this.GetFilesInDirectory(currentPath, filesPatternProvider)) { yield return(file); } try { dirs = Directory.EnumerateDirectories(currentPath).Where(dir => filesPatternProvider.DoesDirectoryMatch(dir)); } catch (Exception e) { parser = new PowershellFileParser(currentPath, isDirectory: true, errorMessage: e.Message); } if (parser != null) { yield return(parser); continue; } foreach (string dir in dirs) { if (filesPatternProvider.DoesDirectoryMatch(dir) && (filesPatternProvider.IncludeAllFiles || filesPatternProvider.IsInAdditonalPaths(dir))) { parser = new PowershellFileParser(dir, isDirectory: true); yield return(parser); } pathsToEnumerate.Enqueue(dir); } this.ReportProgress(worker, currentPath); } while (pathsToEnumerate.Any()) { ; } }
private IEnumerable<PowershellFileParser> GetFilesInDirectory(string path, FilesPatternProvider filesPatternProvider) { IEnumerable<string> files = null; PowershellFileParser parser = null; try { files = Directory.GetFiles(path, filesPatternProvider.GetFilesPattern()).Where(f => filesPatternProvider.DoesFileMatch(f)); } catch (Exception e) { parser = new PowershellFileParser(path, isDirectory: true, errorMessage: e.Message); } if (parser != null) { yield return parser; yield break; } foreach (string file in files) { parser = new PowershellFileParser(file, isDirectory: false); yield return parser; } }
private IEnumerable<PowershellFileParser> GetFileList(string path, FilesPatternProvider filesPatternProvider, BackgroundIndexer worker) { PowershellFileParser parser = null; Queue<string> pathsToEnumerate = new Queue<string>(); if (File.Exists(path) && filesPatternProvider.DoesFileMatch(path)) { parser = new PowershellFileParser(path, isDirectory: false); yield return parser; ReportProgress(worker, path); yield break; } if (!Directory.Exists(path) || !filesPatternProvider.DoesDirectoryMatch(path)) { yield break; } parser = new PowershellFileParser(path, isDirectory: true); yield return parser; pathsToEnumerate.Enqueue(path); while (pathsToEnumerate.Any()) { IEnumerable<string> dirs = null; parser = null; string currentPath = pathsToEnumerate.Dequeue(); foreach (var file in GetFilesInDirectory(currentPath, filesPatternProvider)) { yield return file; } try { dirs = Directory.EnumerateDirectories(currentPath).Where(dir => filesPatternProvider.DoesDirectoryMatch(dir)); } catch (Exception e) { parser = new PowershellFileParser(currentPath, isDirectory: true, errorMessage: e.Message); } if (parser != null) { yield return parser; continue; } foreach (string dir in dirs) { if (filesPatternProvider.DoesDirectoryMatch(dir) && (filesPatternProvider.IncludeAllFiles || filesPatternProvider.IsInAdditonalPaths(dir))) { parser = new PowershellFileParser(dir, isDirectory: true); yield return parser; } pathsToEnumerate.Enqueue(dir); } ReportProgress(worker, currentPath); } while (pathsToEnumerate.Any()); }
public DocumentHierarchyFactory(PowershellFileParser powershellFileParser, DocumentHierarchyIndexer documentHierarchyIndexer) { this.powershellFileParser = powershellFileParser; this.documentHierarchyIndexer = documentHierarchyIndexer; }