Skip to content

Commit 73beefa

Browse files
committed
Merge pull request #660 from MarkZuber/feature/assemblyInfoUpdates
Add support and tests for AssemblyInformationalVersion configurability
2 parents 4b40f63 + 9b1fd45 commit 73beefa

18 files changed

+653
-30
lines changed

src/GitVersionCore.Tests/ConfigProviderTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public void CanReadDocumentAndMigrate()
4343

4444
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
4545
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor);
46+
config.AssemblyInformationalFormat.ShouldBe(null);
4647
config.NextVersion.ShouldBe("2.0.0");
4748
config.TagPrefix.ShouldBe("[vV|version-]");
4849
config.VersioningMode.ShouldBe(VersioningMode.ContinuousDelivery);
@@ -110,13 +111,42 @@ public void CanWriteOutEffectiveConfiguration()
110111
Approvals.Verify(config);
111112
}
112113

114+
[Test]
115+
public void CanUpdateAssemblyInformationalVersioningScheme()
116+
{
117+
const string text = @"
118+
assembly-versioning-scheme: MajorMinor
119+
assembly-informational-format: '{NugetVersion}'";
120+
121+
SetupConfigFileContent(text);
122+
123+
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
124+
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor);
125+
config.AssemblyInformationalFormat.ShouldBe("{NugetVersion}");
126+
}
127+
128+
[Test]
129+
public void CanUpdateAssemblyInformationalVersioningSchemeWithMultipleVariables()
130+
{
131+
const string text = @"
132+
assembly-versioning-scheme: MajorMinor
133+
assembly-informational-format: '{Major}.{Minor}.{Patch}'";
134+
135+
SetupConfigFileContent(text);
136+
137+
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
138+
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor);
139+
config.AssemblyInformationalFormat.ShouldBe("{Major}.{Minor}.{Patch}");
140+
}
141+
113142
[Test]
114143
public void CanReadDefaultDocument()
115144
{
116145
const string text = "";
117146
SetupConfigFileContent(text);
118147
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
119148
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch);
149+
config.AssemblyInformationalFormat.ShouldBe(null);
120150
config.Branches["dev(elop)?(ment)?$"].Tag.ShouldBe("unstable");
121151
config.Branches["releases?[/-]"].Tag.ShouldBe("beta");
122152
config.TagPrefix.ShouldBe(ConfigurationProvider.DefaultTagPrefix);

