public SemanticVersion FindVersion(GitVersionContext context)
{
SemanticVersion taggedSemanticVersion = null;
// If current commit is tagged, don't do anything except add build metadata
if (context.IsCurrentCommitTagged)
{
// Will always be 0, don't bother with the +0 on tags
var semanticVersionBuildMetaData = metaDataCalculator.Create(context.CurrentCommit, context);
semanticVersionBuildMetaData.CommitsSinceTag = null;
var semanticVersion = new SemanticVersion(context.CurrentCommitTaggedVersion)
{
BuildMetaData = semanticVersionBuildMetaData
};
taggedSemanticVersion = semanticVersion;
}
var baseVersion = baseVersionFinder.GetBaseVersion(context);
SemanticVersion semver;
if (context.Configuration.VersioningMode == VersioningMode.Mainline)
semver = FindMainlineModeVersion(baseVersion, context);
else
{
semver = PerformIncrement(context, baseVersion);
semver.BuildMetaData = metaDataCalculator.Create(baseVersion.BaseVersionSource, context);
}
if (!semver.PreReleaseTag.HasTag() && !string.IsNullOrEmpty(context.Configuration.Tag))
{
UpdatePreReleaseTag(context, semver, baseVersion.BranchNameOverride);
}
if (taggedSemanticVersion != null)
{
// set the commit count on the tagged ver
taggedSemanticVersion.BuildMetaData.CommitsSinceVersionSource = semver.BuildMetaData.CommitsSinceVersionSource;
}
return taggedSemanticVersion ?? semver;
}