Skip to content

Commit b6b9d94

Browse files
committed
Move IIgnoreConfiguration::ToFilters method out of the interface/record, to an extension at the place of usage
1 parent ad1cc78 commit b6b9d94

File tree

7 files changed

+72
-61
lines changed

7 files changed

+72
-61
lines changed

src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ public static class GitToolsTestingExtensions
1919
public static ICommit CreateMockCommit()
2020
{
2121
var objectId = Substitute.For<IObjectId>();
22-
objectId.Sha.Returns(Guid.NewGuid().ToString("n") + "00000000");
23-
22+
var sha = Guid.NewGuid().ToString("n") + "00000000";
23+
objectId.Sha.Returns(sha);
2424
var commit = Substitute.For<ICommit>();
2525
commit.Id.Returns(objectId);
26-
commit.Sha.Returns(objectId.Sha);
26+
commit.Sha.Returns(sha);
2727
commit.Message.Returns("Commit " + commitCount++);
2828
commit.Parents.Returns(Enumerable.Empty<ICommit>());
2929
commit.When.Returns(when.AddSeconds(1));

src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,7 @@ public void ShouldNotFilterVersion()
366366
{
367367
// Arrange
368368
var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit());
369-
var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude());
370-
var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig).Build();
369+
var configuration = GitFlowConfigurationBuilder.New.Build();
371370
var context = new GitVersionContext(branchMock, null, configuration, null, 0);
372371
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
373372
var effectiveConfiguration = context.Configuration.GetEffectiveConfiguration(branchMock);
@@ -396,9 +395,10 @@ public void ShouldNotFilterVersion()
396395
public void ShouldFilterVersion()
397396
{
398397
// Arrange
398+
var commitToExclude = GitToolsTestingExtensions.CreateMockCommit();
399399
var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit());
400-
var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude());
401-
var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig).Build();
400+
var ignoreConfiguration = IgnoreConfigurationBuilder.New.WithShas(commitToExclude.Sha).Build();
401+
var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(ignoreConfiguration).Build();
402402
var context = new GitVersionContext(branchMock, null, configuration, null, 0);
403403
var repositoryStoreMock = Substitute.For<IRepositoryStore>();
404404
var effectiveConfiguration = context.Configuration.GetEffectiveConfiguration(branchMock);
@@ -407,7 +407,7 @@ public void ShouldFilterVersion()
407407
effectiveBranchConfigurationFinderMock.GetConfigurations(branchMock, configuration).Returns(new[] { effectiveBranchConfiguration });
408408
var incrementStrategyFinderMock = Substitute.For<IIncrementStrategyFinder>();
409409
repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any<HashSet<IBranch>>()).Returns(Enumerable.Empty<IBranch>());
410-
var higherVersion = new BaseVersion("exclude", false, new SemanticVersion(2), GitToolsTestingExtensions.CreateMockCommit(), null);
410+
var higherVersion = new BaseVersion("exclude", false, new SemanticVersion(2), commitToExclude, null);
411411
var lowerVersion = new BaseVersion("dummy", false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), null);
412412
var versionStrategies = new IVersionStrategy[] { new TestVersionStrategy(higherVersion, lowerVersion) };
413413
var mainlineVersionCalculatorMock = Substitute.For<IMainlineVersionCalculator>();
@@ -430,8 +430,7 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode()
430430
{
431431
// Arrange
432432
var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit());
433-
var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude());
434-
var configuration = GitFlowConfigurationBuilder.New.WithIgnoreConfiguration(fakeIgnoreConfig)
433+
var configuration = GitFlowConfigurationBuilder.New
435434
.WithBranch("main", builder => builder.WithVersioningMode(VersioningMode.Mainline))
436435
.Build();
437436
var context = new GitVersionContext(branchMock, null, configuration, null, 0);
@@ -473,34 +472,6 @@ public void ShouldIgnorePreReleaseVersionInMainlineMode()
473472
nextVersion.BaseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion);
474473
}
475474

