From 1ba2916fcb5aecd86a3128a94c5ffef85d9c04c3 Mon Sep 17 00:00:00 2001 From: Lazaro Date: Wed, 24 Jun 2020 18:47:06 +0200 Subject: [PATCH 1/2] Support special chars in AssemblyInformationalVersion. --- ...reBranchWithCustomAssemblyInfoFormat.approved.txt | 2 +- .../VersionCalculation/VariableProviderTests.cs | 12 ++++++++++++ .../VersionCalculation/VariableProvider.cs | 9 ++++++--- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt b/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt index 652d13a6d2..ef717fb493 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt +++ b/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt @@ -17,7 +17,7 @@ "AssemblySemVer":"1.2.3.0", "AssemblySemFileVer":"1.2.3.0", "FullSemVer":"1.2.3+5", - "InformationalVersion":"1.2.3+5.Branch.feature-123.Sha.commitShortSha", + "InformationalVersion":"1.2.3+5.Branch.feature/123.Sha.commitShortSha", "BranchName":"feature/123", "EscapedBranchName":"feature-123", "Sha":"commitSha", diff --git a/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs b/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs index 3f3e92c570..34791302fe 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs @@ -306,5 +306,17 @@ public void ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomA vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); } + + [Test] + public void ProvidesVariableshWithCustomAssemblyInfoFormatSupportingAnySpecialCharcter() + { + var semVer = new SemanticVersion(); + var textWithSpecialCharacters = @"+ -=#![]^&@$%:<>/\-çñáÁ统"; + var config = new TestEffectiveConfiguration(assemblyInformationalFormat: $"Special characters: {textWithSpecialCharacters}"); + + var vars = variableProvider.GetVariablesFor(semVer, config, false); + + vars.InformationalVersion.ShouldContain(textWithSpecialCharacters); + } } } diff --git a/src/GitVersionCore/VersionCalculation/VariableProvider.cs b/src/GitVersionCore/VersionCalculation/VariableProvider.cs index 2a21305219..d03ffd74a8 100644 --- a/src/GitVersionCore/VersionCalculation/VariableProvider.cs +++ b/src/GitVersionCore/VersionCalculation/VariableProvider.cs @@ -56,7 +56,7 @@ public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, Effecti var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); - var informationalVersion = CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.InformationalVersion, "AssemblyInformationalVersion"); + var informationalVersion = CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.InformationalVersion, "AssemblyInformationalVersion", false); var assemblyFileSemVer = CheckAndFormatString(config.AssemblyFileVersioningFormat, semverFormatValues, semverFormatValues.AssemblyFileSemVer, "AssemblyFileVersioningFormat"); @@ -123,7 +123,7 @@ private static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVe } } - private string CheckAndFormatString(string formatString, T source, string defaultValue, string formatVarName) + private string CheckAndFormatString(string formatString, T source, string defaultValue, string formatVarName, bool replaceSpecialChars = true) { string formattedString; @@ -137,7 +137,10 @@ private string CheckAndFormatString(string formatString, T source, string def try { - formattedString = formatString.FormatWith(source, environment).RegexReplace("[^0-9A-Za-z-.+]", "-"); + formattedString = formatString.FormatWith(source, environment); + if (replaceSpecialChars) { + formattedString = formattedString.RegexReplace("[^0-9A-Za-z-.+]", "-"); + } } catch (ArgumentException formex) { From 4868435a8fc8c2c4cbf6472c6ee2b2d3b23ea23f Mon Sep 17 00:00:00 2001 From: Lazaro Date: Thu, 25 Jun 2020 14:39:42 +0200 Subject: [PATCH 2/2] Add new config param: 'assembly-informational-is-semver'. --- docs/input/docs/configuration.md | 8 ++++++++ ...erTests.CanWriteOutEffectiveConfiguration.approved.txt | 1 + .../Helpers/TestEffectiveConfiguration.cs | 6 ++++-- src/GitVersionCore.Tests/Model/CommitDateTests.cs | 2 +- ...FeatureBranchWithCustomAssemblyInfoFormat.approved.txt | 2 +- .../VersionCalculation/VariableProviderTests.cs | 5 ++++- src/GitVersionCore/Configuration/ConfigExtensions.cs | 5 ++++- src/GitVersionCore/Configuration/ConfigurationBuilder.cs | 3 ++- src/GitVersionCore/Model/Configuration/Config.cs | 5 ++++- .../Model/Configuration/EffectiveConfiguration.cs | 6 +++++- src/GitVersionCore/VersionCalculation/VariableProvider.cs | 3 ++- 11 files changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/input/docs/configuration.md b/docs/input/docs/configuration.md index 134c92045e..f2a8da43e3 100644 --- a/docs/input/docs/configuration.md +++ b/docs/input/docs/configuration.md @@ -42,6 +42,7 @@ next-version: 1.0 assembly-versioning-scheme: MajorMinorPatch assembly-file-versioning-scheme: MajorMinorPatchTag assembly-informational-format: '{InformationalVersion}' +assembly-informational-is-semver: true mode: ContinuousDelivery increment: Inherit continuous-delivery-fallback-tag: ci @@ -116,6 +117,13 @@ Specifies the format of `AssemblyInformationalVersion`. Follows the same formatting semantics as `assembly-file-versioning-format`. The default value is `{InformationalVersion}`. +### assembly-informational-is-semver + +Controls whether `assembly-file-versioning-format` should follow semantic version allowed char-set or not. +If set to `true` it will replace any special characters by a dash `-`. +If set to `false` it will allow any special characters (unicode characters, spaces and symbols like `#@!?[]()$=-`). +The default value is `true`. + ### mode Sets the `mode` of how GitVersion should create a new version. Read more at diff --git a/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt b/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt index b7a78223f8..5b7009ee08 100644 --- a/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt +++ b/src/GitVersionCore.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -1,5 +1,6 @@ assembly-versioning-scheme: MajorMinorPatch assembly-file-versioning-scheme: MajorMinorPatch +assembly-informational-is-semver: true mode: ContinuousDelivery tag-prefix: '[vV]' continuous-delivery-fallback-tag: ci diff --git a/src/GitVersionCore.Tests/Helpers/TestEffectiveConfiguration.cs b/src/GitVersionCore.Tests/Helpers/TestEffectiveConfiguration.cs index bbc0685ecf..b98f20d6ce 100644 --- a/src/GitVersionCore.Tests/Helpers/TestEffectiveConfiguration.cs +++ b/src/GitVersionCore.Tests/Helpers/TestEffectiveConfiguration.cs @@ -36,8 +36,10 @@ public TestEffectiveConfiguration( bool tracksReleaseBranches = false, bool isRelease = false, string commitDateFormat = "yyyy-MM-dd", - bool updateBuildNumber = false) : - base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, + bool updateBuildNumber = false, + bool assemblyInformationalIsSemver = true + ) : + base(assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyInformationalIsSemver, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch, branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag, trackMergeTarget, majorMessage, minorMessage, patchMessage, noBumpMessage, diff --git a/src/GitVersionCore.Tests/Model/CommitDateTests.cs b/src/GitVersionCore.Tests/Model/CommitDateTests.cs index a787843f1d..84ae9c7e78 100644 --- a/src/GitVersionCore.Tests/Model/CommitDateTests.cs +++ b/src/GitVersionCore.Tests/Model/CommitDateTests.cs @@ -28,7 +28,7 @@ public void CommitDateFormatTest(string format, string expectedOutcome) }, new EffectiveConfiguration( - AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit, + AssemblyVersioningScheme.MajorMinorPatch, AssemblyFileVersioningScheme.MajorMinorPatch, "", true, "", "", VersioningMode.ContinuousDelivery, "", "", "", IncrementStrategy.Inherit, "", true, "", "", false, "", "", "", "", CommitMessageIncrementMode.Enabled, 4, 4, 4, Enumerable.Empty(), false, true, format, false, 0, 0) ); diff --git a/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt b/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt index ef717fb493..652d13a6d2 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt +++ b/src/GitVersionCore.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt @@ -17,7 +17,7 @@ "AssemblySemVer":"1.2.3.0", "AssemblySemFileVer":"1.2.3.0", "FullSemVer":"1.2.3+5", - "InformationalVersion":"1.2.3+5.Branch.feature/123.Sha.commitShortSha", + "InformationalVersion":"1.2.3+5.Branch.feature-123.Sha.commitShortSha", "BranchName":"feature/123", "EscapedBranchName":"feature-123", "Sha":"commitSha", diff --git a/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs b/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs index 34791302fe..a58a9dda4c 100644 --- a/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs +++ b/src/GitVersionCore.Tests/VersionCalculation/VariableProviderTests.cs @@ -312,7 +312,10 @@ public void ProvidesVariableshWithCustomAssemblyInfoFormatSupportingAnySpecialCh { var semVer = new SemanticVersion(); var textWithSpecialCharacters = @"+ -=#![]^&@$%:<>/\-çñáÁ统"; - var config = new TestEffectiveConfiguration(assemblyInformationalFormat: $"Special characters: {textWithSpecialCharacters}"); + var config = new TestEffectiveConfiguration( + assemblyInformationalFormat: $"Special characters: {textWithSpecialCharacters}", + assemblyInformationalIsSemver: false + ); var vars = variableProvider.GetVariablesFor(semVer, config, false); diff --git a/src/GitVersionCore/Configuration/ConfigExtensions.cs b/src/GitVersionCore/Configuration/ConfigExtensions.cs index 987795e27d..090b5d36e7 100644 --- a/src/GitVersionCore/Configuration/ConfigExtensions.cs +++ b/src/GitVersionCore/Configuration/ConfigExtensions.cs @@ -84,6 +84,7 @@ public static EffectiveConfiguration CalculateEffectiveConfiguration(this Config var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; var assemblyFileVersioningScheme = configuration.AssemblyFileVersioningScheme.Value; var assemblyInformationalFormat = configuration.AssemblyInformationalFormat; + var assemblyInformationalIsSemver = configuration.AssemblyInformationalIsSemVer; var assemblyVersioningFormat = configuration.AssemblyVersioningFormat; var assemblyFileVersioningFormat = configuration.AssemblyFileVersioningFormat; var gitTagPrefix = configuration.TagPrefix; @@ -97,7 +98,9 @@ public static EffectiveConfiguration CalculateEffectiveConfiguration(this Config var commitMessageVersionBump = currentBranchConfig.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value; return new EffectiveConfiguration( - assemblyVersioningScheme, assemblyFileVersioningScheme, assemblyInformationalFormat, assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, + assemblyVersioningScheme, assemblyFileVersioningScheme, + assemblyInformationalFormat, assemblyInformationalIsSemver, + assemblyVersioningFormat, assemblyFileVersioningFormat, versioningMode, gitTagPrefix, tag, nextVersion, incrementStrategy, currentBranchConfig.Regex, preventIncrementForMergedBranchVersion, diff --git a/src/GitVersionCore/Configuration/ConfigurationBuilder.cs b/src/GitVersionCore/Configuration/ConfigurationBuilder.cs index 0e8d5ffbda..735dda6bbe 100644 --- a/src/GitVersionCore/Configuration/ConfigurationBuilder.cs +++ b/src/GitVersionCore/Configuration/ConfigurationBuilder.cs @@ -184,7 +184,8 @@ private static Config CreateDefaultConfiguration() CommitsSinceVersionSourcePadding = 4, CommitDateFormat = "yyyy-MM-dd", UpdateBuildNumber = true, - TagPreReleaseWeight = DefaultTagPreReleaseWeight + TagPreReleaseWeight = DefaultTagPreReleaseWeight, + AssemblyInformationalIsSemVer = true }; AddBranchConfig(Config.DevelopBranchKey, diff --git a/src/GitVersionCore/Model/Configuration/Config.cs b/src/GitVersionCore/Model/Configuration/Config.cs index ea8c333143..b4a799b9fd 100644 --- a/src/GitVersionCore/Model/Configuration/Config.cs +++ b/src/GitVersionCore/Model/Configuration/Config.cs @@ -28,10 +28,13 @@ public Config() [YamlMember(Alias = "assembly-informational-format")] public string AssemblyInformationalFormat { get; set; } + + [YamlMember(Alias = "assembly-informational-is-semver")] + public bool AssemblyInformationalIsSemVer { get; set; } [YamlMember(Alias = "assembly-versioning-format")] public string AssemblyVersioningFormat { get; set; } - + [YamlMember(Alias = "assembly-file-versioning-format")] public string AssemblyFileVersioningFormat { get; set; } diff --git a/src/GitVersionCore/Model/Configuration/EffectiveConfiguration.cs b/src/GitVersionCore/Model/Configuration/EffectiveConfiguration.cs index 9c50c050d9..41196eb039 100644 --- a/src/GitVersionCore/Model/Configuration/EffectiveConfiguration.cs +++ b/src/GitVersionCore/Model/Configuration/EffectiveConfiguration.cs @@ -13,6 +13,7 @@ public EffectiveConfiguration( AssemblyVersioningScheme assemblyVersioningScheme, AssemblyFileVersioningScheme assemblyFileVersioningScheme, string assemblyInformationalFormat, + bool assemblyInformationalIsSemver, string assemblyVersioningFormat, string assemblyFileVersioningFormat, VersioningMode versioningMode, string gitTagPrefix, @@ -36,11 +37,13 @@ public EffectiveConfiguration( string commitDateFormat, bool updateBuildNumber, int preReleaseWeight, - int tagPreReleaseWeight) + int tagPreReleaseWeight + ) { AssemblyVersioningScheme = assemblyVersioningScheme; AssemblyFileVersioningScheme = assemblyFileVersioningScheme; AssemblyInformationalFormat = assemblyInformationalFormat; + AssemblyInformationalIsSemver = assemblyInformationalIsSemver; AssemblyVersioningFormat = assemblyVersioningFormat; AssemblyFileVersioningFormat = assemblyFileVersioningFormat; VersioningMode = versioningMode; @@ -78,6 +81,7 @@ public EffectiveConfiguration( public AssemblyVersioningScheme AssemblyVersioningScheme { get; private set; } public AssemblyFileVersioningScheme AssemblyFileVersioningScheme { get; private set; } public string AssemblyInformationalFormat { get; private set; } + public bool AssemblyInformationalIsSemver { get; private set; } public string AssemblyVersioningFormat { get; private set; } public string AssemblyFileVersioningFormat { get; private set; } diff --git a/src/GitVersionCore/VersionCalculation/VariableProvider.cs b/src/GitVersionCore/VersionCalculation/VariableProvider.cs index d03ffd74a8..7445da55ca 100644 --- a/src/GitVersionCore/VersionCalculation/VariableProvider.cs +++ b/src/GitVersionCore/VersionCalculation/VariableProvider.cs @@ -56,7 +56,8 @@ public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, Effecti var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); - var informationalVersion = CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.InformationalVersion, "AssemblyInformationalVersion", false); + var informationalVersion = CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.InformationalVersion, "AssemblyInformationalVersion", + replaceSpecialChars: config.AssemblyInformationalIsSemver); var assemblyFileSemVer = CheckAndFormatString(config.AssemblyFileVersioningFormat, semverFormatValues, semverFormatValues.AssemblyFileSemVer, "AssemblyFileVersioningFormat");