Skip to content

Commit 1d02b37

Browse files
author
Chris Leigh
committed
Modifying SemanticVersion.TryParse to consider TagPrefix as a constraint. No longer will consider any tag string containing a version as a candidate. Accordingly, default configuration no longer uses [vV] (some unit tests changed as a result) since most unit tests do no use the prefix.
1 parent bec5eb5 commit 1d02b37

File tree

8 files changed

+54
-10
lines changed

8 files changed

+54
-10
lines changed

GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
assembly-versioning-scheme: MajorMinorPatch
22
mode: ContinuousDelivery
3-
tag-prefix: '[vV]'
3+
tag-prefix:
44
continuous-delivery-fallback-tag: ci
55
branches:
66
master:

GitVersionCore.Tests/ConfigProviderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public void CanReadDefaultDocument()
120120
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch);
121121
config.Branches["develop"].Tag.ShouldBe("unstable");
122122
config.Branches["release[/-]"].Tag.ShouldBe("beta");
123-
config.TagPrefix.ShouldBe("[vV]");
123+
config.TagPrefix.ShouldBe("");
124124
config.NextVersion.ShouldBe(null);
125125
}
126126

GitVersionCore.Tests/Fixtures/RepositoryFixtureBase.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,23 @@ protected RepositoryFixtureBase(Func<string, IRepository> repoBuilder, Config co
2525
public void AssertFullSemver(string fullSemver, IRepository repository = null, string commitId = null)
2626
{
2727
Trace.WriteLine("---------");
28+
29+
var variables = GetVersion(repository, commitId);
30+
variables.FullSemVer.ShouldBe(fullSemver);
31+
}
32+
33+
public VersionVariables GetVersion(IRepository repository = null, string commitId = null)
34+
{
2835
var gitVersionContext = new GitVersionContext(repository ?? Repository, configuration, IsForTrackedBranchOnly, commitId);
2936
var executeGitVersion = ExecuteGitVersion(gitVersionContext);
30-
var variables = VariableProvider.GetVariablesFor(executeGitVersion,
37+
var variables = VariableProvider.GetVariablesFor(executeGitVersion,
3138
gitVersionContext.Configuration.AssemblyVersioningScheme,
32-
gitVersionContext.Configuration.VersioningMode,
39+
gitVersionContext.Configuration.VersioningMode,
3340
gitVersionContext.Configuration.ContinuousDeploymentFallbackTag,
3441
gitVersionContext.IsCurrentCommitTagged);
3542
try
3643
{
37-
variables.FullSemVer.ShouldBe(fullSemver);
44+
return variables;
3845
}
3946
catch (Exception)
4047
{

GitVersionCore.Tests/GitVersionCore.Tests.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,9 @@
145145
<Content Include="FodyWeavers.xml" />
146146
<Content Include="JsonVersionBuilderTests.Json.approved.txt" />
147147
</ItemGroup>
148-
<ItemGroup />
148+
<ItemGroup>
149+
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
150+
</ItemGroup>
149151
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
150152
<PropertyGroup>
151153
<PostBuildEvent>

GitVersionCore.Tests/IntegrationTests/MasterScenarios.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using GitVersion;
22
using LibGit2Sharp;
33
using NUnit.Framework;
4+
using Shouldly;
45

56
[TestFixture]
67
public class MasterScenarios
@@ -145,7 +146,7 @@ public void CanSpecifyTagPrefixes()
145146

146147
fixture.AssertFullSemver("1.0.4+5");
147148
}
148-
}
149+
}
149150

150151
[Test]
151152
public void CanSpecifyTagPrefixesAsRegex()
@@ -159,4 +160,28 @@ public void CanSpecifyTagPrefixesAsRegex()
159160
fixture.AssertFullSemver("1.0.4+5");
160161
}
161162
}
163+
164+
[Test]
165+
public void DoesIgnoreTagsNotAdheringToTagPrefix()
166+
{
167+
using (var fixture = new EmptyRepositoryFixture(new Config { TagPrefix = "" }))
168+
{
169+
const string TaggedVersion = "version-1.0.3";
170+
fixture.Repository.MakeATaggedCommit(TaggedVersion);
171+
fixture.Repository.MakeCommits(5);
172+
173+
var variables = fixture.GetVersion();
174+
variables.FullSemVer.ShouldNotBe("1.0.4+5");
175+
}
176+
177+
using (var fixture = new EmptyRepositoryFixture(new Config { TagPrefix = "" }))
178+
{
179+
const string TaggedVersion = "bad/1.0.3";
180+
fixture.Repository.MakeATaggedCommit(TaggedVersion);
181+
fixture.Repository.MakeCommits(5);
182+
183+
var variables = fixture.GetVersion();
184+
variables.FullSemVer.ShouldNotBe("1.0.4+5");
185+
}
186+
}
162187
}

GitVersionCore/Configuration/Config.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class Config
1111
public Config()
1212
{
1313
AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch;
14-
TagPrefix = "[vV]";
14+
TagPrefix = "";
1515
VersioningMode = GitVersion.VersioningMode.ContinuousDelivery;
1616
ContinuousDeploymentFallbackTag = "ci";
1717

GitVersionCore/SemanticVersion.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class SemanticVersion : IFormattable, IComparable<SemanticVersion>
88
public static SemanticVersion Empty = new SemanticVersion();
99

1010
static Regex ParseSemVer = new Regex(
11-
@"(?<SemVer>(?<Major>\d+)(\.(?<Minor>\d+))(\.(?<Patch>\d+))?)(\.(?<FourthPart>\d+))?(-(?<Tag>[^\+]*))?(\+(?<BuildMetaData>.*))?",
11+
@"^(?<SemVer>(?<Major>\d+)(\.(?<Minor>\d+))(\.(?<Patch>\d+))?)(\.(?<FourthPart>\d+))?(-(?<Tag>[^\+]*))?(\+(?<BuildMetaData>.*))?$",
1212
RegexOptions.Compiled);
1313

1414
public int Major;
@@ -147,7 +147,14 @@ public static SemanticVersion Parse(string version, string tagPrefixRegex)
147147

148148
public static bool TryParse(string version, string tagPrefixRegex, out SemanticVersion semanticVersion)
149149
{
150-
var match = Regex.Match(version, string.Format("({0})?(?<version>.*)", tagPrefixRegex));
150+
var match = Regex.Match(version, string.Format("^({0})(?<version>.*)$", tagPrefixRegex));
151+
152+
if (!match.Success)
153+
{
154+
semanticVersion = null;
155+
return false;
156+
}
157+
151158
version = match.Groups["version"].Value;
152159
var parsed = ParseSemVer.Match(version);
153160

GitVersionExe.Tests/GitVersionExe.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@
9898
<Compile Include="PullRequestInTeamCityTest.cs" />
9999
<Compile Include="AssemblyInfoFileUpdateTests.cs" />
100100
</ItemGroup>
101+
<ItemGroup>
102+
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
103+
</ItemGroup>
101104
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
102105
<PropertyGroup>
103106
<PostBuildEvent>

0 commit comments

Comments
 (0)