Exemple #1
0
        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.IsExcludedFromIndexing(file), errorMessage: null);
                yield return(parseResult);
            }
        }
Exemple #2
0
        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.IsExcludedFromIndexing(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())
            {
                ;
            }
        }