private FileDispositionStates EvaluatePath(string path) { FileDispositionStates continuationReason = FileDispositionStates.None; foreach (FileSourceEvaluablePathMatcher evaluator in _evaluators) { FileDispositionStates state = evaluator.Evaluate(path); if (state.Has(FileDispositionStates.Exclude)) { return(FileDispositionStates.Exclude); } else if (state.Has(FileDispositionStates.CopyOnly)) { if (state.Has(FileDispositionStates.Include)) { return(FileDispositionStates.CopyOnly | FileDispositionStates.Include); } continuationReason = FileDispositionStates.CopyOnly; } else if (state.Has(FileDispositionStates.Include)) { if (continuationReason == FileDispositionStates.CopyOnly) { return(FileDispositionStates.CopyOnly | FileDispositionStates.Include); } return(FileDispositionStates.Include); } } return(FileDispositionStates.None); }
public FileDispositionStates Evaluate(string path) { if (!string.Equals(path, _cachedEvaluatedPath, StringComparison.Ordinal)) { _cachedStatesForFile = EvaluatePath(path); _cachedEvaluatedPath = path; } return(_cachedStatesForFile); }
internal FileSourceHierarchicalPathMatcher(FileSourceMatchInfo matchInfo) { List <FileSourceEvaluablePathMatcher> evaluators = new List <FileSourceEvaluablePathMatcher>(); for (int i = matchInfo.Modifiers.Count - 1; i >= 0; i--) { evaluators.Add(new FileSourceEvaluablePathMatcher(matchInfo.Modifiers[i])); } evaluators.Add(new FileSourceEvaluablePathMatcher(matchInfo.TopLevelEvaluable)); _evaluators = evaluators; _cachedEvaluatedPath = string.Empty; _cachedStatesForFile = FileDispositionStates.None; }
public FileSourceStateMatcher(FileDispositionStates checkState, FileSourceHierarchicalPathMatcher stateMatcher) { _checkState = checkState; _stateMatcher = stateMatcher; }
public static bool Has(this FileDispositionStates value, FileDispositionStates check) { return((value & check) == check); }