From cbeb54900a1f14cb1c2d822954e92335aeac8bd0 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Tue, 15 Jul 2014 19:50:48 +0200 Subject: [PATCH] Added helper functions and a sanity check for the filters --- Duplicati/Library/Utility/FilterExpression.cs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Duplicati/Library/Utility/FilterExpression.cs b/Duplicati/Library/Utility/FilterExpression.cs index 5154a8cd4..cc99f6e29 100644 --- a/Duplicati/Library/Utility/FilterExpression.cs +++ b/Duplicati/Library/Utility/FilterExpression.cs @@ -409,9 +409,29 @@ namespace Duplicati.Library.Utility /// Second. public static FilterExpression Combine(FilterExpression first, FilterExpression second) { + if (first.Result != second.Result) + throw new ArgumentException("Both filters must have the same result property"); return new FilterExpression(first.m_filters.Union(second.m_filters).Select(x => x.Type == FilterType.Regexp ? ("[" + x.Filter + "]") : x.Filter), first.Result); } - + + /// + /// Combine the specified filter expressions. + /// + /// First. + /// Second. + public static IFilter Combine(IFilter first, IFilter second) + { + if (second == null || second.Empty) + return first; + if (first == null || first.Empty) + return second; + + if (first is FilterExpression && second is FilterExpression && ((FilterExpression)first).Result == ((FilterExpression)second).Result) + return Combine((FilterExpression)first, (FilterExpression)second); + + return new JoinedFilterExpression(first, second); + } + public override string ToString() { if (this.Empty)