Skip to content

Commit b4f6e8a

Browse files
committed
Added support for assembly-versioning-format, updated testcase for FormatWith, updated docs
1 parent 8a16bcb commit b4f6e8a

File tree

9 files changed

+86
-39
lines changed

9 files changed

+86
-39
lines changed

docs/configuration.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ Example Syntax #2: `'{Major}.{Minor}.{Patch}.{$JENKINS_BUILD_NUMBER}'`. Uses `J
8181
if available in the environment otherwise the parsing fails.
8282
String interpolation is supported as in `assembly-informational-format`
8383

84+
### assembly-versioning-format
85+
Follows the same semantics as `assembly-file-versioning-format` and overwrites the value of `assembly-versioning-scheme`.
86+
8487
### assembly-informational-format
8588
Set this to any of the available [variables](/more-info/variables) to change the
8689
value of the `AssemblyInformationalVersion` attribute. Default set to

src/GitVersionCore.Tests/CommitDateTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void CommitDateFormatTest(string format, string expectedOutcome)
2727

2828
},
2929
new EffectiveConfiguration(
30-
AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit,
30+
AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit,
3131
"", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty<IVersionFilter>(), false, true, format)
3232
);
3333

src/GitVersionCore.Tests/StringFormatWithExtensionTests.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,48 @@ public void FormatWith_UnsetEnvVarTokenWithFallback()
7171
var actual = target.FormatWith(propertyObject);
7272
Assert.AreEqual(expected, actual);
7373
}
74+
75+
[Test]
76+
public void FormatWith_MultipleEnvVars()
77+
{
78+
Environment.SetEnvironmentVariable("GIT_VERSION_TEST_VAR_1", "Val-1");
79+
Environment.SetEnvironmentVariable("GIT_VERSION_TEST_VAR_2", "Val-2");
80+
var propertyObject = new { };
81+
var target = "{$GIT_VERSION_TEST_VAR_1} and {$GIT_VERSION_TEST_VAR_2}";
82+
var expected = "Val-1 and Val-2";
83+
var actual = target.FormatWith(propertyObject);
84+
Assert.AreEqual(expected, actual);
85+
}
86+
87+
[Test]
88+
public void FormatWith_MultipleEnvChars()
89+
{
90+
var propertyObject = new { };
91+
//Test the greediness of the regex in matching $ char
92+
var target = "{$$GIT_VERSION_TEST_VAR_1} and {$DUMMY_VAR??fallback}";
93+
var expected = "{$$GIT_VERSION_TEST_VAR_1} and fallback";
94+
var actual = target.FormatWith(propertyObject);
95+
Assert.AreEqual(expected, actual);
96+
}
97+
98+
[Test]
99+
public void FormatWith_MultipleFallbackChars()
100+
{
101+
var propertyObject = new { };
102+
//Test the greediness of the regex in matching $ and ?? chars
103+
var target = "{$$GIT_VERSION_TEST_VAR_1} and {$DUMMY_VAR???fallback}";
104+
var actual = target.FormatWith(propertyObject);
105+
Assert.AreEqual(target, actual);
106+
}
107+
108+
[Test]
109+
public void FormatWith_SingleFallbackChar()
110+
{
111+
var propertyObject = new { };
112+
//Test the sanity of the regex when there is a grammar mismatch
113+
var target = "SomeNumbers and {$DUMMY_VAR?fallback}";
114+
var actual = target.FormatWith(propertyObject);
115+
Assert.AreEqual(target, actual);
116+
}
74117
}
75118
}

