Skip to content

Commit 007e466

Browse files
committed
Initial refactoring around configuration, introducing EffectiveConfiguration and trying to remove places ignoring configuration
1 parent e885ce7 commit 007e466

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+217
-224
lines changed

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
<Compile Include="ApprovalTestsConfig.cs" />
100100
<Compile Include="Fixtures\RepositoryFixtureBase.cs" />
101101
<Compile Include="SemanticVersionTests.cs" />
102+
<Compile Include="TestEffectiveConfiguration.cs" />
102103
<Compile Include="TestFileSystem.cs" />
103104
<Compile Include="VariableProviderTests.cs" />
104105
</ItemGroup>

GitVersionCore.Tests/IntegrationTests/GitFlow/MetaDataByCommitScenarios.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using GitVersion;
3+
using GitVersionCore.Tests;
34
using LibGit2Sharp;
45
using NUnit.Framework;
56
using Shouldly;
@@ -157,7 +158,7 @@ static void EnsureBranchMatch(CommitCountingRepoFixture fixture, string branchNa
157158
var referenceCommitFinder = commitFinder ?? (r => r.FindBranch(branchName).Tip);
158159

159160
var commit = referenceCommitFinder(fixture.Repository);
160-
var releaseDate = LastMinorVersionFinder.Execute(fixture.Repository, new Config(), commit);
161+
var releaseDate = LastMinorVersionFinder.Execute(fixture.Repository, new TestEffectiveConfiguration(), commit);
161162
releaseDate.ShouldBe(commit.When());
162163
}
163164

GitVersionCore.Tests/JsonVersionBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void Json()
1717
PreReleaseTag = "unstable4",
1818
BuildMetaData = new SemanticVersionBuildMetaData(5, "feature1", "commitSha",DateTimeOffset.Parse("2014-03-06 23:59:59Z"))
1919
};
20-
var variables = VariableProvider.GetVariablesFor(semanticVersion, new Config());
20+
var variables = VariableProvider.GetVariablesFor(semanticVersion, AssemblyVersioningScheme.MajorMinorPatch, VersioningMode.ContinuousDelivery);
2121
var json = JsonOutputFormatter.ToJson(variables);
2222
Approvals.Verify(json);
2323
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace GitVersionCore.Tests
2+
{
3+
using GitVersion;
4+
5+
public class TestEffectiveConfiguration : EffectiveConfiguration
6+
{
7+
public TestEffectiveConfiguration(
8+
AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchMetadata,
9+
VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
10+
string gitTagPrefix = "v",
11+
string tag = "",
12+
string nextVersion = null) :
13+
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion)
14+
{
15+
}
16+
}
17+
}

GitVersionCore.Tests/VariableProviderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void DevelopBranchFormatsSemVerForCiFeed()
2222
semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z");
2323

2424

25-
var vars = VariableProvider.GetVariablesFor(semVer, new Config());
25+
var vars = VariableProvider.GetVariablesFor(semVer, AssemblyVersioningScheme.MajorMinorPatch, VersioningMode.ContinuousDelivery);
2626

2727
vars[VariableProvider.SemVer].ShouldBe("1.2.3.5-unstable");
2828
}

