Skip to content

Commit 2394a10

Browse files
committed
Merge pull request #476 from JakeGinnivan/feature/SmallUpdates
Few minor changes, moving increment logic to SemVer class
2 parents 3d25e8c + 0214a53 commit 2394a10

File tree

7 files changed

+68
-55
lines changed

7 files changed

+68
-55
lines changed

GitVersionCore.Tests/Fixtures/RepositoryFixtureBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ protected RepositoryFixtureBase(Func<string, IRepository> repoBuilder, Config co
2424

2525
public void AssertFullSemver(string fullSemver, IRepository repository = null, string commitId = null)
2626
{
27+
Trace.WriteLine("---------");
2728
var gitVersionContext = new GitVersionContext(repository ?? Repository, configuration, IsForTrackedBranchOnly, commitId);
2829
var executeGitVersion = ExecuteGitVersion(gitVersionContext);
2930
var variables = VariableProvider.GetVariablesFor(executeGitVersion,
@@ -38,7 +39,7 @@ public void AssertFullSemver(string fullSemver, IRepository repository = null, s
3839
catch (Exception)
3940
{
4041
Trace.WriteLine("Test failing, dumping repository graph");
41-
repository.DumpGraph();
42+
gitVersionContext.Repository.DumpGraph();
4243
throw;
4344
}
4445
}

GitVersionCore/EffectiveConfiguration.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public EffectiveConfiguration(
5353
public string TagNumberPattern { get; private set; }
5454

5555
public string ContinuousDeploymentFallbackTag { get; private set; }
56+
5657
public bool TrackMergeTarget { get; private set; }
5758
}
5859
}

GitVersionCore/GitVersionFinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class GitVersionFinder
1010
{
1111
public SemanticVersion FindVersion(GitVersionContext context)
1212
{
13-
Logger.WriteInfo("Running against branch: " + context.CurrentBranch.Name);
13+
Logger.WriteInfo(string.Format("Running against branch: {0} ({1})", context.CurrentBranch.Name, context.CurrentCommit.Sha));
1414
EnsureMainTopologyConstraints(context);
1515

1616
var filePath = Path.Combine(context.Repository.GetRepositoryDirectory(), "NextVersion.txt");

GitVersionCore/SemanticVersion.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,5 +271,47 @@ public string ToString(string format, IFormatProvider formatProvider = null)
271271
throw new ArgumentException(string.Format("Unrecognised format '{0}'", format), "format");
272272
}
273273
}
274+
275+
public SemanticVersion IncrementVersion(IncrementStrategy incrementStrategy)
276+
{
277+
var incremented = new SemanticVersion(this);
278+
if (!incremented.PreReleaseTag.HasTag())
279+
{
280+
switch (incrementStrategy)
281+
{
282+
case IncrementStrategy.None:
283+
Logger.WriteInfo("Skipping version increment");
284+
break;
285+
case IncrementStrategy.Major:
286+
Logger.WriteInfo("Incrementing Major Version");
287+
incremented.Major++;
288+
incremented.Minor = 0;
289+
incremented.Patch = 0;
290+
break;
291+
case IncrementStrategy.Minor:
292+
incremented.Minor++;
293+
incremented.Patch = 0;
294+
Logger.WriteInfo("Incrementing Minor Version");
295+
break;
296+
case IncrementStrategy.Patch:
297+
incremented.Patch++;
298+
Logger.WriteInfo("Incrementing Patch Version");
299+
break;
300+
default:
301+
throw new ArgumentOutOfRangeException();
302+
}
303+
}
304+
else
305+
{
306+
if (incremented.PreReleaseTag.Number != null)
307+
{
308+
Logger.WriteInfo("Incrementing prerelease");
309+
incremented.PreReleaseTag.Number = incremented.PreReleaseTag.Number;
310+
incremented.PreReleaseTag.Number++;
311+
}
312+
}
313+
314+
return incremented;
315+
}
274316
}
275317
}

