Skip to content
Next Next commit
Add a filter to ignore messages that match a regex
  • Loading branch information
Konrad Mattheis committed Oct 18, 2018
commit 1bdb37a5d466d2470d17cf815f1ea796e250a6ab
8 changes: 6 additions & 2 deletions src/GitVersionCore/Configuration/IgnoreConfig.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitVersion
namespace GitVersion
{
using System;
using System.Collections.Generic;
Expand All @@ -19,10 +19,14 @@ public IgnoreConfig()
[YamlMember(Alias = "sha")]
public IEnumerable<string> SHAs { get; set; }

[YamlMember(Alias = "regex")]
public string Regex { get; set; }

public virtual IEnumerable<IVersionFilter> ToFilters()
{
if (SHAs.Any()) yield return new ShaVersionFilter(SHAs);
if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value);
if (!string.IsNullOrWhiteSpace(Regex)) yield return new MessageFilter(Regex);
}
}
}
}
35 changes: 35 additions & 0 deletions src/GitVersionCore/VersionFilters/MessageFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using GitVersion.VersionCalculation.BaseVersionCalculators;

namespace GitVersion.VersionFilters
{
public class MessageFilter : IVersionFilter
{
private readonly Regex regex;

public MessageFilter(string regex)
{
if (regex == null) throw new ArgumentNullException(nameof(regex));
this.regex = new Regex(regex); ;
}

public bool Exclude(BaseVersion version, out string reason)
{
if (version == null) throw new ArgumentNullException(nameof(version));

reason = null;

if (version.BaseVersionSource != null &&
regex.Match(version.BaseVersionSource.Message).Success)
{
reason = $"Message {version.BaseVersionSource.Message} was ignored due to commit having been excluded by configuration";
return true;
}

return false;
}
}
}