476-
private record TestIgnoreConfig : IgnoreConfiguration
477-
{
478-
private readonly IVersionFilter filter;
479-
480-
public override bool IsEmpty => false;
481-
482-
public TestIgnoreConfig(IVersionFilter filter) => this.filter = filter;
483-
484-
public override IEnumerable<IVersionFilter> ToFilters()
485-
{
486-
yield return this.filter;
487-
}
488-
}
489-
490-
private class ExcludeSourcesContainingExclude : IVersionFilter
491-
{
492-
public bool Exclude(BaseVersion version, out string? reason)
493-
{
494-
reason = null;
495-
496-
if (!version.Source.Contains("exclude"))
497-
return false;
498-
499-
reason = "was excluded";
500-
return true;
501-
}
502-
}
503-
504475
private sealed class V1Strategy : IVersionStrategy
505476
{
506477
private readonly ICommit? when;
Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
using GitVersion.VersionCalculation;
2-
31
namespace GitVersion.Configuration
42
{
53
public interface IIgnoreConfiguration
64
{
75
DateTimeOffset? Before { get; }
86

9-
IReadOnlyList<string> Shas { get; }
10-
11-
IEnumerable<IVersionFilter> ToFilters();
7+
IReadOnlyCollection<string> Shas { get; }
128

13-
bool IsEmpty { get; }
9+
public bool IsEmpty => Before == null && !Shas.Any();
1410
}
1511
}
Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using GitVersion.Attributes;
2-
using GitVersion.VersionCalculation;
32

43
namespace GitVersion.Configuration;
54

@@ -11,18 +10,9 @@ public record IgnoreConfiguration : IIgnoreConfiguration
1110
public DateTimeOffset? Before { get; init; }
1211

1312
[JsonIgnore]
14-
IReadOnlyList<string> IIgnoreConfiguration.Shas => Shas;
13+
IReadOnlyCollection<string> IIgnoreConfiguration.Shas => Shas;
1514

1615
[JsonPropertyName("sha")]
1716
[JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")]
18-
public List<string> Shas { get; init; } = new();
19-
20-
[JsonIgnore]
21-
public virtual bool IsEmpty => Before == null && !Shas.Any();
22-
23-
public virtual IEnumerable<IVersionFilter> ToFilters()
24-
{
25-
if (Shas.Any()) yield return new ShaVersionFilter(Shas);
26-
if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value);
27-
}
17+
public HashSet<string> Shas { get; init; } = new();
2818
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
namespace GitVersion.Configuration;
2+
3+
internal sealed class IgnoreConfigurationBuilder
4+
{
5+
public static IgnoreConfigurationBuilder New => new();
6+
7+
private DateTimeOffset? before;
8+
9+
private HashSet<string> shas = new();
10+
11+
public IgnoreConfigurationBuilder WithBefore(DateTimeOffset? value)
12+
{
13+
this.before = value;
14+
return this;
15+
}
16+
17+
public IgnoreConfigurationBuilder WithShas(IEnumerable<string> values)
18+
{
19+
WithShas(new HashSet<string>(values));
20+
return this;
21+
}
22+
23+
public IgnoreConfigurationBuilder WithShas(params string[] values)
24+
{
25+
WithShas(new HashSet<string>(values));
26+
return this;
27+
}
28+
29+
public IgnoreConfigurationBuilder WithShas(HashSet<string> value)
30+
{
31+
this.shas = value;
32+
return this;
33+
}
34+
35+
public IgnoreConfiguration Build() => new()
36+
{
37+
Before = before,
38+
Shas = shas
39+
};
40+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using GitVersion.Extensions;
2+
using GitVersion.VersionCalculation;
3+
4+
namespace GitVersion.Configuration;
5+
6+
public static class IgnoreConfigurationExtensions
7+
{
8+
public static IEnumerable<IVersionFilter> ToFilters(this IIgnoreConfiguration source)
9+
{
10+
source.NotNull();
11+
12+
if (source.Shas.Any()) yield return new ShaVersionFilter(source.Shas);
13+
if (source.Before.HasValue) yield return new MinDateVersionFilter(source.Before.Value);
14+
}
15+
}

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,13 @@ GitVersion.Configuration.IGitVersionConfiguration.Workflow.get -> string?
239239
GitVersion.Configuration.IgnoreConfiguration
240240
GitVersion.Configuration.IgnoreConfiguration.Before.get -> System.DateTimeOffset?
241241
GitVersion.Configuration.IgnoreConfiguration.Before.init -> void
242-
GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Generic.List<string!>!
242+
GitVersion.Configuration.IgnoreConfiguration.Shas.get -> System.Collections.Generic.HashSet<string!>!
243243
GitVersion.Configuration.IgnoreConfiguration.Shas.init -> void
244+
GitVersion.Configuration.IgnoreConfigurationExtensions
244245
GitVersion.Configuration.IIgnoreConfiguration
245246
GitVersion.Configuration.IIgnoreConfiguration.Before.get -> System.DateTimeOffset?
246247
GitVersion.Configuration.IIgnoreConfiguration.IsEmpty.get -> bool
247-
GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyList<string!>!
248-
GitVersion.Configuration.IIgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.IVersionFilter!>!
248+
GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlyCollection<string!>!
249249
GitVersion.Configuration.Init.EditConfigStep
250250
GitVersion.Configuration.Init.EditConfigStep.EditConfigStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void
251251
GitVersion.Configuration.Init.GitVersionInitModule
@@ -1088,6 +1088,7 @@ static GitVersion.Configuration.ConfigurationSerializer.Deserialize<T>(string! i
10881088
static GitVersion.Configuration.ConfigurationSerializer.Read(System.IO.TextReader! reader) -> GitVersion.Configuration.GitVersionConfiguration!
10891089
static GitVersion.Configuration.ConfigurationSerializer.Serialize(object! graph) -> string!
10901090
static GitVersion.Configuration.ConfigurationSerializer.Write(GitVersion.Configuration.IGitVersionConfiguration! configuration, System.IO.TextWriter! writer) -> void
1091+
static GitVersion.Configuration.IgnoreConfigurationExtensions.ToFilters(this GitVersion.Configuration.IIgnoreConfiguration! source) -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.IVersionFilter!>!
10911092
static GitVersion.Configuration.Init.StepResult.ExitWithoutSaving() -> GitVersion.Configuration.Init.StepResult!
10921093
static GitVersion.Configuration.Init.StepResult.InvalidResponseSelected() -> GitVersion.Configuration.Init.StepResult!
10931094
static GitVersion.Configuration.Init.StepResult.Ok() -> GitVersion.Configuration.Init.StepResult!
@@ -1224,8 +1225,6 @@ virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeMessag
12241225
virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTrackMergeTarget(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder!
12251226
virtual GitVersion.Configuration.BranchConfigurationBuilder.WithTracksReleaseBranches(bool? value) -> GitVersion.Configuration.BranchConfigurationBuilder!
12261227
virtual GitVersion.Configuration.BranchConfigurationBuilder.WithVersioningMode(GitVersion.VersionCalculation.VersioningMode? value) -> GitVersion.Configuration.BranchConfigurationBuilder!
1227-
virtual GitVersion.Configuration.IgnoreConfiguration.IsEmpty.get -> bool
1228-
virtual GitVersion.Configuration.IgnoreConfiguration.ToFilters() -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.IVersionFilter!>!
12291228
virtual GitVersion.VersionCalculation.EffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.Configuration.EffectiveBranchConfiguration!>!
12301229
virtual GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable<GitVersion.VersionCalculation.BaseVersion!>!
12311230
virtual GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion!

0 commit comments

Comments
 (0)