in src/Cli/func/Common/GitIgnoreParser.cs [29:80]
public GitIgnoreParser(string gitIgnoreContent)
{
var parsed = gitIgnoreContent
.Split('\n')
.Select(l => l.Trim())
.Where(l => !l.StartsWith("#"))
.Where(l => !string.IsNullOrEmpty(l))
.Aggregate(new List<List<string>>() { new List<string>(), new List<string>() }, (lists, line) =>
{
var isNegative = line.StartsWith("!");
if (isNegative)
{
line = line.Substring(1);
}
if (line.StartsWith("/"))
{
line = line.Substring(1);
}
if (isNegative)
{
lists[1].Add(line);
}
else
{
lists[0].Add(line);
}
return lists;
})
.Select(l =>
{
return l
.OrderBy(i => i)
.Select(i => new[] { PrepareRegexPattern(i), PreparePartialRegex(i) })
.Aggregate(new List<List<string>>() { new List<string>(), new List<string>() }, (list, prepared) =>
{
list[0].Add(prepared[0]);
list[1].Add(prepared[1]);
return list;
});
})
.Select(item => new[]
{
item[0].Count > 0 ? new Regex("^((" + string.Join(")|(", item[0]) + "))\\b", RegexOptions.ECMAScript) : new Regex("$^", RegexOptions.ECMAScript),
item[1].Count > 0 ? new Regex("^((" + string.Join(")|(", item[1]) + "))\\b", RegexOptions.ECMAScript) : new Regex("$^", RegexOptions.ECMAScript)
})
.ToArray();
_positive = parsed[0];
_negative = parsed[1];
}