GitVersionCore/BuildServers/BuildServerBase.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersion
22
{
33
using System;
4+
using System.Collections.Generic;
45

56
public abstract class BuildServerBase : IBuildServer
67
{
@@ -9,7 +10,7 @@ public abstract class BuildServerBase : IBuildServer
910
public abstract string GenerateSetVersionMessage(string versionToUseForBuildNumber);
1011
public abstract string[] GenerateSetParameterMessage(string name, string value);
1112

12-
public virtual void WriteIntegration(SemanticVersion semanticVersion, Action<string> writer)
13+
public virtual void WriteIntegration(SemanticVersion semanticVersion, Action<string> writer, Dictionary<string, string> variables)
1314
{
1415
if (semanticVersion == null)
1516
{
@@ -22,9 +23,10 @@ public virtual void WriteIntegration(SemanticVersion semanticVersion, Action<str
2223
}
2324

2425
writer(string.Format("Executing GenerateSetVersionMessage for '{0}'.", GetType().Name));
26+
// TODO This should come from variable provider
2527
writer(GenerateSetVersionMessage(semanticVersion.ToString("f")));
2628
writer(string.Format("Executing GenerateBuildLogOutput for '{0}'.", GetType().Name));
27-
foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(semanticVersion, this))
29+
foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(this, variables))
2830
{
2931
writer(buildParameter);
3032
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersion
22
{
33
using System;
4+
using System.Collections.Generic;
45

56
public interface IBuildServer
67
{
@@ -9,7 +10,7 @@ public interface IBuildServer
910
string GenerateSetVersionMessage(string versionToUseForBuildNumber);
1011
string[] GenerateSetParameterMessage(string name, string value);
1112

12-
void WriteIntegration(SemanticVersion semanticVersion, Action<string> writer);
13+
void WriteIntegration(SemanticVersion semanticVersion, Action<string> writer, Dictionary<string,string> variables);
1314
}
1415

1516
}

GitVersionCore/Configuration/BranchConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
public class BranchConfig
66
{
77
[YamlAlias("mode")]
8-
public VersioningMode VersioningMode { get; set; }
8+
public VersioningMode? VersioningMode { get; set; }
99

1010
[YamlAlias("tag")]
1111
public string Tag { get; set; }

GitVersionCore/Configuration/Config.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
public class Config
1010
{
11-
VersioningMode versioningMode;
12-
1311
Dictionary<string, BranchConfig> branches = new Dictionary<string, BranchConfig>();
1412

1513
public Config()
@@ -19,8 +17,6 @@ public Config()
1917
Branches["release[/-]"] = new BranchConfig { Tag = "beta" };
2018
Branches["hotfix[/-]"] = new BranchConfig { Tag = "beta" };
2119
Branches["develop"] = new BranchConfig { Tag = "unstable" };
22-
VersioningMode = VersioningMode.ContinuousDelivery;
23-
Develop.VersioningMode = VersioningMode.ContinuousDeployment;
2420
}
2521

2622
[YamlAlias("assembly-versioning-scheme")]
@@ -55,18 +51,7 @@ public string ReleaseBranchTag
5551
}
5652

5753
[YamlAlias("mode")]
58-
public VersioningMode VersioningMode
59-
{
60-
get
61-
{
62-
return versioningMode;
63-
}
64-
set
65-
{
66-
Branches.ToList().ForEach(b => b.Value.VersioningMode = value);
67-
versioningMode = value;
68-
}
69-
}
54+
public VersioningMode? VersioningMode { get; set; }
7055

7156
[YamlAlias("branches")]
7257
public Dictionary<string, BranchConfig> Branches
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace GitVersion
2+
{
3+
/// <summary>
4+
/// Configuration can be applied to different things, effective configuration is the result after applying the appropriate configuration
5+
/// </summary>
6+
public class EffectiveConfiguration
7+
{
8+
public EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme, VersioningMode versioningMode, string gitTagPrefix, string tag, string nextVersion)
9+
{
10+
AssemblyVersioningScheme = assemblyVersioningScheme;
11+
VersioningMode = versioningMode;
12+
GitTagPrefix = gitTagPrefix;
13+
Tag = tag;
14+
NextVersion = nextVersion;
15+
}
16+
17+
public VersioningMode VersioningMode { get; private set; }
18+
19+
public AssemblyVersioningScheme AssemblyVersioningScheme { get; private set; }
20+
21+
/// <summary>
22+
/// Git tag prefix
23+
/// </summary>
24+
public string GitTagPrefix { get; private set; }
25+
26+
/// <summary>
27+
/// Tag to use when calculating SemVer
28+
/// </summary>
29+
public string Tag { get; private set; }
30+
31+
public string NextVersion { get; private set; }
32+
}
33+
}

GitVersionCore/GitFlow/BranchFinders/DevelopVersionFinder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public SemanticVersion FindVersion(GitVersionContext context)
2828
Patch = 0,
2929
};
3030

31-
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.TagPrefix)).ToList();
32-
var preReleaseTag = context.CurrentBranchConfig.VersioningMode.GetInstance().GetPreReleaseTag(context, applicableTagsInDescendingOrder, numberOfCommitsSinceRelease);
31+
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.GitTagPrefix)).ToList();
32+
var preReleaseTag = context.Configuration.VersioningMode.GetInstance().GetPreReleaseTag(context, applicableTagsInDescendingOrder, numberOfCommitsSinceRelease);
3333

3434

3535
var semanticVersion = new SemanticVersion