src/GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class TestEffectiveConfiguration : EffectiveConfiguration
66
{
77
public TestEffectiveConfiguration(
88
AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch,
9+
string assemblyInformationalFormat = null,
910
VersioningMode versioningMode = VersioningMode.ContinuousDelivery,
1011
string gitTagPrefix = "v",
1112
string tag = "",
@@ -21,7 +22,7 @@ public TestEffectiveConfiguration(
2122
CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
2223
int legacySemVerPadding = 4,
2324
int buildMetaDataPadding = 4) :
24-
base(assemblyVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
25+
base(assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
2526
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
2627
trackMergeTarget,
2728
majorMessage, minorMessage, patchMessage,

src/GitVersionCore/AssemblyVersionsGenerator.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ public static string GetAssemblyVersion(
2121
default:
2222
throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
2323
}
24-
2524
}
26-
2725
}
2826
}

src/GitVersionCore/Configuration/Config.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public class Config
1111
[YamlMember(Alias = "assembly-versioning-scheme")]
1212
public AssemblyVersioningScheme? AssemblyVersioningScheme { get; set; }
1313

14+
[YamlMember(Alias = "assembly-informational-format")]
15+
public string AssemblyInformationalFormat { get; set; }
16+
1417
[YamlMember(Alias = "mode")]
1518
public VersioningMode? VersioningMode { get; set; }
1619

src/GitVersionCore/Configuration/ConfigurationProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public static void ApplyDefaultsTo(Config config)
2424
MigrateBranches(config);
2525

2626
config.AssemblyVersioningScheme = config.AssemblyVersioningScheme ?? AssemblyVersioningScheme.MajorMinorPatch;
27+
config.AssemblyInformationalFormat = config.AssemblyInformationalFormat;
2728
config.TagPrefix = config.TagPrefix ?? DefaultTagPrefix;
2829
config.VersioningMode = config.VersioningMode ?? VersioningMode.ContinuousDelivery;
2930
config.ContinuousDeploymentFallbackTag = config.ContinuousDeploymentFallbackTag ?? "ci";

src/GitVersionCore/EffectiveConfiguration.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class EffectiveConfiguration
77
{
88
public EffectiveConfiguration(
99
AssemblyVersioningScheme assemblyVersioningScheme,
10+
string assemblyInformationalFormat,
1011
VersioningMode versioningMode, string gitTagPrefix,
1112
string tag, string nextVersion, IncrementStrategy increment,
1213
string branchPrefixToTrim,
@@ -23,6 +24,7 @@ int buildMetaDataPadding
2324
)
2425
{
2526
AssemblyVersioningScheme = assemblyVersioningScheme;
27+
AssemblyInformationalFormat = assemblyInformationalFormat;
2628
VersioningMode = versioningMode;
2729
GitTagPrefix = gitTagPrefix;
2830
Tag = tag;
@@ -44,6 +46,7 @@ int buildMetaDataPadding
4446
public VersioningMode VersioningMode { get; private set; }
4547

4648
public AssemblyVersioningScheme AssemblyVersioningScheme { get; private set; }
49+
public string AssemblyInformationalFormat { get; private set; }
4750

4851
/// <summary>
4952
/// Git tag prefix

src/GitVersionCore/GitVersionContext.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ void CalculateEffectiveConfiguration()
103103

104104
var nextVersion = configuration.NextVersion;
105105
var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value;
106+
var assemblyInformationalFormat = configuration.AssemblyInformationalFormat;
106107
var gitTagPrefix = configuration.TagPrefix;
107108
var majorMessage = configuration.MajorVersionBumpMessage;
108109
var minorMessage = configuration.MinorVersionBumpMessage;
@@ -111,7 +112,7 @@ void CalculateEffectiveConfiguration()
111112
var commitMessageVersionBump = currentBranchConfig.Value.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value;
112113

113114
Configuration = new EffectiveConfiguration(
114-
assemblyVersioningScheme, versioningMode, gitTagPrefix,
115+
assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix,
115116
tag, nextVersion, incrementStrategy, currentBranchConfig.Key,
116117
preventIncrementForMergedBranchVersion,
117118
tagNumberPattern, configuration.ContinuousDeploymentFallbackTag,

src/GitVersionCore/GitVersionCore.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
</Reference>
4848
<Reference Include="System" />
4949
<Reference Include="System.Core" />
50+
<Reference Include="System.Web" />
5051
<Reference Include="System.Xml.Linq" />
5152
<Reference Include="System.Data.DataSetExtensions" />
5253
<Reference Include="Microsoft.CSharp" />
@@ -117,6 +118,8 @@
117118
<Compile Include="OutputVariables\VersionVariables.cs" />
118119
<Compile Include="Extensions\ExtensionMethods.git.cs" />
119120
<Compile Include="SemanticVersionExtensions.cs" />
121+
<Compile Include="SemanticVersionFormatValues.cs" />
122+
<Compile Include="StringFormatWith.cs" />
120123
<Compile Include="VersionCalculation\BaseVersionCalculator.cs" />
121124
<Compile Include="VersionCalculation\BaseVersionCalculators\BaseVersion.cs" />
122125
<Compile Include="VersionCalculation\BaseVersionCalculators\ConfigNextVersionBaseVersionStrategy.cs" />

src/GitVersionCore/OutputVariables/VariableProvider.cs

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
namespace GitVersion
22
{
3+
using System;
4+
35
public static class VariableProvider
46
{
57
public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged)
@@ -18,25 +20,47 @@ public static VersionVariables GetVariablesFor(SemanticVersion semanticVersion,
1820
semanticVersion.BuildMetaData.CommitsSinceTag = null;
1921
}
2022

23+
var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config);
24+
25+
string informationalVersion;
26+
27+
if (string.IsNullOrEmpty(config.AssemblyInformationalFormat))
28+
{
29+
informationalVersion = semverFormatValues.DefaultInformationalVersion;
30+
}
31+
else
32+
{
33+
try
34+
{
35+
informationalVersion = config.AssemblyInformationalFormat.FormatWith(semverFormatValues);
36+
}
37+
catch (FormatException formex)
38+
{
39+
throw new WarningException(string.Format("Unable to format AssemblyInformationalVersion. Check your format string: {0}", formex.Message));
40+
}
41+
}
42+
2143
var variables = new VersionVariables(
22-
major: semanticVersion.Major.ToString(),
23-
minor: semanticVersion.Minor.ToString(),
24-
patch: semanticVersion.Patch.ToString(),
25-
preReleaseTag: semanticVersion.PreReleaseTag,
26-
preReleaseTagWithDash: semanticVersion.PreReleaseTag.HasTag() ? "-" + semanticVersion.PreReleaseTag : null,
27-
buildMetaData: semanticVersion.BuildMetaData,
28-
buildMetaDataPadded: semanticVersion.BuildMetaData.ToString("p" + config.BuildMetaDataPadding),
29-
fullBuildMetaData: semanticVersion.BuildMetaData.ToString("f"),
30-
majorMinorPatch: string.Format("{0}.{1}.{2}", semanticVersion.Major, semanticVersion.Minor, semanticVersion.Patch),
31-
semVer: semanticVersion.ToString(),
32-
legacySemVer: semanticVersion.ToString("l"),
33-
legacySemVerPadded: semanticVersion.ToString("lp" + config.LegacySemVerPadding),
34-
assemblySemVer: semanticVersion.GetAssemblyVersion(config.AssemblyVersioningScheme),
35-
fullSemVer: semanticVersion.ToString("f"),
36-
informationalVersion: semanticVersion.ToString("i"),
37-
branchName: semanticVersion.BuildMetaData.Branch,
38-
sha: semanticVersion.BuildMetaData.Sha,
39-
commitDate: semanticVersion.BuildMetaData.CommitDate.UtcDateTime.ToString("yyyy-MM-dd"));
44+
semverFormatValues.Major,
45+
semverFormatValues.Minor,
46+
semverFormatValues.Patch,
47+
semverFormatValues.BuildMetaData,
48+
semverFormatValues.BuildMetaDataPadded,
49+
semverFormatValues.FullBuildMetaData,
50+
semverFormatValues.BranchName,
51+
semverFormatValues.Sha,
52+
semverFormatValues.MajorMinorPatch,
53+
semverFormatValues.SemVer,
54+
semverFormatValues.LegacySemVer,
55+
semverFormatValues.LegacySemVerPadded,
56+
semverFormatValues.FullSemVer,
57+
semverFormatValues.AssemblySemVer,
58+
semverFormatValues.PreReleaseTag,
59+
semverFormatValues.PreReleaseTagWithDash,
60+
informationalVersion,
61+
semverFormatValues.CommitDate,
62+
semverFormatValues.NuGetVersion,
63+
semverFormatValues.NuGetVersionV2);
4064

4165
return variables;
4266
}

src/GitVersionCore/OutputVariables/VersionVariables.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class VersionVariables : IEnumerable<KeyValuePair<string, string>>
88
{
99
public VersionVariables(string major, string minor, string patch, string buildMetaData, string buildMetaDataPadded, string fullBuildMetaData, string branchName, string sha, string majorMinorPatch, string semVer, string legacySemVer, string legacySemVerPadded, string fullSemVer, string assemblySemVer, string preReleaseTag, string preReleaseTagWithDash, string informationalVersion,
10-
string commitDate)
10+
string commitDate, string nugetVersion, string nugetVersionV2)
1111
{
1212
Major = major;
1313
Minor = minor;
@@ -27,6 +27,8 @@ public VersionVariables(string major, string minor, string patch, string buildMe
2727
PreReleaseTagWithDash = preReleaseTagWithDash;
2828
InformationalVersion = informationalVersion;
2929
CommitDate = commitDate;
30+
NuGetVersion = nugetVersion;
31+
NuGetVersionV2 = nugetVersionV2;
3032
}
3133

3234
public string Major { get; private set; }
@@ -46,11 +48,8 @@ public VersionVariables(string major, string minor, string patch, string buildMe
4648
public string InformationalVersion { get; private set; }
4749
public string BranchName { get; private set; }
4850
public string Sha { get; private set; }
49-
50-
// Synonyms
51-
// TODO When NuGet 3 is released: public string NuGetVersionV3 { get { return ??; } }
52-
public string NuGetVersionV2 { get { return LegacySemVerPadded.ToLower(); } }
53-
public string NuGetVersion { get { return NuGetVersionV2; } }
51+
public string NuGetVersionV2 { get; private set; }
52+
public string NuGetVersion { get; private set; }
5453

5554
public static IEnumerable<string> AvailableVariables
5655
{

0 commit comments

Comments
 (0)