Skip to content

Commit 75b0872

Browse files
committed
add concept of short version
1 parent 5f2cbbd commit 75b0872

File tree

9 files changed

+106
-96
lines changed

9 files changed

+106
-96
lines changed

GitVersionCore.Tests/ShortVersionParserTests.cs

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,66 +8,59 @@ public class ShortVersionParserTests
88
[Test]
99
public void Major_minor_patch()
1010
{
11-
int minor;
12-
int major;
13-
int patch;
14-
ShortVersionParser.Parse("1.2.3", out major,out minor,out patch);
15-
Assert.AreEqual(1, major);
16-
Assert.AreEqual(2, minor);
17-
Assert.AreEqual(3, patch);
11+
ShortVersion shortVersion;
12+
ShortVersionParser.Parse("1.2.3", out shortVersion);
13+
Assert.AreEqual(1, shortVersion.Major);
14+
Assert.AreEqual(2, shortVersion.Minor);
15+
Assert.AreEqual(3, shortVersion.Patch);
1816
}
1917

2018
[Test]
2119
public void Major_minor_patchTry()
2220
{
23-
int minor;
24-
int major;
25-
int patch;
26-
var result = ShortVersionParser.TryParse("1.2.3", out major,out minor,out patch);
21+
ShortVersion shortVersion;
22+
var result = ShortVersionParser.TryParse("1.2.3", out shortVersion);
2723
Assert.IsTrue(result);
28-
Assert.AreEqual(1, major);
29-
Assert.AreEqual(2, minor);
30-
Assert.AreEqual(3, patch);
24+
Assert.AreEqual(1, shortVersion.Major);
25+
Assert.AreEqual(2, shortVersion.Minor);
26+
Assert.AreEqual(3, shortVersion.Patch);
3127
}
3228

3329
[Test]
3430
public void Major_minor_missingPatch()
3531
{
36-
int minor;
37-
int major;
38-
int patch;
39-
var result = ShortVersionParser.TryParse("1.2", out major, out minor, out patch);
32+
ShortVersion shortVersion;
33+
var result = ShortVersionParser.TryParse("1.2", out shortVersion);
4034

4135
Assert.IsTrue(result);
42-
Assert.AreEqual(1, major);
43-
Assert.AreEqual(2, minor);
44-
Assert.AreEqual(0, patch);
36+
Assert.AreEqual(1, shortVersion.Major);
37+
Assert.AreEqual(2, shortVersion.Minor);
38+
Assert.AreEqual(0, shortVersion.Patch);
4539
}
4640

4741
[Test]
4842
public void Major_minorTry()
4943
{
50-
int minor;
51-
int major;
52-
var result = ShortVersionParser.TryParseMajorMinor("1.2.3", out major, out minor);
44+
ShortVersion shortVersion;
45+
var result = ShortVersionParser.TryParseMajorMinor("1.2.3", out shortVersion);
5346
Assert.IsFalse(result);
5447

55-
result = ShortVersionParser.TryParseMajorMinor("1.2.0-alpha1", out major, out minor);
48+
result = ShortVersionParser.TryParseMajorMinor("1.2.0-alpha1", out shortVersion);
5649
Assert.IsFalse(result);
5750

58-
result = ShortVersionParser.TryParseMajorMinor("1.2.0.0", out major, out minor);
51+
result = ShortVersionParser.TryParseMajorMinor("1.2.0.0", out shortVersion);
5952
Assert.IsFalse(result);
6053

61-
result = ShortVersionParser.TryParseMajorMinor("1.2.0.1", out major, out minor);
54+
result = ShortVersionParser.TryParseMajorMinor("1.2.0.1", out shortVersion);
6255
Assert.IsFalse(result);
6356

64-
result = ShortVersionParser.TryParseMajorMinor("1.2", out major, out minor);
57+
result = ShortVersionParser.TryParseMajorMinor("1.2", out shortVersion);
6558
Assert.IsTrue(result);
6659

67-
result = ShortVersionParser.TryParseMajorMinor("1.2.0", out major, out minor);
60+
result = ShortVersionParser.TryParseMajorMinor("1.2.0", out shortVersion);
6861
Assert.IsTrue(result);
6962

70-
Assert.AreEqual(1, major);
71-
Assert.AreEqual(2, minor);
63+
Assert.AreEqual(1, shortVersion.Major);
64+
Assert.AreEqual(2, shortVersion.Minor);
7265
}
7366
}