GitVersionCore/GitFlow/BranchFinders/HotfixVersionFinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ class HotfixVersionFinder
99
public SemanticVersion FindVersion(GitVersionContext context)
1010
{
1111
var versionString = GetSuffix(context.CurrentBranch);
12-
var shortVersion = SemanticVersion.Parse(versionString, context.Configuration.TagPrefix);
12+
var shortVersion = SemanticVersion.Parse(versionString, context.Configuration.GitTagPrefix);
1313

1414
EnsureVersionIsValid(shortVersion, context.CurrentBranch);
1515

1616
var nbHotfixCommits = BranchCommitDifferenceFinder.NumberOfCommitsInBranchNotKnownFromBaseBranch(context.Repository, context.CurrentBranch, BranchType.Hotfix, "master");
17-
var tagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.TagPrefix)).ToList();
18-
var semanticVersionPreReleaseTag = context.CurrentBranchConfig.VersioningMode.GetInstance().GetPreReleaseTag(context, tagsInDescendingOrder, nbHotfixCommits);
17+
var tagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.GitTagPrefix)).ToList();
18+
var semanticVersionPreReleaseTag = context.Configuration.VersioningMode.GetInstance().GetPreReleaseTag(context, tagsInDescendingOrder, nbHotfixCommits);
1919
return new SemanticVersion
2020
{
2121
Major = shortVersion.Major,

GitVersionCore/GitFlow/BranchFinders/MasterVersionFinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public SemanticVersion FindVersion(GitVersionContext context)
99
foreach (var tag in context.Repository.TagsByDate(context.CurrentCommit))
1010
{
1111
SemanticVersion shortVersion;
12-
if (SemanticVersion.TryParse(tag.Name, context.Configuration.TagPrefix, out shortVersion))
12+
if (SemanticVersion.TryParse(tag.Name, context.Configuration.GitTagPrefix, out shortVersion))
1313
{
1414
return BuildVersion(context.CurrentCommit, shortVersion);
1515
}

GitVersionCore/GitFlow/BranchFinders/RecentTagVersionExtractor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal static SemanticVersionPreReleaseTag RetrieveMostRecentOptionalTagVersio
1111
if (applicableTagsInDescendingOrder.Any())
1212
{
1313
var taggedCommit = applicableTagsInDescendingOrder.First().Target;
14-
var preReleaseVersion = applicableTagsInDescendingOrder.Select(tag => SemanticVersion.Parse(tag.Name, context.Configuration.TagPrefix)).FirstOrDefault();
14+
var preReleaseVersion = applicableTagsInDescendingOrder.Select(tag => SemanticVersion.Parse(tag.Name, context.Configuration.GitTagPrefix)).FirstOrDefault();
1515
if (preReleaseVersion != null)
1616
{
1717
if (taggedCommit != context.CurrentCommit)

GitVersionCore/GitFlow/BranchFinders/ReleaseVersionFinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ class ReleaseVersionFinder
88
public SemanticVersion FindVersion(GitVersionContext context)
99
{
1010
var versionString = GetSuffix(context.CurrentBranch);
11-
var shortVersion = SemanticVersion.Parse(versionString, context.Configuration.TagPrefix);
11+
var shortVersion = SemanticVersion.Parse(versionString, context.Configuration.GitTagPrefix);
1212

1313
EnsureVersionIsValid(shortVersion, context.CurrentBranch);
1414

15-
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.TagPrefix)).ToList();
15+
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, shortVersion).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.GitTagPrefix)).ToList();
1616
var numberOfCommitsSinceLastTagOrBranchPoint = BranchCommitDifferenceFinder.NumberOfCommitsSinceLastTagOrBranchPoint(context, applicableTagsInDescendingOrder, BranchType.Release, "develop");
17-
var semanticVersionPreReleaseTag = context.Configuration.Branches["release[/-]"].VersioningMode.GetInstance().GetPreReleaseTag(context, applicableTagsInDescendingOrder, numberOfCommitsSinceLastTagOrBranchPoint);
17+
var semanticVersionPreReleaseTag = context.Configuration.VersioningMode.GetInstance().GetPreReleaseTag(context, applicableTagsInDescendingOrder, numberOfCommitsSinceLastTagOrBranchPoint);
1818

