private IEnumerable <PowershellParseResult> GetFilesInDirectory(string path, FilesPatternProvider filesPatternProvider) { IEnumerable <string> files = null; PowershellParseResult parseResult = null; try { files = Directory.GetFiles(path, filesPatternProvider.GetFilesPattern()).Where(f => filesPatternProvider.DoesFileMatch(f)); } catch (Exception e) { parseResult = this.powershellFileParser.ParseFile(path, isDirectory: true, isExcluded: false, errorMessage: e.Message); } if (parseResult != null) { yield return(parseResult); yield break; } foreach (string file in files) { parseResult = this.powershellFileParser.ParseFile(file, isDirectory: false, isExcluded: filesPatternProvider.IsExcluded(file), errorMessage: null); yield return(parseResult); } }
private IEnumerable <PowershellParseResult> GetFileList(string path, FilesPatternProvider filesPatternProvider, BackgroundIndexer worker) { PowershellParseResult parseResult = null; Queue <string> pathsToEnumerate = new Queue <string>(); if (File.Exists(path) && filesPatternProvider.DoesFileMatch(path)) { parseResult = this.powershellFileParser.ParseFile(path, isDirectory: false, isExcluded: false, errorMessage: null); yield return(parseResult); this.ReportProgress(worker, path); yield break; } if (!Directory.Exists(path) || !filesPatternProvider.DoesDirectoryMatch(path)) { yield break; } parseResult = this.powershellFileParser.ParseFile(path, isDirectory: true, isExcluded: false, errorMessage: null); yield return(parseResult); pathsToEnumerate.Enqueue(path); while (pathsToEnumerate.Any()) { IEnumerable <string> dirs = null; parseResult = 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) { parseResult = this.powershellFileParser.ParseFile(currentPath, isDirectory: true, isExcluded: false, errorMessage: e.Message); } if (parseResult != null) { yield return(parseResult); continue; } foreach (string dir in dirs) { bool isExcluded = filesPatternProvider.IsExcluded(dir); if (filesPatternProvider.DoesDirectoryMatch(dir) && (isExcluded || filesPatternProvider.IncludeAllFiles || filesPatternProvider.IsInAdditonalPaths(dir))) { parseResult = this.powershellFileParser.ParseFile(dir, isDirectory: true, isExcluded: isExcluded, errorMessage: null); yield return(parseResult); } if (!isExcluded) { pathsToEnumerate.Enqueue(dir); } } this.ReportProgress(worker, currentPath); } while (pathsToEnumerate.Any()) { ; } }