src/GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class TestEffectiveConfiguration : EffectiveConfiguration
1010
public TestEffectiveConfiguration(
1111
AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
1212
AssemblyFileVersioningScheme assemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch,
13-
string assemblyFileVersioningSchemeFormat = null,
13+
string assemblyVersioningFormat = null,
14+
string assemblyFileVersioningFormat = null,
1415
string assemblyInformationalFormat = null,
1516
VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
1617
string gitTagPrefix = "v",
@@ -33,7 +34,7 @@ public TestEffectiveConfiguration(
3334
bool tracksReleaseBranches = false,
3435
bool isRelease = false,
3536
string commitDateFormat = "yyyy-MM-dd") :
36-
base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyFileVersioningSchemeFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
37+
base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
3738
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
3839
trackMergeTarget,
3940
majorMessage, minorMessage, patchMessage, noBumpMessage,

src/GitVersionCore/Configuration/Config.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ public Config()
2626
[YamlMember(Alias = "assembly-informational-format")]
2727
public string AssemblyInformationalFormat { get; set; }
2828

29+
[YamlMember(Alias = "assembly-versioning-format")]
30+
public string AssemblyVersioningFormat { get; set; }
31+
2932
[YamlMember(Alias = "assembly-file-versioning-format")]
3033
public string AssemblyFileVersioningFormat { get; set; }
3134

src/GitVersionCore/Configuration/ConfigurationProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public static void ApplyDefaultsTo(Config config)
8888
config.AssemblyVersioningScheme = config.AssemblyVersioningScheme ?? AssemblyVersioningScheme.MajorMinorPatch;
8989
config.AssemblyFileVersioningScheme = config.AssemblyFileVersioningScheme ?? AssemblyFileVersioningScheme.MajorMinorPatch;
9090
config.AssemblyInformationalFormat = config.AssemblyInformationalFormat;
91+
config.AssemblyVersioningFormat = config.AssemblyVersioningFormat;
9192
config.AssemblyFileVersioningFormat = config.AssemblyFileVersioningFormat;
9293
config.TagPrefix = config.TagPrefix ?? DefaultTagPrefix;
9394
config.VersioningMode = config.VersioningMode ?? VersioningMode.ContinuousDelivery;

src/GitVersionCore/EffectiveConfiguration.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public EffectiveConfiguration(
1212
AssemblyVersioningScheme assemblyVersioningScheme,
1313
AssemblyFileVersioningScheme assemblyFileVersioningScheme,
1414
string assemblyInformationalFormat,
15+
string assemblyVersioningFormat,
1516
string assemblyFileVersioningFormat,
1617
VersioningMode versioningMode, string gitTagPrefix,
1718
string tag, string nextVersion, IncrementStrategy increment,
@@ -36,6 +37,7 @@ public EffectiveConfiguration(
3637
AssemblyVersioningScheme = assemblyVersioningScheme;
3738
AssemblyFileVersioningScheme = assemblyFileVersioningScheme;
3839
AssemblyInformationalFormat = assemblyInformationalFormat;
40+
AssemblyVersioningFormat = assemblyVersioningFormat;
3941
AssemblyFileVersioningFormat = assemblyFileVersioningFormat;
4042
VersioningMode = versioningMode;
4143
GitTagPrefix = gitTagPrefix;
@@ -69,6 +71,7 @@ public EffectiveConfiguration(
6971
public AssemblyVersioningScheme AssemblyVersioningScheme { get; private set; }
7072
public AssemblyFileVersioningScheme AssemblyFileVersioningScheme { get; private set; }
7173
public string AssemblyInformationalFormat { get; private set; }
74+
public string AssemblyVersioningFormat { get; private set; }
7275
public string AssemblyFileVersioningFormat { get; private set; }
7376

7477
/// <summary>

src/GitVersionCore/GitVersionContext.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ void CalculateEffectiveConfiguration()
122122
var assemblyVersioningScheme = FullConfiguration.AssemblyVersioningScheme.Value;
123123
var assemblyFileVersioningScheme = FullConfiguration.AssemblyFileVersioningScheme.Value;
124124
var assemblyInformationalFormat = FullConfiguration.AssemblyInformationalFormat;
125+
var assemblyVersioningFormat = FullConfiguration.AssemblyVersioningFormat;
125126
var assemblyFileVersioningFormat = FullConfiguration.AssemblyFileVersioningFormat;
126127
var gitTagPrefix = FullConfiguration.TagPrefix;
127128
var majorMessage = FullConfiguration.MajorVersionBumpMessage;
@@ -133,7 +134,7 @@ void CalculateEffectiveConfiguration()
133134
var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value;
134135

135136
Configuration = new EffectiveConfiguration(
136-
assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix,
137+
assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix,
137138
tag, nextVersion, incrementStrategy,
138139
currentBranchConfig.Regex,
139140
preventIncrementForMergedBranchVersion,

src/GitVersionCore/OutputVariables/VariableProvider.cs

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -44,43 +44,16 @@ public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion,
4444
var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config);
4545

4646
string informationalVersion;
47+
CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.DefaultInformationalVersion,
48+
"AssemblyInformationalVersion", out informationalVersion);
4749

48-
if (string.IsNullOrEmpty(config.AssemblyInformationalFormat))
49-
{
50-
informationalVersion = semverFormatValues.DefaultInformationalVersion;
51-
}
52-
else
53-
{
54-
try
55-
{
56-
informationalVersion = config.AssemblyInformationalFormat.FormatWith<SemanticVersionFormatValues>(semverFormatValues);
57-
}
58-
catch (ArgumentException formex)
59-
{
60-
throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message));
61-
}
62-
}
63-
64-
string assemblyFileVersioningFormat;
6550
string assemblyFileSemVer;
51+
CheckAndFormatString(config.AssemblyFileVersioningFormat, semverFormatValues, semverFormatValues.AssemblyFileSemVer,
52+
"AssemblyFileVersioningFormat", out assemblyFileSemVer);
6653

67-
if (!(string.IsNullOrEmpty(config.AssemblyFileVersioningFormat)))
68-
{
69-
//assembly-file-versioning-format value if provided in the config, overwrites the exisiting AssemblyFileSemVer
70-
try
71-
{
72-
assemblyFileVersioningFormat = config.AssemblyFileVersioningFormat.FormatWith<SemanticVersionFormatValues>(semverFormatValues);
73-
assemblyFileSemVer = assemblyFileVersioningFormat;
74-
}
75-
catch (ArgumentException formex)
76-
{
77-
throw new WarningException(string.Format("Unable to format AssemblyFileVersioningFormat. Check your format string: {0}", formex.Message));
78-
}
79-
}
80-
else
81-
{
82-
assemblyFileSemVer = semverFormatValues.AssemblyFileSemVer;
83-
}
54+
string assemblySemVer;
55+
CheckAndFormatString(config.AssemblyVersioningFormat, semverFormatValues, semverFormatValues.AssemblySemVer,
56+
"AssemblyVersioningFormat", out assemblySemVer);
8457

8558
var variables = new VersionVariables(
8659
semverFormatValues.Major,
@@ -96,7 +69,7 @@ public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion,
9669
semverFormatValues.LegacySemVer,
9770
semverFormatValues.LegacySemVerPadded,
9871
semverFormatValues.FullSemVer,
99-
semverFormatValues.AssemblySemVer,
72+
assemblySemVer,
10073
assemblyFileSemVer,
10174
semverFormatValues.PreReleaseTag,
10275
semverFormatValues.PreReleaseTagWithDash,
@@ -121,5 +94,24 @@ static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVersion)
12194
semanticVersion.BuildMetaData.CommitsSinceVersionSource = semanticVersion.BuildMetaData.CommitsSinceTag ?? 0;
12295
semanticVersion.BuildMetaData.CommitsSinceTag = null;
12396
}
97+
98+
static void CheckAndFormatString<T>(string formatString, T source, string defaultValue, string formatVarName, out string formattedString)
99+
{
100+
if (string.IsNullOrEmpty(formatString))
101+
{
102+
formattedString = defaultValue;
103+
}
104+
else
105+
{
106+
try
107+
{
108+
formattedString = formatString.FormatWith(source);
109+
}
110+
catch (ArgumentException formex)
111+
{
112+
throw new WarningException(string.Format("Unable to format {0}. Check your format string: {1}", formatVarName, formex.Message));
113+
}
114+
}
115+
}
124116
}
125117
}

0 commit comments

Comments
 (0)