1919
return new SemanticVersion
2020
{

GitVersionCore/GitFlow/BranchFinders/SupportVersionFinder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ namespace GitVersion
44

55
class SupportVersionFinder
66
{
7-
public SemanticVersion FindVersion(IRepository repository, Commit tip, Config configuration)
7+
public SemanticVersion FindVersion(IRepository repository, Commit tip, EffectiveConfiguration configuration)
88
{
99
foreach (var tag in repository.TagsByDate(tip))
1010
{
1111
SemanticVersion shortVersion;
12-
if (SemanticVersion.TryParse(tag.Name, configuration.TagPrefix, out shortVersion))
12+
if (SemanticVersion.TryParse(tag.Name, configuration.GitTagPrefix, out shortVersion))
1313
{
1414
return BuildVersion(tip, shortVersion);
1515
}

GitVersionCore/GitFlow/BranchFinders/VersionOnMasterFinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public VersionPoint Execute(GitVersionContext context, DateTimeOffset olderThan)
1212
foreach (var tag in context.Repository.TagsByDate(commit))
1313
{
1414
SemanticVersion semanticVersion;
15-
if (SemanticVersion.TryParse(tag.Name, context.Configuration.TagPrefix, out semanticVersion))
15+
if (SemanticVersion.TryParse(tag.Name, context.Configuration.GitTagPrefix, out semanticVersion))
1616
{
1717
return new VersionPoint
1818
{

GitVersionCore/GitHubFlow/LastTaggedReleaseFinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public bool GetVersion(out VersionTaggedCommit versionTaggedCommit)
1717
var tags = context.Repository.Tags.Select(t =>
1818
{
1919
SemanticVersion version;
20-
if (SemanticVersion.TryParse(t.Name, context.Configuration.TagPrefix, out version))
20+
if (SemanticVersion.TryParse(t.Name, context.Configuration.GitTagPrefix, out version))
2121
{
2222
return new VersionTaggedCommit((Commit)t.Target, version);
2323
}

GitVersionCore/GitHubFlow/NextSemverCalculator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public IEnumerable<SemanticVersion> GetPossibleVersions()
6565

6666
if (!string.IsNullOrEmpty(context.Configuration.NextVersion))
6767
{
68-
yield return SemanticVersion.Parse(context.Configuration.NextVersion, context.Configuration.TagPrefix);
68+
yield return SemanticVersion.Parse(context.Configuration.NextVersion, context.Configuration.GitTagPrefix);
6969
}
7070

7171
if (hasNextVersionTxtVersion)

GitVersionCore/GitHubFlow/NextVersionTxtFileFinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55

66
public class NextVersionTxtFileFinder
77
{
8+
EffectiveConfiguration configuration;
89
string repositoryDirectory;
9-
Config configuration;
1010

11-
public NextVersionTxtFileFinder(string repositoryDirectory, Config configuration)
11+
public NextVersionTxtFileFinder(string repositoryDirectory, EffectiveConfiguration configuration)
1212
{
1313
this.repositoryDirectory = repositoryDirectory;
1414
this.configuration = configuration;
@@ -30,7 +30,7 @@ public bool TryGetNextVersion(out SemanticVersion semanticVersion)
3030
return false;
3131
}
3232

33-
if (!SemanticVersion.TryParse(version, configuration.TagPrefix, out semanticVersion))
33+
if (!SemanticVersion.TryParse(version, configuration.GitTagPrefix, out semanticVersion))
3434
{
3535
throw new ArgumentException("Make sure you have a valid semantic version in NextVersion.txt");
3636
}

GitVersionCore/GitHubFlow/OtherBranchVersionFinder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ public bool FindVersion(GitVersionContext context, SemanticVersion defaultNextVe
1717
return false;
1818
}
1919

20-
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, versionInBranch.Item2).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.TagPrefix)).ToList();
20+
var applicableTagsInDescendingOrder = context.Repository.SemVerTagsRelatedToVersion(context.Configuration, versionInBranch.Item2).OrderByDescending(tag => SemanticVersion.Parse(tag.Name, context.Configuration.GitTagPrefix)).ToList();
2121
var nbHotfixCommits = BranchCommitDifferenceFinder.NumberOfCommitsSinceLastTagOrBranchPoint(context, applicableTagsInDescendingOrder, BranchType.Unknown, "master");
2222
var semanticVersionPreReleaseTag = RecentTagVersionExtractor.RetrieveMostRecentOptionalTagVersion(context, applicableTagsInDescendingOrder) ?? CreateDefaultPreReleaseTag(context, versionInBranch.Item1);
2323

2424

2525
if (semanticVersionPreReleaseTag.Name == "release")
2626
{
27-
semanticVersionPreReleaseTag.Name = context.Configuration.Branches["release[/-]"].Tag;
27+
semanticVersionPreReleaseTag.Name = context.Configuration.Tag;
2828
}
2929

3030
semanticVersion = new SemanticVersion
@@ -44,7 +44,7 @@ Tuple<string, SemanticVersion> GetVersionInBranch(GitVersionContext context)
4444
foreach (var part in branchParts)
4545
{
4646
SemanticVersion semanticVersion;
47-
if (SemanticVersion.TryParse(part, context.Configuration.TagPrefix, out semanticVersion))
47+
if (SemanticVersion.TryParse(part, context.Configuration.GitTagPrefix, out semanticVersion))
4848
{
4949
return Tuple.Create(part, semanticVersion);
5050
}

0 commit comments

Comments
 (0)