void CalculateEffectiveConfiguration()
{
var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(this, CurrentBranch);
if (!currentBranchConfig.VersioningMode.HasValue)
throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!currentBranchConfig.Increment.HasValue)
throw new Exception(string.Format("Configuration value for 'Increment' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!currentBranchConfig.PreventIncrementOfMergedBranchVersion.HasValue)
throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!currentBranchConfig.TrackMergeTarget.HasValue)
throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!currentBranchConfig.TracksReleaseBranches.HasValue)
throw new Exception(string.Format("Configuration value for 'TracksReleaseBranches' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!currentBranchConfig.IsReleaseBranch.HasValue)
throw new Exception(string.Format("Configuration value for 'IsReleaseBranch' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Name));
if (!FullConfiguration.AssemblyVersioningScheme.HasValue)
throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)");
if (!FullConfiguration.CommitMessageIncrementing.HasValue)
throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)");
if (!FullConfiguration.LegacySemVerPadding.HasValue)
throw new Exception("Configuration value for 'LegacySemVerPadding' has no value. (this should not happen, please report an issue)");
if (!FullConfiguration.BuildMetaDataPadding.HasValue)
throw new Exception("Configuration value for 'BuildMetaDataPadding' has no value. (this should not happen, please report an issue)");
if (!FullConfiguration.CommitsSinceVersionSourcePadding.HasValue)
throw new Exception("Configuration value for 'CommitsSinceVersionSourcePadding' has no value. (this should not happen, please report an issue)");
var versioningMode = currentBranchConfig.VersioningMode.Value;
var tag = currentBranchConfig.Tag;
var tagNumberPattern = currentBranchConfig.TagNumberPattern;
var incrementStrategy = currentBranchConfig.Increment.Value;
var preventIncrementForMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion.Value;
var trackMergeTarget = currentBranchConfig.TrackMergeTarget.Value;
var nextVersion = FullConfiguration.NextVersion;
var assemblyVersioningScheme = FullConfiguration.AssemblyVersioningScheme.Value;
var assemblyInformationalFormat = FullConfiguration.AssemblyInformationalFormat;
var gitTagPrefix = FullConfiguration.TagPrefix;
var majorMessage = FullConfiguration.MajorVersionBumpMessage;
var minorMessage = FullConfiguration.MinorVersionBumpMessage;
var patchMessage = FullConfiguration.PatchVersionBumpMessage;
var noBumpMessage = FullConfiguration.NoBumpMessage;
var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value;
Configuration = new EffectiveConfiguration(
assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix,
tag, nextVersion, incrementStrategy,
currentBranchConfig.Regex,
preventIncrementForMergedBranchVersion,
tagNumberPattern, FullConfiguration.ContinuousDeploymentFallbackTag,
trackMergeTarget,
majorMessage, minorMessage, patchMessage, noBumpMessage,
commitMessageVersionBump,
FullConfiguration.LegacySemVerPadding.Value,
FullConfiguration.BuildMetaDataPadding.Value,
FullConfiguration.CommitsSinceVersionSourcePadding.Value,
FullConfiguration.Ignore.ToFilters(),
currentBranchConfig.TracksReleaseBranches.Value,
currentBranchConfig.IsReleaseBranch.Value);
}