GitVersionCore/GitFlow/BranchFinders/MasterVersionFinder.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ class MasterVersionFinder
66
{
77
public SemanticVersion FindVersion(IRepository repository, Commit tip)
88
{
9-
int major;
10-
int minor;
11-
int patch;
129
foreach (var tag in repository.TagsByDate(tip))
1310
{
14-
if (ShortVersionParser.TryParse(tag.Name, out major, out minor, out patch))
11+
ShortVersion shortVersion;
12+
if (ShortVersionParser.TryParse(tag.Name, out shortVersion))
1513
{
16-
return BuildVersion(repository, tip, major, minor, patch);
14+
return BuildVersion(repository, tip, shortVersion);
1715
}
1816
}
1917

@@ -22,9 +20,10 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
2220
string versionString;
2321
if (MergeMessageParser.TryParse(tip, out versionString))
2422
{
25-
if (ShortVersionParser.TryParse(versionString, out major, out minor, out patch))
23+
ShortVersion shortVersion;
24+
if (ShortVersionParser.TryParse(versionString, out shortVersion))
2625
{
27-
semanticVersion = BuildVersion(repository, tip, major, minor, patch);
26+
semanticVersion = BuildVersion(repository, tip, shortVersion);
2827
}
2928
}
3029

@@ -36,14 +35,14 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
3635
return semanticVersion;
3736
}
3837

39-
SemanticVersion BuildVersion(IRepository repository, Commit tip, int major, int minor, int patch)
38+
SemanticVersion BuildVersion(IRepository repository, Commit tip, ShortVersion shortVersion)
4039
{
41-
var releaseDate = ReleaseDateFinder.Execute(repository, tip.Sha, patch);
40+
var releaseDate = ReleaseDateFinder.Execute(repository, tip.Sha, shortVersion.Patch);
4241
return new SemanticVersion
4342
{
44-
Major = major,
45-
Minor = minor,
46-
Patch = patch,
43+
Major = shortVersion.Major,
44+
Minor = shortVersion.Minor,
45+
Patch = shortVersion.Patch,
4746
BuildMetaData = new SemanticVersionBuildMetaData(null, "master", releaseDate)
4847
};
4948
}

GitVersionCore/GitFlow/BranchFinders/SupportVersionFinder.cs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ class SupportVersionFinder
66
{
77
public SemanticVersion FindVersion(IRepository repository, Commit tip)
88
{
9-
int major;
10-
int minor;
11-
int patch;
129
foreach (var tag in repository.TagsByDate(tip))
1310
{
14-
if (ShortVersionParser.TryParse(tag.Name, out major, out minor, out patch))
11+
ShortVersion shortVersion;
12+
if (ShortVersionParser.TryParse(tag.Name, out shortVersion))
1513
{
16-
return BuildVersion(repository, tip, major, minor, patch);
14+
return BuildVersion(repository, tip, shortVersion);
1715
}
1816
}
1917

@@ -22,9 +20,10 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
2220
string versionString;
2321
if (MergeMessageParser.TryParse(tip, out versionString))
2422
{
25-
if (ShortVersionParser.TryParse(versionString, out major, out minor, out patch))
23+
ShortVersion shortVersion;
24+
if (ShortVersionParser.TryParse(versionString, out shortVersion))
2625
{
27-
semanticVersion = BuildVersion(repository, tip, major, minor, patch);
26+
semanticVersion = BuildVersion(repository, tip, shortVersion);
2827
}
2928
}
3029

@@ -38,14 +37,14 @@ public SemanticVersion FindVersion(IRepository repository, Commit tip)
3837
return semanticVersion;
3938
}
4039

41-
SemanticVersion BuildVersion(IRepository repository, Commit tip, int major, int minor, int patch)
40+
SemanticVersion BuildVersion(IRepository repository, Commit tip, ShortVersion shortVersion)
4241
{
43-
var releaseDate = ReleaseDateFinder.Execute(repository, tip.Sha, patch);
42+
var releaseDate = ReleaseDateFinder.Execute(repository, tip.Sha, shortVersion.Patch);
4443
return new SemanticVersion
4544
{
46-
Major = major,
47-
Minor = minor,
48-
Patch = patch,
45+
Major = shortVersion.Major,
46+
Minor = shortVersion.Minor,
47+
Patch = shortVersion.Patch,
4948
BuildMetaData = new SemanticVersionBuildMetaData(null, "support", releaseDate)
5049
};
5150
}

GitVersionCore/GitHubFlow/MergedBranchesWithVersionFinder.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ public SemanticVersion GetVersion()
1919

2020
SemanticVersion GetVersion(GitVersionContext context)
2121
{
22+
23+
foreach (var commit in context.CurrentBranch.Commits)
24+
{
25+
string versionPart;
26+
if (MergeMessageParser.TryParse(commit, out versionPart))
27+
{
28+
29+
}
30+
}
2231
return context.CurrentBranch.Commits.Where(c =>
2332
{
2433
string versionPart;

GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<Compile Include="BuildServers\TeamCity.cs" />
6666
<Compile Include="CachedVersion.cs" />
6767
<Compile Include="DirectoryDateFinder.cs" />
68+
<Compile Include="ShortVersion.cs" />
6869
<Compile Include="SemanticVersionExtensions.cs" />
6970
<Compile Include="WarningException.cs" />
7071
<Compile Include="ExtensionMethods.cs" />

GitVersionCore/MergeMessageParser.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ static class MergeMessageParser
88
{
99
public static bool TryParse(Commit mergeCommit, out string versionPart)
1010
{
11+
return Inner(mergeCommit, out versionPart);
12+
}
1113

14+
static bool Inner(Commit mergeCommit, out string versionPart)
15+
{
1216
if (mergeCommit.Parents.Count() < 2)
1317
{
1418
versionPart = null;
@@ -55,21 +59,24 @@ public static bool TryParse(Commit mergeCommit, out string versionPart)
5559

5660
if (message.StartsWith("Merge pull request #"))
5761
{
58-
var split = message.Split(new[] { "/" },StringSplitOptions.RemoveEmptyEntries);
62+
var split = message.Split(new[]
63+
{
64+
"/"
65+
}, StringSplitOptions.RemoveEmptyEntries);
5966
if (split.Length != 2)
6067
{
6168
versionPart = null;
6269
return false;
6370
}
6471
return split[1].TryGetSuffix(out versionPart, "-");
6572
}
66-
73+
6774
if (message.StartsWith("Finish Release-")) //Match Syntevo SmartGit client's GitFlow 'release' merge commit message formatting
6875
{
6976
versionPart = message.Replace("Finish Release-", "");
7077
return true;
7178
}
72-
79+
7380
if (message.StartsWith("Finish ")) //Match Syntevo SmartGit client's GitFlow 'hotfix' merge commit message formatting
7481
{
7582
versionPart = message.Replace("Finish ", "");

GitVersionCore/ShortVersion.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace GitVersion
2+
{
3+
4+
class ShortVersion
5+
{
6+
public int Major;
7+
public int Minor;
8+
public int Patch;
9+
}
10+
}

GitVersionCore/ShortVersionParser.cs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,61 @@ namespace GitVersion
22
{
33
using System;
44

5-
//TODO Replace with SemVer class
6-
public class ShortVersionParser
5+
class ShortVersionParser
76
{
8-
public static void Parse(string versionString, out int major, out int minor, out int patch)
7+
public static void Parse(string versionString, out ShortVersion shortVersion)
98
{
10-
if (!TryParse(versionString, out major, out minor, out patch))
9+
if (!TryParse(versionString, out shortVersion))
1110
{
12-
Throw(versionString);
11+
throw new Exception(string.Format("Could not parse version from '{0}' expected 'major.minor.patch'", versionString));
1312
}
1413
}
1514

16-
public static bool TryParseMajorMinor(string versionString, out int major, out int minor)
15+
public static bool TryParseMajorMinor(string versionString, out ShortVersion shortVersion)
1716
{
18-
int patch;
19-
20-
if (!TryParse(versionString, out major, out minor, out patch))
17+
if (!TryParse(versionString, out shortVersion))
2118
{
2219
return false;
2320
}
2421

2522
// Note: during scanning of master we only want the last major / minor, not the patch, so patch must be zero
26-
return patch == 0;
23+
return shortVersion.Patch == 0;
2724
}
2825

29-
public static bool TryParse(string versionString, out int major, out int minor, out int patch)
26+
public static bool TryParse(string versionString, out ShortVersion shortVersion)
3027
{
31-
major = 0;
32-
minor = 0;
33-
patch = 0;
28+
var major = 0;
29+
var minor = 0;
30+
var patch = 0;
3431
var strings = versionString.Split('.');
3532
if (strings.Length < 2 || strings.Length > 3)
3633
{
34+
shortVersion = null;
3735
return false;
3836
}
3937
if (!int.TryParse(strings[0], out major))
4038
{
39+
shortVersion = null;
4140
return false;
4241
}
4342

4443
if (!int.TryParse(strings[1], out minor))
4544
{
45+
shortVersion = null;
4646
return false;
4747
}
4848

4949
if (strings.Length == 3)
5050
{
5151
if (!int.TryParse(strings[2], out patch))
5252
{
53+
shortVersion = null;
5354
return false;
5455
}
5556
}
5657

58+
shortVersion = new ShortVersion{Major = major,Minor = minor,Patch = patch};
5759
return true;
5860
}
59-
60-
static void Throw(string versionString)
61-
{
62-
throw new Exception(string.Format("Could not parse version from '{0}' expected 'major.minor.patch'", versionString));
63-
}
6461
}
6562
}

0 commit comments

Comments
 (0)