GitVersionCore/VersionCalculation/BaseVersionCalculators/BaseVersion.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public BaseVersion(string source, bool shouldIncrement, SemanticVersion semantic
2525

2626
public override string ToString()
2727
{
28-
return string.Format("{0}: {1} from commit {2}", Source, SemanticVersion.ToString("f"), BaseVersionSource == null ? "External Source" : BaseVersionSource.Sha);
28+
return string.Format("{0}: {1} with commit count source {2}", Source, SemanticVersion.ToString("f"), BaseVersionSource == null ? "External Source" : BaseVersionSource.Sha);
2929
}
3030
}
3131
}
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
namespace GitVersion.VersionCalculation
22
{
33
using System.Linq;
4-
using GitVersion.VersionCalculation.BaseVersionCalculators;
4+
using BaseVersionCalculators;
5+
using LibGit2Sharp;
56

67
public class FallbackBaseVersionStrategy : BaseVersionStrategy
78
{
89
public override BaseVersion GetVersion(GitVersionContext context)
910
{
10-
return new BaseVersion("Fallback base version", false, new SemanticVersion(minor: 1), context.CurrentBranch.Commits.Last(), null);
11+
var baseVersionSource = context.Repository.Commits.QueryBy(new CommitFilter
12+
{
13+
Since = context.CurrentBranch.Tip
14+
}).First(c => !c.Parents.Any());
15+
return new BaseVersion("Fallback base version", false, new SemanticVersion(minor: 1), baseVersionSource, null);
1116
}
1217
}
1318
}
Lines changed: 14 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
namespace GitVersion.VersionCalculation
22
{
3-
using System;
43
using System.Text.RegularExpressions;
5-
using BaseVersionCalculators;
4+
using GitVersion.VersionCalculation.BaseVersionCalculators;
65

76
public class NextVersionCalculator
87
{
@@ -40,27 +39,30 @@ public SemanticVersion FindVersion(GitVersionContext context)
4039
}
4140

4241
var baseVersion = baseVersionFinder.GetBaseVersion(context);
43-
44-
if (baseVersion.ShouldIncrement) IncrementVersion(context, baseVersion);
42+
var semver = baseVersion.SemanticVersion;
43+
if (baseVersion.ShouldIncrement)
44+
{
45+
semver = semver.IncrementVersion(context.Configuration.Increment);
46+
}
4547
else Logger.WriteInfo("Skipping version increment");
4648

47-
if (!baseVersion.SemanticVersion.PreReleaseTag.HasTag() && !string.IsNullOrEmpty(context.Configuration.Tag))
49+
if (!semver.PreReleaseTag.HasTag() && !string.IsNullOrEmpty(context.Configuration.Tag))
4850
{
49-
UpdatePreReleaseTag(context, baseVersion);
51+
UpdatePreReleaseTag(context, semver, baseVersion.BranchNameOverride);
5052
}
5153

52-
baseVersion.SemanticVersion.BuildMetaData = metaDataCalculator.Create(baseVersion.BaseVersionSource, context);
54+
semver.BuildMetaData = metaDataCalculator.Create(baseVersion.BaseVersionSource, context);
5355

54-
return baseVersion.SemanticVersion;
56+
return semver;
5557
}
5658

57-
void UpdatePreReleaseTag(GitVersionContext context, BaseVersion baseVersion)
59+
void UpdatePreReleaseTag(GitVersionContext context, SemanticVersion semanticVersion, string branchNameOverride)
5860
{
5961
var tagToUse = context.Configuration.Tag;
6062
if (tagToUse == "useBranchName")
6163
{
6264
Logger.WriteInfo("Using branch name to calculate version tag");
63-
var name = baseVersion.BranchNameOverride ?? context.CurrentBranch.Name;
65+
var name = branchNameOverride ?? context.CurrentBranch.Name;
6466
tagToUse = name.RegexReplace(context.Configuration.BranchPrefixToTrim, string.Empty, RegexOptions.IgnoreCase);
6567
}
6668
int? number = null;
@@ -77,7 +79,7 @@ void UpdatePreReleaseTag(GitVersionContext context, BaseVersion baseVersion)
7779
var lastTag = highestTagBaseVersionStrategy.GetVersion(context);
7880
if (number == null &&
7981
lastTag != null &&
80-
MajorMinorPatchEqual(lastTag.SemanticVersion, baseVersion.SemanticVersion) &&
82+
MajorMinorPatchEqual(lastTag.SemanticVersion, semanticVersion) &&
8183
lastTag.SemanticVersion.PreReleaseTag.HasTag())
8284
{
8385
number = lastTag.SemanticVersion.PreReleaseTag.Number + 1;
@@ -88,7 +90,7 @@ void UpdatePreReleaseTag(GitVersionContext context, BaseVersion baseVersion)
8890
number = 1;
8991
}
9092

91-
baseVersion.SemanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, number);
93+
semanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, number);
9294
}
9395

9496
static bool MajorMinorPatchEqual(SemanticVersion lastTag, SemanticVersion baseVersion)
@@ -97,43 +99,5 @@ static bool MajorMinorPatchEqual(SemanticVersion lastTag, SemanticVersion baseVe
9799
lastTag.Minor == baseVersion.Minor &&
98100
lastTag.Patch == baseVersion.Patch;
99101
}
100-
101-
static void IncrementVersion(GitVersionContext context, BaseVersion baseVersion)
102-
{
103-
if (!baseVersion.SemanticVersion.PreReleaseTag.HasTag())
104-
{
105-
switch (context.Configuration.Increment)
106-
{
107-
case IncrementStrategy.None:
108-
Logger.WriteInfo("Skipping version increment");
109-
break;
110-
case IncrementStrategy.Major:
111-
Logger.WriteInfo("Incrementing Major Version");
112-
baseVersion.SemanticVersion.Major++;
113-
baseVersion.SemanticVersion.Minor = 0;
114-
baseVersion.SemanticVersion.Patch = 0;
115-
break;
116-
case IncrementStrategy.Minor:
117-
baseVersion.SemanticVersion.Minor++;
118-
baseVersion.SemanticVersion.Patch = 0;
119-
Logger.WriteInfo("Incrementing Minor Version");
120-
break;
121-
case IncrementStrategy.Patch:
122-
baseVersion.SemanticVersion.Patch++;
123-
Logger.WriteInfo("Incrementing Patch Version");
124-
break;
125-
default:
126-
throw new ArgumentOutOfRangeException();
127-
}
128-
}
129-
else
130-
{
131-
if (baseVersion.SemanticVersion.PreReleaseTag.Number != null)
132-
{
133-
baseVersion.SemanticVersion.PreReleaseTag.Number = baseVersion.SemanticVersion.PreReleaseTag.Number;
134-
baseVersion.SemanticVersion.PreReleaseTag.Number++;
135-
}
136-
}
137-
}
138102
}
139103
}

0 commit comments

Comments
 (0)