Skip to content

Commit fa09dd9

Browse files
committed
Add support and tests for AssemblyInformationalVersion configurability
1 parent 039a43b commit fa09dd9

18 files changed

+326
-10
lines changed

src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
assembly-versioning-scheme: MajorMinorPatch
2+
assembly-informational-versioning-scheme: FullInformationalVersion
23
mode: ContinuousDelivery
34
tag-prefix: '[vV]'
45
continuous-delivery-fallback-tag: ci

src/GitVersionCore.Tests/ConfigProviderTests.cs

Lines changed: 16 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.AssemblyInformationalVersioningScheme.ShouldBe(AssemblyInformationalVersioningScheme.FullInformationalVersion);
4647
config.NextVersion.ShouldBe("2.0.0");
4748
config.TagPrefix.ShouldBe("[vV|version-]");
4849
config.VersioningMode.ShouldBe(VersioningMode.ContinuousDelivery);
@@ -110,13 +111,28 @@ 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-versioning-scheme: NugetVersion";
120+
121+
SetupConfigFileContent(text);
122+
123+
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
124+
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor);
125+
config.AssemblyInformationalVersioningScheme.ShouldBe(AssemblyInformationalVersioningScheme.NugetVersion);
126+
}
127+
113128
[Test]
114129
public void CanReadDefaultDocument()
115130
{
116131
const string text = "";
117132
SetupConfigFileContent(text);
118133
var config = ConfigurationProvider.Provide(repoPath, fileSystem);
119134
config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch);
135+
config.AssemblyInformationalVersioningScheme.ShouldBe(AssemblyInformationalVersioningScheme.FullInformationalVersion);
120136
config.Branches["dev(elop)?(ment)?$"].Tag.ShouldBe("unstable");
121137
config.Branches["releases?[/-]"].Tag.ShouldBe("beta");
122138
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+
AssemblyInformationalVersioningScheme assemblyInformationalVersioningScheme = AssemblyInformationalVersioningScheme.FullInformationalVersion,
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, assemblyInformationalVersioningScheme, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
2526
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
2627
trackMergeTarget,
2728
majorMessage, minorMessage, patchMessage,
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+

2+
namespace GitVersion
3+
{
4+
public enum AssemblyInformationalVersioningScheme
5+
{
6+
FullInformationalVersion,
7+
NugetVersion
8+
}
9+
}

src/GitVersionCore/AssemblyVersionsGenerator.cs

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

26+
public static string GetAssemblyInformationalVersion(
27+
this SemanticVersion sv,
28+
AssemblyInformationalVersioningScheme scheme)
29+
{
30+
switch (scheme)
31+
{
32+
case AssemblyInformationalVersioningScheme.FullInformationalVersion:
33+
return sv.ToString("i");
34+
case AssemblyInformationalVersioningScheme.NugetVersion:
35+
return sv.ToString("lp");
36+
default:
37+
throw new ArgumentException(string.Format("Unexpected value ({0}).", scheme), "scheme");
38+
}
2539
}
2640

2741
}

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-versioning-scheme")]
15+
public AssemblyInformationalVersioningScheme? AssemblyInformationalVersioningScheme { 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.AssemblyInformationalVersioningScheme = config.AssemblyInformationalVersioningScheme ?? AssemblyInformationalVersioningScheme.FullInformationalVersion;
2728
config.TagPrefix = config.TagPrefix ?? DefaultTagPrefix;
2829
config.VersioningMode = config.VersioningMode ?? VersioningMode.ContinuousDelivery;
2930
config.ContinuousDeploymentFallbackTag = config.ContinuousDeploymentFallbackTag ?? "ci";

src/GitVersionCore/Configuration/Init/EditConfigStep.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ protected override StepResult HandleResult(string result, Queue<ConfigInitWizard
3939
steps.Enqueue(new AssemblyVersioningSchemeSetting(Console, FileSystem));
4040
return StepResult.Ok();
4141
case "7":
42+
steps.Enqueue(new AssemblyInformationalVersioningSchemeSetting(Console, FileSystem));
43+
return StepResult.Ok();
44+
case "8":
4245
steps.Enqueue(new SetupBuildScripts(Console, FileSystem));
4346
return StepResult.Ok();
4447
}
@@ -58,7 +61,8 @@ protected override string GetPrompt(Config config, string workingDirectory)
5861
4) Branch specific configuration
5962
5) Branch Increment mode (per commit/after tag) (Current: {0})
6063
6) Assembly versioning scheme (Current: {1})
61-
7) Setup build scripts", config.VersioningMode, config.AssemblyVersioningScheme);
64+
7) Assembly informational versioning scheme (Current: {2})
65+
8) Setup build scripts", config.VersioningMode, config.AssemblyVersioningScheme, config.AssemblyInformationalVersioningScheme);
6266
}
6367

6468
protected override string DefaultResult
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
namespace GitVersion.Configuration.Init.SetConfig
2+
{
3+
using System.Collections.Generic;
4+
using GitVersion.Helpers;
5+
using Wizard;
6+
7+
public class AssemblyInformationalVersioningSchemeSetting : ConfigInitWizardStep
8+
{
9+
public AssemblyInformationalVersioningSchemeSetting(IConsole console, IFileSystem fileSystem) : base(console, fileSystem)
10+
{
11+
}
12+
13+
protected override StepResult HandleResult(string result, Queue<ConfigInitWizardStep> steps, Config config, string workingDirectory)
14+
{
15+
switch (result)
16+
{
17+
case "0":
18+
steps.Enqueue(new EditConfigStep(Console, FileSystem));
19+
return StepResult.Ok();
20+
case "1":
21+
config.AssemblyInformationalVersioningScheme = AssemblyInformationalVersioningScheme.FullInformationalVersion;
22+
steps.Enqueue(new EditConfigStep(Console, FileSystem));
23+
return StepResult.Ok();
24+
case "2":
25+
config.AssemblyInformationalVersioningScheme = AssemblyInformationalVersioningScheme.NugetVersion;
26+
steps.Enqueue(new EditConfigStep(Console, FileSystem));
27+
return StepResult.Ok();
28+
}
29+
30+
return StepResult.InvalidResponseSelected();
31+
}
32+
33+
protected override string GetPrompt(Config config, string workingDirectory)
34+
{
35+
return @"What assembly informational versioning scheme do you want to use:
36+
37+
0) Go Back
38+
1) Full (e.g. 2.8.0-unstable12 Branch:'develop' Sha:'c415f7a3dbadad7b72c8af4b7ae8993d1ef35710')
39+
2) NuGet style (e.g. 1.0.1-unstable0001)";
40+
}
41+
42+
protected override string DefaultResult
43+
{
44+
get { return "0"; }
45+
}
46+
}
47+
}

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+
AssemblyInformationalVersioningScheme assemblyInformationalVersioningScheme,
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+
AssemblyInformationalVersioningScheme = assemblyInformationalVersioningScheme;
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 AssemblyInformationalVersioningScheme AssemblyInformationalVersioningScheme { get; private set; }
4750

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

0 commit comments

Comments
 (0)