From efaed545309de6b6bb0ae96372ef4fd10a113f63 Mon Sep 17 00:00:00 2001 From: jricke Date: Tue, 17 Nov 2015 22:19:38 -0600 Subject: [PATCH 01/11] adding source root directory for finding assembly info files --- .../VersionAssemblyInfoFiles.xaml | 1732 +++++++++-------- 1 file changed, 870 insertions(+), 862 deletions(-) diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index 013478f..deafb4b 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -1,863 +1,871 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TfsBuild.Versioning.Activities.VersionAssemblyInfoFiles_1 - - - System.Activities - System.Activities.XamlIntegration - System.Activities.Statements - System.Activities.Expressions - System.Activities.Validation - Microsoft.TeamFoundation - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.Build.Workflow.Activities - Microsoft.TeamFoundation.Build.Workflow.Tracking - Microsoft.TeamFoundation.VersionControl.Client - Microsoft.VisualBasic - Microsoft.VisualBasic.Activities - System - System.Activities.Debugger - System.ComponentModel - System.Collections.Generic - System.Data - System.Drawing - System.IO - System.Linq - System.Reflection - System.Text - System.Text.RegularExpressions - System.Xml - System.Windows.Markup - TfsBuild.Versioning.Activities - System.Activities.DurableInstancing - - - - - System.Activities - Microsoft.TeamFoundation.Common - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.VersionControl.Client - System - mscorlib - System.Xml - System.Core - System.ServiceModel - WindowsBase - System.Data - System.Data.DataSetExtensions - System.Drawing - System.Runtime.Serialization - PresentationFramework - PresentationCore - System.Xaml - TfsBuild.Versioning.Activities - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [PathToSolution] - - - [Path.GetDirectoryName(SolutionPath)] - - - - - - - - - - - - - - - - - - - - - - - - - - [FullPathToSeedFile] - - - [Path.Combine(PathToSolution, VersionSeedFilePath)] - - - - - - - - - - - - [SolutionName] - - - [Path.GetFileNameWithoutExtension(solution)] - - - - - - - - - - [AssemblyVersionXpathExpression] - - - ["/VersionSeed/Solution[@name='" + SolutionName + "']/AssemblyVersionPattern"] - - - - - - - - - - - [AssemblyVersionXpathExpression] - - - ["/VersionSeed/Solution[@name='" + SolutionName + "']/AssemblyFileVersionPattern"] - - - - - - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyTitlePattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyDescriptionPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyConfigurationPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCompanyPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyProductPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCopyrightPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyTrademarkPattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCulturePattern", SolutionName)] - - - - - - [AssemblyPropertyXPathExpression] - - - [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyInformationalVersionPattern", SolutionName)] - - - - - - - - - - - - - - [AssemblyVersionXpathExpression] - - - ["/VersionSeed/Solution[@name='Default']/AssemblyVersionPattern"] - - - - - - [AssemblyVersionXpathExpression] - - - ["/VersionSeed/Solution[@name='Default']/AssemblyFileVersionPattern"] - - - - - - - - - - - - - - - - - - - - - - [AssemblyVersionReplacementPattern] - - - [AssemblyVersionPattern] - - - - - [AssemblyFileVersionReplacementPattern] - - - [AssemblyFileVersionPattern] - - - - - - - [AssemblyTitleReplacementPattern] - - - [AssemblyTitlePattern] - - - - - [AssemblyDescriptionReplacementPattern] - - - [AssemblyDescriptionPattern] - - - - - [AssemblyConfigurationReplacementPattern] - - - [AssemblyConfigurationPattern] - - - - - [AssemblyCompanyReplacementPattern] - - - [AssemblyCompanyPattern] - - - - - [AssemblyProductReplacementPattern] - - - [AssemblyProductPattern] - - - - - [AssemblyCopyrightReplacementPattern] - - - [AssemblyCopyrightPattern] - - - - - [AssemblyTrademarkReplacementPattern] - - - [AssemblyTrademarkPattern] - - - - - [AssemblyCultureReplacementPattern] - - - [AssemblyCulturePattern] - - - - - [AssemblyInformationalVersionReplacementPattern] - - - [AssemblyInformationalVersionPattern] - - - - - - - - - - - - [AssemblyInfoFileSearchPattern] - - - [Path.Combine(Path.GetDirectoryName(SolutionPath), "**", AssemblyInfoFilePattern)] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - False - False - - - - - - - - False - False - - - - - - - - False - False - - - - - - - True - False - - - - - - - - - - - - - - True - - - - - - - - - - - - - - True - - - - - - - - - True - - - - - - - - - - - - - - - - - - - - - - - - - True - False - - - - - - - True - False - - - - - - - - - - - True - - - - - - - True - False - - - - - - - True - False - - - - - - - True - False - - - - - - - - - - - True - - - - - - - - - - - - - - - - True - - - - - - - True - - - - - - - False - False - - - - - - - True - False - - - - - - - - - - - - - True - - - - - - - - - - - True - - - - - - - - - - True - - - - - - - - - - True - - - - - - - - True - - - - - - - - True - False - - - - - - - False - False - - - - - - - False - True - - - - - - - True - - - - - - - - - True - False - - - - - - - - True - False - - - - - - - True - False - - - - - - - True - - - - - - - False - True - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TfsBuild.Versioning.Activities.VersionAssemblyInfoFiles_1 + + + System.Activities + System.Activities.XamlIntegration + System.Activities.Statements + System.Activities.Expressions + System.Activities.Validation + Microsoft.TeamFoundation + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.Build.Workflow.Activities + Microsoft.TeamFoundation.Build.Workflow.Tracking + Microsoft.TeamFoundation.VersionControl.Client + Microsoft.VisualBasic + Microsoft.VisualBasic.Activities + System + System.Activities.Debugger + System.ComponentModel + System.Collections.Generic + System.Data + System.Drawing + System.IO + System.Linq + System.Reflection + System.Text + System.Text.RegularExpressions + System.Xml + System.Windows.Markup + TfsBuild.Versioning.Activities + System.Activities.DurableInstancing + + + + + System.Activities + Microsoft.TeamFoundation.Common + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.VersionControl.Client + System + mscorlib + System.Xml + System.Core + System.ServiceModel + WindowsBase + System.Data + System.Data.DataSetExtensions + System.Drawing + System.Runtime.Serialization + PresentationFramework + PresentationCore + System.Xaml + TfsBuild.Versioning.Activities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [PathToSolution] + + + [Path.GetDirectoryName(SolutionPath)] + + + + + + + + + + + + + + + + + + + + + + + + + + [FullPathToSeedFile] + + + [Path.Combine(PathToSolution, VersionSeedFilePath)] + + + + + + + + + + + + [SolutionName] + + + [Path.GetFileNameWithoutExtension(solution)] + + + + + + + + + + [AssemblyVersionXpathExpression] + + + ["/VersionSeed/Solution[@name='" + SolutionName + "']/AssemblyVersionPattern"] + + + + + + + + + + + [AssemblyVersionXpathExpression] + + + ["/VersionSeed/Solution[@name='" + SolutionName + "']/AssemblyFileVersionPattern"] + + + + + + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyTitlePattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyDescriptionPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyConfigurationPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCompanyPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyProductPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCopyrightPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyTrademarkPattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyCulturePattern", SolutionName)] + + + + + + [AssemblyPropertyXPathExpression] + + + [String.Format("/VersionSeed/Solution[@name='{0}']/AssemblyInformationalVersionPattern", SolutionName)] + + + + + + + + + + + + + + [AssemblyVersionXpathExpression] + + + ["/VersionSeed/Solution[@name='Default']/AssemblyVersionPattern"] + + + + + + [AssemblyVersionXpathExpression] + + + ["/VersionSeed/Solution[@name='Default']/AssemblyFileVersionPattern"] + + + + + + + + + + + + + + + + + + + + + + [AssemblyVersionReplacementPattern] + + + [AssemblyVersionPattern] + + + + + [AssemblyFileVersionReplacementPattern] + + + [AssemblyFileVersionPattern] + + + + + + + [AssemblyTitleReplacementPattern] + + + [AssemblyTitlePattern] + + + + + [AssemblyDescriptionReplacementPattern] + + + [AssemblyDescriptionPattern] + + + + + [AssemblyConfigurationReplacementPattern] + + + [AssemblyConfigurationPattern] + + + + + [AssemblyCompanyReplacementPattern] + + + [AssemblyCompanyPattern] + + + + + [AssemblyProductReplacementPattern] + + + [AssemblyProductPattern] + + + + + [AssemblyCopyrightReplacementPattern] + + + [AssemblyCopyrightPattern] + + + + + [AssemblyTrademarkReplacementPattern] + + + [AssemblyTrademarkPattern] + + + + + [AssemblyCultureReplacementPattern] + + + [AssemblyCulturePattern] + + + + + [AssemblyInformationalVersionReplacementPattern] + + + [AssemblyInformationalVersionPattern] + + + + + + + + + + + + + [AssemblyInfoFileSearchPattern] + + + [Path.Combine(SourceRootFileDirectory, "**", AssemblyInfoFilePattern)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + False + False + + + + + + + + False + False + + + + + + + + False + False + + + + + + + True + False + + + + + + + + + + + + + + True + + + + + + + + + + + + + + True + + + + + + + + + True + + + + + + + + + + + + + + + + + + + + + + + + + True + False + + + + + + + True + False + + + + + + + + + + + True + + + + + + + True + False + + + + + + + True + False + + + + + + + True + False + + + + + + + + + + + True + + + + + + + + + + + + + + + + True + + + + + + + True + + + + + + + False + False + + + + + + + True + False + + + + + + + + + + + + + + True + + + + + + + + + + + True + + + + + + + + + + True + + + + + + + + + + True + + + + + + + + True + + + + + + + + True + False + + + + + + + False + False + + + + + + + False + True + + + + + + + True + + + + + + + + + True + False + + + + + + + + True + False + + + + + + + True + False + + + + + + + True + + + + + + + False + True + + + + + \ No newline at end of file From a7deacaa7c61db7d340e5f495ba14df7623316cf Mon Sep 17 00:00:00 2001 From: jricke Date: Tue, 17 Nov 2015 22:21:31 -0600 Subject: [PATCH 02/11] updating build template to include source root directory for finding assembly info files --- .../VersioningBuildTemplate20.xaml | 1708 +++++++++-------- 1 file changed, 855 insertions(+), 853 deletions(-) diff --git a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml index 4a8d401..cd34d03 100644 --- a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml +++ b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml @@ -1,854 +1,856 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TfsBuild.Process_1 - - - System.Activities - System.Activities.XamlIntegration - System.Activities.Statements - System.Activities.Expressions - System.Activities.Validation - Microsoft.TeamFoundation - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.Build.Workflow.Activities - Microsoft.TeamFoundation.Build.Workflow.Tracking - Microsoft.TeamFoundation.TestImpact.BuildIntegration.BuildActivities - Microsoft.TeamFoundation.VersionControl.Client - Microsoft.TeamFoundation.VersionControl.Common - Microsoft.VisualBasic.Activities - System - System.Activities.Debugger - System.Collections.Generic - System.Linq - System.Windows.Markup - TfsBuild - TfsBuild.Versioning.Activities - - - - - System.Activities - Microsoft.TeamFoundation.Common - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.TestImpact.BuildIntegration - Microsoft.TeamFoundation.VersionControl.Client - Microsoft.TeamFoundation.VersionControl.Common - mscorlib - System.Core - PresentationFramework - WindowsBase - PresentationCore - System.Xaml - TfsBuild.Versioning.Activities - System - System.ServiceModel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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ArYDsgIDAf4BtgPsAbYDmwIDAfwBtgOVAbYDnAEDAfsB3ANJ3ANtAwGkAd4DP+QDSgMBtQHnAz/nA60EAwGlAbEDuAGxA8wBAwGjArED4wGxA5YCAwGhArEDoQKxA64CAwGfArID6ASyA/EEAwGdArIDygOyA94DAwGaArID7QKyA48DAwGZArIDpwSyA8YEAwGXArID7gOyA5oEAwGUArIDmAOyA70DAwGSArIDvAKyA+MCAwGRArIDrwKyA7QCAwGQArID7gGyA50CAwGOArIDlwGyA54BAwGNAuIDQeIDoAIDAcgB4wNB4wPSBAMBtgHnA8cC5wPnAgMBtAHnA4sB5wOxAQMBswHnA/UD5wOIBAMBsQHnA6ED5wPDAwMBsAHnA5oC5wO6AgMBrwHnA1bnA3UDAa4B5wPNA+cD5QMDAa0B5wP/AucDlwMDAasB5wOYBOcDqgQDAakB5wPmAecDjQIDAagB4gPDAeID6AEDAc0B4gPwAeIDhQIDAcsB4gOQAuIDnQIDAckB4wPJAuMD6QIDAccB4wO6BOMDzwQDAcUB4wONAeMDswEDAcQB4wP3A+MDigQDAcIB4wOjA+MDxQMDAcEB4wOcAuMDvAIDAcAB4wNY4wN3AwG/AeMDzwPjA+cDAwG+AeMDgQPjA5kDAwG8AeMDmgTjA6wEAwG6AeMD6AHjA48CAwG5AQ== - - - - - - - - - - - - True - - - - - - - - True - - - - - - - - False - False - - - - - - - - - - - - - - - - - True - - - - - - - - False - False - - - - - - - - - False - False - - - - - - - - - True - - - - - - - False - False - - - - - - - - False - False - - - - - - - - - False - True - - - - - - - True - - - - - - - False - False - - - - - - - - - - True - - - - - - - - - - - True - - - - - - - - - - - True - - - - - - - False - - - - - - - - - - - - - True - - - - - - - False - False - - - - - - - - - - True - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TfsBuild.Process_1 + + + System.Activities + System.Activities.XamlIntegration + System.Activities.Statements + System.Activities.Expressions + System.Activities.Validation + Microsoft.TeamFoundation + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.Build.Workflow.Activities + Microsoft.TeamFoundation.Build.Workflow.Tracking + Microsoft.TeamFoundation.TestImpact.BuildIntegration.BuildActivities + Microsoft.TeamFoundation.VersionControl.Client + Microsoft.TeamFoundation.VersionControl.Common + Microsoft.VisualBasic.Activities + System + System.Activities.Debugger + System.Collections.Generic + System.Linq + System.Windows.Markup + TfsBuild + TfsBuild.Versioning.Activities + + + + + System.Activities + Microsoft.TeamFoundation.Common + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.TestImpact.BuildIntegration + Microsoft.TeamFoundation.VersionControl.Client + Microsoft.TeamFoundation.VersionControl.Common + mscorlib + System.Core + PresentationFramework + WindowsBase + PresentationCore + System.Xaml + TfsBuild.Versioning.Activities + System + System.ServiceModel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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ArYDsgIDAf4BtgPsAbYDmwIDAfwBtgOVAbYDnAEDAfsB3ANJ3ANtAwGkAd4DP+QDSgMBtQHnAz/nA60EAwGlAbEDuAGxA8wBAwGjArED4wGxA5YCAwGhArEDoQKxA64CAwGfArID6ASyA/EEAwGdArIDygOyA94DAwGaArID7QKyA48DAwGZArIDpwSyA8YEAwGXArID7gOyA5oEAwGUArIDmAOyA70DAwGSArIDvAKyA+MCAwGRArIDrwKyA7QCAwGQArID7gGyA50CAwGOArIDlwGyA54BAwGNAuIDQeIDoAIDAcgB4wNB4wPSBAMBtgHnA8cC5wPnAgMBtAHnA4sB5wOxAQMBswHnA/UD5wOIBAMBsQHnA6ED5wPDAwMBsAHnA5oC5wO6AgMBrwHnA1bnA3UDAa4B5wPNA+cD5QMDAa0B5wP/AucDlwMDAasB5wOYBOcDqgQDAakB5wPmAecDjQIDAagB4gPDAeID6AEDAc0B4gPwAeIDhQIDAcsB4gOQAuIDnQIDAckB4wPJAuMD6QIDAccB4wO6BOMDzwQDAcUB4wONAeMDswEDAcQB4wP3A+MDigQDAcIB4wOjA+MDxQMDAcEB4wOcAuMDvAIDAcAB4wNY4wN3AwG/AeMDzwPjA+cDAwG+AeMDgQPjA5kDAwG8AeMDmgTjA6wEAwG6AeMD6AHjA48CAwG5AQ== + + + + + + + + + + + + True + + + + + + + + True + + + + + + + + False + False + + + + + + + + + + + + + + + + + True + + + + + + + + False + False + + + + + + + + + False + False + + + + + + + + + True + + + + + + + False + False + + + + + + + + False + False + + + + + + + + + False + True + + + + + + + True + + + + + + + False + False + + + + + + + + + + True + + + + + + + + + + + True + + + + + + + + + + + True + + + + + + + False + + + + + + + + + + + + + True + + + + + + + False + False + + + + + + + + + + True + + + + + + \ No newline at end of file From b049e1826e9b97c5f7cd94874ec27dce82f4453e Mon Sep 17 00:00:00 2001 From: jricke Date: Wed, 18 Nov 2015 17:38:48 -0600 Subject: [PATCH 03/11] adding C option to version for changeset --- .../ConvertAssemblyPropertyPattern.cs | 86 -- .../ConvertVersionPattern.cs | 190 +++-- .../ReplaceAssemblyInfoProperties.cs | 32 +- .../TfsBuild.Versioning.Activities.csproj | 230 +++--- .../UpdateAssemblyInfoFileVersion.xaml | 458 ++++++----- .../VersionAssemblyInfoFiles.xaml | 168 ++-- .../VersioningHelper.cs | 767 +++++++++--------- 7 files changed, 940 insertions(+), 991 deletions(-) delete mode 100644 TfsBuild.Versioning.Activities/ConvertAssemblyPropertyPattern.cs diff --git a/TfsBuild.Versioning.Activities/ConvertAssemblyPropertyPattern.cs b/TfsBuild.Versioning.Activities/ConvertAssemblyPropertyPattern.cs deleted file mode 100644 index 34ff67b..0000000 --- a/TfsBuild.Versioning.Activities/ConvertAssemblyPropertyPattern.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Drawing; -using System.Activities; -using Microsoft.TeamFoundation.Build.Client; - -// ============================================================================================== -// http://tfsversioning.codeplex.com/ -// -// Author: Mark S. Nichols -// -// Copyright (c) 2011 Microsoft Corporation -// -// This source is subject to the Microsoft Permissive License. -// ============================================================================================== - -namespace TfsBuild.Versioning.Activities -{ - /// - /// Takes in a version pattern and turns it into a version number. - /// - [ToolboxBitmap(typeof(ConvertAssemblyPropertyPattern), "Resources.version.ico")] - [BuildActivity(HostEnvironmentOption.All)] - [BuildExtension(HostEnvironmentOption.All)] - public sealed class ConvertAssemblyPropertyPattern : CodeActivity - { - #region Workflow Arguments - - /// - /// The pattern to convert - /// - [RequiredArgument] - public InArgument PropertyPattern { get; set; } - - /// - /// Build number prefix for differentiating the build versions - /// - [RequiredArgument] - public InArgument BuildNumberPrefix { get; set; } - - /// - /// The date of the build - /// - [RequiredArgument] - public InArgument BuildDate { get; set; } - - [RequiredArgument] - public InArgument BuildDetail { get; set; } - - /// - /// The converted version number - /// - public OutArgument ConvertedVersionNumber { get; set; } - - #endregion - - /// - /// Processes the conversion of the version number - /// - /// - protected override void Execute(CodeActivityContext context) - { - // Get the values passed in - string propertyPattern = context.GetValue(PropertyPattern); - IBuildDetail buildDetail = context.GetValue(BuildDetail); - DateTime buildDate = context.GetValue(BuildDate); - int buildNumberPrefix = context.GetValue(BuildNumberPrefix); - - // Validate the version pattern - if (string.IsNullOrEmpty(propertyPattern)) - { - throw new ArgumentException("PropertyPattern must contain a valid property replacement pattern."); - } - - // Validate the version pattern - if (buildDetail == null) - { - throw new ArgumentNullException("BuildDetail", "BuildDetail must contain a valid IBuildDetail value."); - } - - string convertedValue = VersioningHelper.ReplacePatternWithValue(propertyPattern, buildDetail, buildDetail.BuildNumber, buildNumberPrefix, buildDate); - - // Return the value back to the workflow - context.SetValue(ConvertedVersionNumber, convertedValue); - } - } -} diff --git a/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs b/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs index b54f56b..d69032a 100644 --- a/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs +++ b/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs @@ -1,90 +1,100 @@ -using System; -using System.Drawing; -using System.Text; -using System.Activities; -using Microsoft.TeamFoundation.Build.Client; - -// ============================================================================================== -// http://tfsversioning.codeplex.com/ -// -// Author: Mark S. Nichols -// -// Copyright (c) 2011 Microsoft Corporation -// -// This source is subject to the Microsoft Permissive License. -// ============================================================================================== - -namespace TfsBuild.Versioning.Activities -{ - /// - /// Takes in a version pattern and turns it into a version number. - /// - [ToolboxBitmap(typeof(ConvertVersionPattern), "Resources.version.ico")] - [BuildActivity(HostEnvironmentOption.All)] - [BuildExtension(HostEnvironmentOption.All)] - public sealed class ConvertVersionPattern : CodeActivity - { - #region Workflow Arguments - - /// - /// The pattern to convert - /// - [RequiredArgument] - public InArgument VersionPattern { get; set; } - - /// - /// TFS build number in case the "B" pattern is used - /// - [RequiredArgument] - public InArgument BuildNumber { get; set; } - - /// - /// The prefix value to add to the build number to make it unique compared to other builds - /// - [RequiredArgument] - public InArgument BuildNumberPrefix { get; set; } - - /// - /// The converted version number - /// - public OutArgument ConvertedVersionNumber { get; set; } - - #endregion - - /// - /// Processes the conversion of the version number - /// - /// - protected override void Execute(CodeActivityContext context) - { - // Get the values passed in - var versionPattern = context.GetValue(VersionPattern); - var buildNumber = context.GetValue(BuildNumber); - var buildNumberPrefix = context.GetValue(BuildNumberPrefix); - - var version = new StringBuilder(); - var addDot = false; - - // Validate the version pattern - if (string.IsNullOrEmpty(versionPattern)) - { - throw new ArgumentException("VersionPattern must contain the versioning pattern."); - } - - var versionPatternArray = versionPattern.Split(new[] {'.'}, StringSplitOptions.RemoveEmptyEntries); - - // Go through each pattern and convert it - foreach (var conversionItem in versionPatternArray) - { - if (addDot) { version.Append("."); } - - version.Append(VersioningHelper.ReplacePatternWithValue(conversionItem, buildNumber, buildNumberPrefix, DateTime.Now)); - - addDot = true; - } - - // Return the value back to the workflow - context.SetValue(ConvertedVersionNumber, version.ToString()); - } - } -} +using System; +using System.Drawing; +using System.Text; +using System.Activities; +using Microsoft.TeamFoundation.Build.Client; +using Microsoft.TeamFoundation.VersionControl.Client; + +// ============================================================================================== +// http://tfsversioning.codeplex.com/ +// +// Author: Mark S. Nichols +// +// Copyright (c) 2011 Microsoft Corporation +// +// This source is subject to the Microsoft Permissive License. +// ============================================================================================== + +namespace TfsBuild.Versioning.Activities +{ + /// + /// Takes in a version pattern and turns it into a version number. + /// + [ToolboxBitmap(typeof(ConvertVersionPattern), "Resources.version.ico")] + [BuildActivity(HostEnvironmentOption.All)] + [BuildExtension(HostEnvironmentOption.All)] + public sealed class ConvertVersionPattern : CodeActivity + { + #region Workflow Arguments + + /// + /// The pattern to convert + /// + [RequiredArgument] + public InArgument VersionPattern { get; set; } + + /// + /// TFS build number in case the "B" pattern is used + /// + [RequiredArgument] + public InArgument BuildNumber { get; set; } + + /// + /// The prefix value to add to the build number to make it unique compared to other builds + /// + [RequiredArgument] + public InArgument BuildNumberPrefix { get; set; } + + [RequiredArgument] + public InArgument BuildDetail { get; set; } + + [RequiredArgument] + public InArgument Workspace { get; set; } + + /// + /// The converted version number + /// + public OutArgument ConvertedVersionNumber { get; set; } + + #endregion + + /// + /// Processes the conversion of the version number + /// + /// + protected override void Execute(CodeActivityContext context) + { + // Get the values passed in + var versionPattern = context.GetValue(VersionPattern); + var buildNumber = context.GetValue(BuildNumber); + var buildNumberPrefix = context.GetValue(BuildNumberPrefix); + var buildDetail = context.GetValue(BuildDetail); + var workspace = context.GetValue(Workspace); + var buildAgent = context.GetExtension(); + + var version = new StringBuilder(); + var addDot = false; + + // Validate the version pattern + if (string.IsNullOrEmpty(versionPattern)) + { + throw new ArgumentException("VersionPattern must contain the versioning pattern."); + } + + var versionPatternArray = versionPattern.Split(new[] {'.'}, StringSplitOptions.RemoveEmptyEntries); + + // Go through each pattern and convert it + foreach (var conversionItem in versionPatternArray) + { + if (addDot) { version.Append("."); } + + version.Append(VersioningHelper.ReplacePatternWithValue(conversionItem, buildDetail, buildNumber, buildNumberPrefix, DateTime.Now, workspace, buildAgent)); + + addDot = true; + } + + // Return the value back to the workflow + context.SetValue(ConvertedVersionNumber, version.ToString()); + } + } +} diff --git a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs index bce3c04..68297b5 100644 --- a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs +++ b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs @@ -7,7 +7,8 @@ using System.Activities; using System.Text.RegularExpressions; using Microsoft.TeamFoundation.Build.Client; - +using Microsoft.TeamFoundation.VersionControl.Client; + // ============================================================================================== // http://tfsversioning.codeplex.com/ // @@ -16,8 +17,8 @@ // Copyright (c) 2011 Microsoft Corporation // // This source is subject to the Microsoft Permissive License. -// ============================================================================================== - +// ============================================================================================== + namespace TfsBuild.Versioning.Activities { [ToolboxBitmap(typeof(ReplaceAssemblyInfoProperties), "Resources.version.ico")] @@ -41,6 +42,9 @@ public sealed class ReplaceAssemblyInfoProperties : CodeActivity [RequiredArgument] public InArgument BuildDetail { get; set; } + + [RequiredArgument] + public InArgument Workspace { get; set; } // Assembly properties public InArgument AssemblyTitle { get; set; } @@ -49,10 +53,10 @@ public sealed class ReplaceAssemblyInfoProperties : CodeActivity public InArgument AssemblyCompany { get; set; } public InArgument AssemblyProduct { get; set; } public InArgument AssemblyCopyright { get; set; } - public InArgument AssemblyTrademark { get; set; } - public InArgument AssemblyCulture { get; set; } - public InArgument AssemblyInformationalVersion { get; set; } - + public InArgument AssemblyTrademark { get; set; } + public InArgument AssemblyCulture { get; set; } + public InArgument AssemblyInformationalVersion { get; set; } + #endregion /// @@ -63,9 +67,11 @@ protected override void Execute(CodeActivityContext context) { // Obtain the runtime value of the Text input argument var filePath = context.GetValue(FilePath); - var forceCreate = context.GetValue(ForceCreate); - IBuildDetail buildDetail = context.GetValue(BuildDetail); - DateTime buildDate = context.GetValue(BuildDate); + var forceCreate = context.GetValue(ForceCreate); + var buildDetail = context.GetValue(BuildDetail); + var buildDate = context.GetValue(BuildDate); + var workspace = context.GetValue(Workspace); + var buildAgent = context.GetExtension(); #region Validate Arguments @@ -101,7 +107,7 @@ protected override void Execute(CodeActivityContext context) var projectType = VersioningHelper.GetProjectTypeFromFileName(filePath); // Perform the update of the assembly info values based on the list created above - UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate); + UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent); } /// @@ -114,7 +120,7 @@ protected override void Execute(CodeActivityContext context) /// Type of project (cs, vb, cpp or fs) /// If the value isn't in the AssemblyInfo file do we insert it anyway public void UpdateAssemblyValues(string filePath, IList> assemblyInfoProperties, - IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate) + IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate, Workspace workspace, IBuildAgent buildAgent) { var newFileData = new StringBuilder(); @@ -135,7 +141,7 @@ public void UpdateAssemblyValues(string filePath, IList property in assemblyInfoProperties) { string convertedValue = VersioningHelper.ReplacePatternsInPropertyValue(property.Value, buildDetail, 0, - buildDate); + buildDate, workspace, buildAgent); fileData = UpdateAssemblyValue(fileData, property.Key, convertedValue, projectType, forceCreate); } diff --git a/TfsBuild.Versioning.Activities/TfsBuild.Versioning.Activities.csproj b/TfsBuild.Versioning.Activities/TfsBuild.Versioning.Activities.csproj index 6c8d5bc..72dad66 100644 --- a/TfsBuild.Versioning.Activities/TfsBuild.Versioning.Activities.csproj +++ b/TfsBuild.Versioning.Activities/TfsBuild.Versioning.Activities.csproj @@ -1,123 +1,121 @@ - - - - Debug - AnyCPU - 10.0 - 2.0 - {F44C079C-A474-47B9-8874-4FB835A425DA} - {32f31d43-81cc-4c15-9de6-3fc5453562b6};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - TfsBuild.Versioning.Activities - TfsBuild.Versioning.Activities - v4.5 - - - 512 - SAK - SAK - SAK - SAK - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - true - - - TfsBuild.Versioning.Activities.Key.snk - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - - - - - - - MSBuild:Compile - Designer - - - Designer - - - - - Designer - - - - - Designer - - - + + + + Debug + AnyCPU + 10.0 + 2.0 + {F44C079C-A474-47B9-8874-4FB835A425DA} + {32f31d43-81cc-4c15-9de6-3fc5453562b6};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + TfsBuild.Versioning.Activities + TfsBuild.Versioning.Activities + v4.5 + + + 512 + SAK + SAK + SAK + SAK + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + true + + + TfsBuild.Versioning.Activities.Key.snk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + + + + + + + MSBuild:Compile + Designer + + + Designer + + + + + Designer + + + + + Designer + + + + --> \ No newline at end of file diff --git a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml index ff92db7..d9b4ada 100644 --- a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml +++ b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml @@ -1,231 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TfsBuild.Versioning.Activities.UpdateAssemblyInfoFileVersion_1 - - - System.Activities - System.Activities.XamlIntegration - System.Activities.Statements - System.Activities.Expressions - System.Activities.Validation - Microsoft.TeamFoundation - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.Build.Workflow.Activities - Microsoft.TeamFoundation.Build.Workflow.Tracking - Microsoft.TeamFoundation.VersionControl.Client - Microsoft.VisualBasic - Microsoft.VisualBasic.Activities - System - System.Activities.Debugger - System.ComponentModel - System.Collections.Generic - System.Data - System.Drawing - System.IO - System.Linq - System.Reflection - System.Text - System.Text.RegularExpressions - System.Xml - System.Windows.Markup - TfsBuild.Versioning.Activities - System.Drawing.Drawing2D - - - - - System.Activities - Microsoft.TeamFoundation.Common - Microsoft.TeamFoundation.Build.Client - Microsoft.TeamFoundation.Build.Workflow - Microsoft.TeamFoundation.VersionControl.Client - System - mscorlib - System.Xml - System.Core - System.ServiceModel - WindowsBase - System.Data - System.Data.DataSetExtensions - System.Drawing - System.Runtime.Serialization - PresentationFramework - PresentationCore - System.Xaml - TfsBuild.Versioning.Activities - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - d5MBQzpcX1Rmc1Byb2plY3RzVlMyMDEyXEJ1aWxkQWN0aXZpdGllc1xTb2x1dGlvbkJ1aWxkVmVyc2lvbmluZ1xEZXZcVmVyc2lvbiAyLjAuMC4wXFRmc0J1aWxkLlZlcnNpb25pbmcuQWN0aXZpdGllc1xVcGRhdGVBc3NlbWJseUluZm9GaWxlVmVyc2lvbi54YW1sNnMDowEOAgEBdAWhAQoCAQJ0E3QxAgEDdgmcARQCAQefAQmfAeUCAgEEdwubARUCAQifAbQBnwH+AQIBBne7AXfTAQIBU3wPmQEaAgEJgAERgAGLAwIBT4EBEYsBFgIBO4wBEZYBFgIBJ5cBEZcBcwIBJJgBEZgBhQYCAQqAAdwBgAGkAgIBUYABhAGAAaMBAgFQgQEfgQGrAQIBPIMBFYkBIAIBPYwBH4wBswECASiOARWUASACASmXAWGXAXACASWYAYIBmAGtAQIBIpgB2ASYAe8EAgEhmAH8BJgBiwUCAR+YAaYEmAHNBAIBHZgB+AGYAZ0CAgEbmAGyApgB2wICARmYAfADmAGTBAIBF5gBwAGYAecBAgEVmAG8A5gB4QMCAROYAUaYAWsCARGYAfkCmAGrAwIBD5gBqgWYAcAFAgENmAGVBZgBnQUCAQuHAReHAcQCAgFGiAEXiAHyAgIBPpIBF5IBzAICATKTAReTAf4CAgEqhwGPAYcBogECAU2HAWKHAXcCAUuHAZwChwHBAgIBSYcBQIcBTwIBR4gBigKIAZ0CAgFEiAGqAogB7wICAUOIAXeIAY0BAgFBiAFiiAFqAgE/kgGPAZIBpgECATmSAWKSAXcCATeSAaACkgHJAgIBNZIBQJIBTwIBM5MBjgKTAaUCAgEwkwGyApMB+wICAS+TAXuTAZEBAgEtkwFmkwFuAgEr - - - - - - - - - - True - - - - - - - - - - True - - - - - - - - - - True - - - - - - - - True - - - - - - - - True - False - - - - - - - False - False - - - - - - - False - True - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TfsBuild.Versioning.Activities.UpdateAssemblyInfoFileVersion_1 + + + System.Activities + System.Activities.XamlIntegration + System.Activities.Statements + System.Activities.Expressions + System.Activities.Validation + Microsoft.TeamFoundation + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.Build.Workflow.Activities + Microsoft.TeamFoundation.Build.Workflow.Tracking + Microsoft.TeamFoundation.VersionControl.Client + Microsoft.VisualBasic + Microsoft.VisualBasic.Activities + System + System.Activities.Debugger + System.ComponentModel + System.Collections.Generic + System.Data + System.Drawing + System.IO + System.Linq + System.Reflection + System.Text + System.Text.RegularExpressions + System.Xml + System.Windows.Markup + TfsBuild.Versioning.Activities + System.Drawing.Drawing2D + + + + + System.Activities + Microsoft.TeamFoundation.Common + Microsoft.TeamFoundation.Build.Client + Microsoft.TeamFoundation.Build.Workflow + Microsoft.TeamFoundation.VersionControl.Client + System + mscorlib + System.Xml + System.Core + System.ServiceModel + WindowsBase + System.Data + System.Data.DataSetExtensions + System.Drawing + System.Runtime.Serialization + PresentationFramework + PresentationCore + System.Xaml + TfsBuild.Versioning.Activities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDl2A6IBDgIBAXcFoAEKAgECdxN3MQIBA3kJmwEUAgEGngEJngHlAgIBBHoLmgEVAgEHngG0AZ4B/gECAQV6uwF60wECAVN/D5gBGgIBCIABEYABiwMCAU+BARGLARYCATmMARGWARYCASOXARGXAZ0GAgEJgAHcAYABpAICAVGAAYQBgAGjAQIBUIEBH4EBqwECATqDARWJASACATuMAR+MAbMBAgEkjgEVlAEgAgEllwGCAZcBrQECASGXAdgElwHvBAIBIJcB/ASXAYsFAgEflwGmBJcBzQQCAR2XAfgBlwGdAgIBG5cBsgKXAdsCAgEZlwHwA5cBkwQCAReXAcABlwHnAQIBFZcBvAOXAeEDAgETlwGNBpcBmgYCARKXAUaXAWsCARCXAfkClwGrAwIBDpcBqgWXAcAFAgEMlwGVBZcBnQUCAQqHAReHAfgCAgFEiAEXiAHyAgIBPJIBF5IBgAMCAS6TAReTAf4CAgEmhwGrAYcBvgECAU2HAUCHAU8CAUyHAX6HAZMBAgFKhwG4AocB3QICAUiHAVyHAWsCAUaHAegChwH1AgIBRYgBigKIAZ0CAgFCiAGqAogB7wICAUGIAXeIAY0BAgE/iAFiiAFqAgE9kgGrAZIBwgECATeSAUCSAU8CATaSAX6SAZMBAgE0kgG8ApIB5QICATKSAVySAWsCATCSAfACkgH9AgIBL5MBjgKTAaUCAgEskwGyApMB+wICASuTAXuTAZEBAgEpkwFmkwFuAgEn + + + + + + + + + + True + + + + + + + + + + True + + + + + + + + + True + + + + + + + + True + + + + + + + + True + False + + + + + + + False + False + + + + + + + False + True + + + + + \ No newline at end of file diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index deafb4b..78382a2 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -130,7 +130,7 @@ - + @@ -509,7 +509,7 @@ - + @@ -521,15 +521,14 @@ - - - - - - - - - + + + + + + + + @@ -544,7 +543,7 @@ - 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 @@ -575,7 +574,7 @@ - + True @@ -583,62 +582,62 @@ - - - + + + - - - - + + + + True - - + + - + - + - + True - + - + True - + - + - + - + - + - + - + - + - + - + True @@ -646,7 +645,7 @@ - + True @@ -654,18 +653,18 @@ - + - + True - + True @@ -673,7 +672,7 @@ - + True @@ -681,7 +680,7 @@ - + True @@ -689,41 +688,41 @@ - + - - - + + + True - - - - - - - - - - + + + + + + + + + + True - + True - + False @@ -731,7 +730,7 @@ - + True @@ -739,21 +738,21 @@ - - - - - - - - + + + + + + + + True - + @@ -776,24 +775,23 @@ - - + True - - + + True - - + + True @@ -801,7 +799,7 @@ - + False @@ -809,7 +807,7 @@ - + False @@ -824,9 +822,9 @@ - - - + + + True @@ -834,8 +832,8 @@ - - + + True @@ -843,7 +841,7 @@ - + True @@ -851,14 +849,14 @@ - + True - + False diff --git a/TfsBuild.Versioning.Activities/VersioningHelper.cs b/TfsBuild.Versioning.Activities/VersioningHelper.cs index fb992b7..03b1d29 100644 --- a/TfsBuild.Versioning.Activities/VersioningHelper.cs +++ b/TfsBuild.Versioning.Activities/VersioningHelper.cs @@ -1,371 +1,396 @@ -using System; -using System.Activities; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Text.RegularExpressions; -using Microsoft.TeamFoundation.Build.Client; - -// ============================================================================================== -// http://tfsversioning.codeplex.com/ -// -// Author: Mark S. Nichols -// -// Copyright (c) 2011 Microsoft Corporation -// -// This source is subject to the Microsoft Permissive License. -// ============================================================================================== - -namespace TfsBuild.Versioning.Activities -{ - public static class VersioningHelper - { - public const string CsAssembly = "[assembly: {0}(\"{1}\")]"; - public const string CppAssembly = "[assembly: {0}Attribute(\"{1}\")];"; - public const string VbAssembly = ""; - public const string FsAssembly = "[]"; - public const string FsDoRegex = @".*(\(\s*\)|do\s*\(\s*\))"; - public const string FsDoStatement = "do ()"; - public const string PropertyNotFound = "Property Not Found"; - public const string AssemblyVersionPropertyName = "AssemblyVersion"; - public const string AssemblyFileVersionPropertyName = "AssemblyFileVersion"; - - public static readonly string[] AlternateAssemblyProperties; - - public const string RegExPropertyMatch = - @"(?(?[\[<].*{0}.*\(\x22)(?.*)(?\x22\)[\]>]+))"; - - static VersioningHelper() - { - AlternateAssemblyProperties = new[] { "AssemblyTitle", "AssemblyDescription", "AssemblyConfiguration", - "AssemblyCompany", "AssemblyProduct", "AssemblyCopyright", "AssemblyTrademark", - "AssemblyCulture", "AssemblyInformationalVersion" }; - } - - public static ProjectTypes GetProjectTypeFromFileName(string filename) - { - if (String.IsNullOrWhiteSpace(filename)) - { - throw new ArgumentNullException("filename"); - } - - var fileExtension = Path.GetExtension(filename); - - if (String.IsNullOrWhiteSpace(fileExtension)) - { - // nothing there? just pass in something that definitely won't match - fileExtension = ".xxx"; - } - - var normalizedFileExtension = fileExtension.ToLower(); - - switch (normalizedFileExtension) - { - case ".cs": - return ProjectTypes.Cs; - - case ".vb": - return ProjectTypes.Vb; - - case ".cpp": - return ProjectTypes.Cpp; - - case ".fs": - return ProjectTypes.Fs; - - default: - throw new ArgumentException(String.Format("{0} is not one of the accepted file types (.cs, .vb, .cpp, .fs)", filename)); - } - } - - public static string GetVersionShellByType(ProjectTypes projectType) - { - switch (projectType) - { - case ProjectTypes.Cs: - return CsAssembly; - - case ProjectTypes.Vb: - return VbAssembly; - - case ProjectTypes.Cpp: - return CppAssembly; - - case ProjectTypes.Fs: - return FsAssembly; - } - - throw new ArgumentException("projectType"); - } - - public static string InsertAssemblyInfoProperty(string fileData, string assemblyInfoPropertyName, string assemblyInfoPropertyValue, ProjectTypes projectType) - { - var fileDataOut = new StringBuilder(); - - var versionShell = GetVersionShellByType(projectType); - - // if working with F# files, remove the "do binding" so we can make sure that the "do" is at the end of the file) - //if (projectType == ProjectTypes.Fs) - //{ - // var regex = new Regex(FsDoRegex); - // fileData = regex.Replace(fileData, ""); - //} - - fileDataOut.Append(fileData); - - var versionLine = String.Format(versionShell, assemblyInfoPropertyName, assemblyInfoPropertyValue); - - fileDataOut.AppendLine(); - fileDataOut.Append(versionLine); - fileDataOut.AppendLine(); - - //// for F#, put the do() binding back in - //if (projectType == ProjectTypes.Fs) - //{ - // fileDataOut.Append(FsDoStatement); - // fileDataOut.AppendLine(); - //} - - return fileDataOut.ToString(); - } - - public static IList> GetArgumentValues(CodeActivityContext context, string argumentStartsWith) - { - PropertyDescriptorCollection properties = context.DataContext.GetProperties(); - IList> arguments = new ReadOnlyCollectionBuilder>(); - - foreach (PropertyDescriptor property in properties) - { - // Get the name of the property/argument - var name = property.DisplayName; - - // must be a string - if ((property.PropertyType != typeof (string))) continue; - - // if an argumentStartsWith has a value and name starts with it - if ((!string.IsNullOrWhiteSpace(argumentStartsWith)) && (!name.StartsWith(argumentStartsWith))) - continue; - - var value = (string) property.GetValue(context.DataContext); - - // the property/argument must have a value - if (string.IsNullOrWhiteSpace(value)) continue; - - arguments.Add(new KeyValuePair(name, value)); - } - - return arguments; - } - - public static IList> GetArgumentValues(IList> inputValues) - { - IList> arguments = new ReadOnlyCollectionBuilder>(); - - foreach (KeyValuePair argumentValuePair in inputValues) - { - if ((!string.IsNullOrWhiteSpace(argumentValuePair.Value)) && (argumentValuePair.Value != PropertyNotFound)) - { - arguments.Add(new KeyValuePair(argumentValuePair.Key, argumentValuePair.Value)); - } - } - - return arguments; - } - - /// - /// This method will walk through all the patterns in the property value and replace them with actual values - /// - /// - /// - /// - /// - /// - public static string ReplacePatternsInPropertyValue(string propertyValue, IBuildDetail buildDetail, int buildNumberPrefix, DateTime date) - { - const string regExFindTokenPattern = @"\$(?\w+)"; - const string regExReplaceTokenPattern = @"\${0}"; - var modifiedPropertyValue = propertyValue; - - var regex = new Regex(regExFindTokenPattern); - var matches = regex.Matches(propertyValue); - - foreach (Match match in matches) - { - string token = match.Value.Remove(0, 1); - - string convertedValue = ReplacePatternWithValue(token, buildDetail, buildDetail.BuildNumber, buildNumberPrefix, date); - - var regExReplace = new Regex(string.Format(regExReplaceTokenPattern, token)); - - modifiedPropertyValue = regExReplace.Replace(modifiedPropertyValue, convertedValue); - } - - modifiedPropertyValue = modifiedPropertyValue.Replace('\\', ':'); - - return modifiedPropertyValue; - } - - public static string ReplacePatternWithValue(string pattern, string buildNumber, int buildNumberPrefix, DateTime date) - { - return ReplacePatternWithValue(pattern, null, buildNumber, buildNumberPrefix, date); - } - - /// - /// - /// - /// - /// - /// The full build number - left in for versioning (backward compatibility) reasons - /// - /// - /// - public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, DateTime date) - { - var patternUpper = pattern.ToUpper(); - string convertedValue; - - string internalBuildNumber = buildDetail == null ? buildNumber : buildDetail.BuildNumber; - - switch (patternUpper) - { - case "TPROJ": - if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = buildDetail.TeamProject; - break; - - case "REQBY": - if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = StripDomain(buildDetail.RequestedBy); - break; - - case "BNAME": - if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = buildDetail.BuildDefinition.Name; - break; - - case "UTIME": - convertedValue = date.ToUniversalTime().ToString(); - break; - - case "LDATE": - convertedValue = date.ToLongDateString(); - break; - - case "LTIME": - convertedValue = date.ToLongTimeString(); - break; - - case "SDATE": - convertedValue = date.ToShortDateString(); - break; - - case "STIME": - convertedValue = date.ToShortTimeString(); - break; - - case "BNUM": - if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = buildDetail.BuildNumber; - break; - - case "YYYY": - convertedValue = date.ToString("yyyy"); - break; - - case "YY": - convertedValue = date.ToString("yy"); - break; - - case "M": - case "MM": - convertedValue = date.Month.ToString(); - break; - - case "D": - case "DD": - convertedValue = date.Day.ToString(); - break; - - case "J": - convertedValue = string.Format("{0}{1}", date.ToString("yy"), string.Format("{0:000}", date.DayOfYear)); - break; - - case "B": - if (string.IsNullOrEmpty(buildNumber)) - { - throw new ArgumentException("BuildNumber must contain the build value: use $(Rev:.r) at the end of the Build Number Format"); - } - - int buildNumberValue; - - // Attempt to parse - this should probably fail since it will only work if the only thing passed - // in through the BuildNumber is a number. This is typically something like: "Buildname.year.month.buildNumber" - var isNumber = int.TryParse(internalBuildNumber, out buildNumberValue); - - if (!isNumber) - { - var buildNumberArray = internalBuildNumber.Split('.'); - - const string exceptionString = "'Build Number Format' in the build definition must end with $(Rev:.r) to use the build number in the version pattern. Suggested pattern: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)"; - - if (buildNumberArray.Length < 2) - { - throw new ArgumentException(exceptionString); - } - - isNumber = int.TryParse(buildNumberArray[buildNumberArray.Length - 1], out buildNumberValue); - - if (isNumber == false) - { - throw new ArgumentException(exceptionString); - } - } - - buildNumberValue = AddBuildNumberPrefixIfNecessary(buildNumberPrefix, buildNumberValue); - convertedValue = buildNumberValue.ToString(); - break; - - default: - convertedValue = pattern; - break; - } - - return convertedValue; - } - - public static string StripDomain(string userId) - { - var convertedValue = userId; - - if (userId.Contains("\\")) - { - var splitVals = userId.Split('\\'); - - convertedValue = splitVals[1]; - } - - return convertedValue; - } - - public static int AddBuildNumberPrefixIfNecessary(int buildNumberPrefix, int buildNumberValue) - { - // If a BuildNumberPrefix is in place and the BuildNumber pattern is used then - // attempt to prefix the build number with the BuildNumberPrefix - // The value of 10 is used since the prefix would have to be at least 10 to be at all useable - if (buildNumberPrefix > 0) - { - if ((buildNumberValue >= buildNumberPrefix) || (buildNumberPrefix < 10)) - { - throw new ArgumentException("When the BuildNumberPrefix is used it must be at least 10 and also larger than the Build Number."); - } - - // Prefix the build number to set it apart from any other build definition - buildNumberValue += buildNumberPrefix; - } - - return buildNumberValue; - } - } -} +using System; +using System.Activities; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Text.RegularExpressions; +using Microsoft.TeamFoundation.Build.Client; +using Microsoft.TeamFoundation.VersionControl.Client; + +// ============================================================================================== +// http://tfsversioning.codeplex.com/ +// +// Author: Mark S. Nichols +// +// Copyright (c) 2011 Microsoft Corporation +// +// This source is subject to the Microsoft Permissive License. +// ============================================================================================== + +namespace TfsBuild.Versioning.Activities +{ + public static class VersioningHelper + { + public const string CsAssembly = "[assembly: {0}(\"{1}\")]"; + public const string CppAssembly = "[assembly: {0}Attribute(\"{1}\")];"; + public const string VbAssembly = ""; + public const string FsAssembly = "[]"; + public const string FsDoRegex = @".*(\(\s*\)|do\s*\(\s*\))"; + public const string FsDoStatement = "do ()"; + public const string PropertyNotFound = "Property Not Found"; + public const string AssemblyVersionPropertyName = "AssemblyVersion"; + public const string AssemblyFileVersionPropertyName = "AssemblyFileVersion"; + + public static readonly string[] AlternateAssemblyProperties; + + public const string RegExPropertyMatch = + @"(?(?[\[<].*{0}.*\(\x22)(?.*)(?\x22\)[\]>]+))"; + + static VersioningHelper() + { + AlternateAssemblyProperties = new[] { "AssemblyTitle", "AssemblyDescription", "AssemblyConfiguration", + "AssemblyCompany", "AssemblyProduct", "AssemblyCopyright", "AssemblyTrademark", + "AssemblyCulture", "AssemblyInformationalVersion" }; + } + + public static ProjectTypes GetProjectTypeFromFileName(string filename) + { + if (String.IsNullOrWhiteSpace(filename)) + { + throw new ArgumentNullException("filename"); + } + + var fileExtension = Path.GetExtension(filename); + + if (String.IsNullOrWhiteSpace(fileExtension)) + { + // nothing there? just pass in something that definitely won't match + fileExtension = ".xxx"; + } + + var normalizedFileExtension = fileExtension.ToLower(); + + switch (normalizedFileExtension) + { + case ".cs": + return ProjectTypes.Cs; + + case ".vb": + return ProjectTypes.Vb; + + case ".cpp": + return ProjectTypes.Cpp; + + case ".fs": + return ProjectTypes.Fs; + + default: + throw new ArgumentException(String.Format("{0} is not one of the accepted file types (.cs, .vb, .cpp, .fs)", filename)); + } + } + + public static string GetVersionShellByType(ProjectTypes projectType) + { + switch (projectType) + { + case ProjectTypes.Cs: + return CsAssembly; + + case ProjectTypes.Vb: + return VbAssembly; + + case ProjectTypes.Cpp: + return CppAssembly; + + case ProjectTypes.Fs: + return FsAssembly; + } + + throw new ArgumentException("projectType"); + } + + public static string InsertAssemblyInfoProperty(string fileData, string assemblyInfoPropertyName, string assemblyInfoPropertyValue, ProjectTypes projectType) + { + var fileDataOut = new StringBuilder(); + + var versionShell = GetVersionShellByType(projectType); + + // if working with F# files, remove the "do binding" so we can make sure that the "do" is at the end of the file) + //if (projectType == ProjectTypes.Fs) + //{ + // var regex = new Regex(FsDoRegex); + // fileData = regex.Replace(fileData, ""); + //} + + fileDataOut.Append(fileData); + + var versionLine = String.Format(versionShell, assemblyInfoPropertyName, assemblyInfoPropertyValue); + + fileDataOut.AppendLine(); + fileDataOut.Append(versionLine); + fileDataOut.AppendLine(); + + //// for F#, put the do() binding back in + //if (projectType == ProjectTypes.Fs) + //{ + // fileDataOut.Append(FsDoStatement); + // fileDataOut.AppendLine(); + //} + + return fileDataOut.ToString(); + } + + public static IList> GetArgumentValues(CodeActivityContext context, string argumentStartsWith) + { + PropertyDescriptorCollection properties = context.DataContext.GetProperties(); + IList> arguments = new ReadOnlyCollectionBuilder>(); + + foreach (PropertyDescriptor property in properties) + { + // Get the name of the property/argument + var name = property.DisplayName; + + // must be a string + if ((property.PropertyType != typeof (string))) continue; + + // if an argumentStartsWith has a value and name starts with it + if ((!string.IsNullOrWhiteSpace(argumentStartsWith)) && (!name.StartsWith(argumentStartsWith))) + continue; + + var value = (string) property.GetValue(context.DataContext); + + // the property/argument must have a value + if (string.IsNullOrWhiteSpace(value)) continue; + + arguments.Add(new KeyValuePair(name, value)); + } + + return arguments; + } + + public static IList> GetArgumentValues(IList> inputValues) + { + IList> arguments = new ReadOnlyCollectionBuilder>(); + + foreach (KeyValuePair argumentValuePair in inputValues) + { + if ((!string.IsNullOrWhiteSpace(argumentValuePair.Value)) && (argumentValuePair.Value != PropertyNotFound)) + { + arguments.Add(new KeyValuePair(argumentValuePair.Key, argumentValuePair.Value)); + } + } + + return arguments; + } + + /// + /// This method will walk through all the patterns in the property value and replace them with actual values + /// + /// + /// + /// + /// + /// + public static string ReplacePatternsInPropertyValue(string propertyValue, IBuildDetail buildDetail, int buildNumberPrefix, DateTime date, Workspace workspace, IBuildAgent buildAgent) + { + const string regExFindTokenPattern = @"\$(?\w+)"; + const string regExReplaceTokenPattern = @"\${0}"; + var modifiedPropertyValue = propertyValue; + + var regex = new Regex(regExFindTokenPattern); + var matches = regex.Matches(propertyValue); + + foreach (Match match in matches) + { + string token = match.Value.Remove(0, 1); + + string convertedValue = ReplacePatternWithValue(token, buildDetail, buildDetail.BuildNumber, buildNumberPrefix, date, workspace, buildAgent); + + var regExReplace = new Regex(string.Format(regExReplaceTokenPattern, token)); + + modifiedPropertyValue = regExReplace.Replace(modifiedPropertyValue, convertedValue); + } + + modifiedPropertyValue = modifiedPropertyValue.Replace('\\', ':'); + + return modifiedPropertyValue; + } + + /// + /// + /// + /// + /// + /// The full build number - left in for versioning (backward compatibility) reasons + /// + /// + /// + public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, DateTime date, Workspace workspace, IBuildAgent buildAgent) + { + var patternUpper = pattern.ToUpper(); + string convertedValue; + + string internalBuildNumber = buildDetail == null ? buildNumber : buildDetail.BuildNumber; + + switch (patternUpper) + { + case "TPROJ": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + convertedValue = buildDetail.TeamProject; + break; + + case "REQBY": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + convertedValue = StripDomain(buildDetail.RequestedBy); + break; + + case "BNAME": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + convertedValue = buildDetail.BuildDefinition.Name; + break; + + case "UTIME": + convertedValue = date.ToUniversalTime().ToString(); + break; + + case "LDATE": + convertedValue = date.ToLongDateString(); + break; + + case "LTIME": + convertedValue = date.ToLongTimeString(); + break; + + case "SDATE": + convertedValue = date.ToShortDateString(); + break; + + case "STIME": + convertedValue = date.ToShortTimeString(); + break; + + case "BNUM": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + convertedValue = buildDetail.BuildNumber; + break; + + case "YYYY": + convertedValue = date.ToString("yyyy"); + break; + + case "YY": + convertedValue = date.ToString("yy"); + break; + + case "M": + case "MM": + convertedValue = date.Month.ToString(); + break; + + case "D": + case "DD": + convertedValue = date.Day.ToString(); + break; + + case "J": + convertedValue = string.Format("{0}{1}", date.ToString("yy"), string.Format("{0:000}", date.DayOfYear)); + break; + + case "C": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + if (workspace == null) throw new ArgumentNullException("workspace"); + if (buildAgent == null) throw new ArgumentNullException("buildAgent"); + + var workspaceSourcePath = Path.Combine(buildAgent.GetExpandedBuildDirectory(buildDetail.BuildDefinition), "Sources"); + + var versionSpec = new WorkspaceVersionSpec(workspace); + + var historyParams = new QueryHistoryParameters(workspaceSourcePath, RecursionType.Full) + { + ItemVersion = versionSpec, + VersionEnd = versionSpec, + MaxResults = 1 + }; + + var changeset = workspace.VersionControlServer.QueryHistory(historyParams).FirstOrDefault(); + + if (changeset != null) + { + convertedValue = changeset.ChangesetId.ToString(); + } + else + { + convertedValue = "0"; + } + break; + + case "B": + if (string.IsNullOrEmpty(buildNumber)) + { + throw new ArgumentException("BuildNumber must contain the build value: use $(Rev:.r) at the end of the Build Number Format"); + } + + int buildNumberValue; + + // Attempt to parse - this should probably fail since it will only work if the only thing passed + // in through the BuildNumber is a number. This is typically something like: "Buildname.year.month.buildNumber" + var isNumber = int.TryParse(internalBuildNumber, out buildNumberValue); + + if (!isNumber) + { + var buildNumberArray = internalBuildNumber.Split('.'); + + const string exceptionString = "'Build Number Format' in the build definition must end with $(Rev:.r) to use the build number in the version pattern. Suggested pattern: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)"; + + if (buildNumberArray.Length < 2) + { + throw new ArgumentException(exceptionString); + } + + isNumber = int.TryParse(buildNumberArray[buildNumberArray.Length - 1], out buildNumberValue); + + if (isNumber == false) + { + throw new ArgumentException(exceptionString); + } + } + + buildNumberValue = AddBuildNumberPrefixIfNecessary(buildNumberPrefix, buildNumberValue); + convertedValue = buildNumberValue.ToString(); + break; + + default: + convertedValue = pattern; + break; + } + + return convertedValue; + } + + public static string StripDomain(string userId) + { + var convertedValue = userId; + + if (userId.Contains("\\")) + { + var splitVals = userId.Split('\\'); + + convertedValue = splitVals[1]; + } + + return convertedValue; + } + + public static int AddBuildNumberPrefixIfNecessary(int buildNumberPrefix, int buildNumberValue) + { + // If a BuildNumberPrefix is in place and the BuildNumber pattern is used then + // attempt to prefix the build number with the BuildNumberPrefix + // The value of 10 is used since the prefix would have to be at least 10 to be at all useable + if (buildNumberPrefix > 0) + { + if ((buildNumberValue >= buildNumberPrefix) || (buildNumberPrefix < 10)) + { + throw new ArgumentException("When the BuildNumberPrefix is used it must be at least 10 and also larger than the Build Number."); + } + + // Prefix the build number to set it apart from any other build definition + buildNumberValue += buildNumberPrefix; + } + + return buildNumberValue; + } + } +} From 185f03e1bb4c2f7770830f65d8ecb4d29cb0760a Mon Sep 17 00:00:00 2001 From: jricke Date: Wed, 25 Nov 2015 16:36:29 -0600 Subject: [PATCH 04/11] adding copyright, file version, assembly version, and description as output parameters to be used in the rest of the build process. --- .../VersioningBuildTemplate20.xaml | 8 +- .../ReplaceAssemblyInfoProperties.cs | 436 +++++++++--------- .../UpdateAssemblyInfoFileVersion.xaml | 14 +- .../VersionAssemblyInfoFiles.xaml | 8 +- 4 files changed, 239 insertions(+), 227 deletions(-) diff --git a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml index cd34d03..9bbcc02 100644 --- a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml +++ b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml @@ -74,8 +74,7 @@ - - + @@ -101,8 +100,7 @@ - - + @@ -288,7 +286,7 @@ - + diff --git a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs index 68297b5..6e2dfa7 100644 --- a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs +++ b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs @@ -1,224 +1,236 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Runtime.CompilerServices; -using System.Text; -using System.Activities; -using System.Text.RegularExpressions; -using Microsoft.TeamFoundation.Build.Client; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Activities; +using System.Text.RegularExpressions; +using Microsoft.TeamFoundation.Build.Client; using Microsoft.TeamFoundation.VersionControl.Client; -// ============================================================================================== -// http://tfsversioning.codeplex.com/ -// -// Author: Mark S. Nichols -// -// Copyright (c) 2011 Microsoft Corporation -// -// This source is subject to the Microsoft Permissive License. // ============================================================================================== +// http://tfsversioning.codeplex.com/ +// +// Author: Mark S. Nichols +// +// Copyright (c) 2011 Microsoft Corporation +// +// This source is subject to the Microsoft Permissive License. +// ============================================================================================== + +namespace TfsBuild.Versioning.Activities +{ + [ToolboxBitmap(typeof(ReplaceAssemblyInfoProperties), "Resources.version.ico")] + [BuildActivity(HostEnvironmentOption.All)] + [BuildExtension(HostEnvironmentOption.All)] + public sealed class ReplaceAssemblyInfoProperties : CodeActivity + { + #region Workflow Arguments + + [RequiredArgument] + public InArgument FilePath { get; set; } + + [RequiredArgument] + public InArgument ForceCreate { get; set; } -namespace TfsBuild.Versioning.Activities -{ - [ToolboxBitmap(typeof(ReplaceAssemblyInfoProperties), "Resources.version.ico")] - [BuildActivity(HostEnvironmentOption.All)] - [BuildExtension(HostEnvironmentOption.All)] - public sealed class ReplaceAssemblyInfoProperties : CodeActivity - { - #region Workflow Arguments - - [RequiredArgument] - public InArgument FilePath { get; set; } - - [RequiredArgument] - public InArgument ForceCreate { get; set; } - - /// - /// The date of the build - /// - [RequiredArgument] - public InArgument BuildDate { get; set; } - - [RequiredArgument] - public InArgument BuildDetail { get; set; } - + /// + /// The date of the build + /// [RequiredArgument] - public InArgument Workspace { get; set; } - - // Assembly properties - public InArgument AssemblyTitle { get; set; } - public InArgument AssemblyDescription { get; set; } - public InArgument AssemblyConfiguration { get; set; } - public InArgument AssemblyCompany { get; set; } - public InArgument AssemblyProduct { get; set; } - public InArgument AssemblyCopyright { get; set; } + public InArgument BuildDate { get; set; } + + [RequiredArgument] + public InArgument BuildDetail { get; set; } + + [RequiredArgument] + public InArgument Workspace { get; set; } + + // Assembly properties + public InArgument AssemblyTitle { get; set; } + public InArgument AssemblyDescription { get; set; } + public InArgument AssemblyConfiguration { get; set; } + public InArgument AssemblyCompany { get; set; } + public InArgument AssemblyProduct { get; set; } + public InArgument AssemblyCopyright { get; set; } public InArgument AssemblyTrademark { get; set; } public InArgument AssemblyCulture { get; set; } public InArgument AssemblyInformationalVersion { get; set; } - - #endregion - - /// - /// Searches a file for a the version number and replaces with the updated value - /// - /// - protected override void Execute(CodeActivityContext context) - { - // Obtain the runtime value of the Text input argument - var filePath = context.GetValue(FilePath); + + public OutArgument OutAssemblyDescription { get; set; } + public OutArgument OutAssemblyCopyright { get; set; } + + #endregion + + /// + /// Searches a file for a the version number and replaces with the updated value + /// + /// + protected override void Execute(CodeActivityContext context) + { + // Obtain the runtime value of the Text input argument + var filePath = context.GetValue(FilePath); var forceCreate = context.GetValue(ForceCreate); var buildDetail = context.GetValue(BuildDetail); var buildDate = context.GetValue(BuildDate); var workspace = context.GetValue(Workspace); - var buildAgent = context.GetExtension(); - - #region Validate Arguments - - if (String.IsNullOrEmpty(filePath)) - { - throw new ArgumentException( - "You must provide a file path", "FilePath"); - } - - if (!File.Exists(filePath)) - { - throw new FileNotFoundException("File not found:", filePath); - } - - #endregion - - IList> inputValues = new ReadOnlyCollectionBuilder>(); - - inputValues.Add(new KeyValuePair( "AssemblyTitle", context.GetValue(AssemblyTitle))); - inputValues.Add(new KeyValuePair( "AssemblyDescription", context.GetValue(AssemblyDescription))); - inputValues.Add(new KeyValuePair( "AssemblyConfiguration", context.GetValue(AssemblyConfiguration))); - inputValues.Add(new KeyValuePair( "AssemblyCompany", context.GetValue(AssemblyCompany))); - inputValues.Add(new KeyValuePair( "AssemblyProduct", context.GetValue(AssemblyProduct))); - inputValues.Add(new KeyValuePair( "AssemblyCopyright", context.GetValue(AssemblyCopyright))); - inputValues.Add(new KeyValuePair( "AssemblyTrademark", context.GetValue(AssemblyTrademark))); - inputValues.Add(new KeyValuePair( "AssemblyCulture", context.GetValue(AssemblyCulture))); - inputValues.Add(new KeyValuePair( "AssemblyInformationalVersion", context.GetValue(AssemblyInformationalVersion))); - - // Get the arguments and values from the current context - IList> assemblyInfoProperties = VersioningHelper.GetArgumentValues(inputValues); - - // What type of project are we working on? - var projectType = VersioningHelper.GetProjectTypeFromFileName(filePath); - - // Perform the update of the assembly info values based on the list created above - UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent); - } - - /// - /// Walks through the list of provided AssemblyInfo properties and updates those values - /// - /// AssemblyInfo file being modified - /// List of properties and values to change - /// - /// - /// Type of project (cs, vb, cpp or fs) - /// If the value isn't in the AssemblyInfo file do we insert it anyway - public void UpdateAssemblyValues(string filePath, IList> assemblyInfoProperties, - IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate, Workspace workspace, IBuildAgent buildAgent) - { - var newFileData = new StringBuilder(); - - // make sure you can write to the file - var currentFileAttributes = File.GetAttributes(filePath); - File.SetAttributes(filePath, currentFileAttributes & ~FileAttributes.ReadOnly); - - // Get the file data - var fileData = File.ReadAllText(filePath); - - // if working with F# files, remove the "do binding" so we can make sure that the "do" is at the end of the file - if (projectType == ProjectTypes.Fs) - { - var regex = new Regex(@".*(\(\s*\)|do\s*\(\s*\))"); - fileData = regex.Replace(fileData, ""); - } - - foreach (KeyValuePair property in assemblyInfoProperties) - { - string convertedValue = VersioningHelper.ReplacePatternsInPropertyValue(property.Value, buildDetail, 0, - buildDate, workspace, buildAgent); - - fileData = UpdateAssemblyValue(fileData, property.Key, convertedValue, projectType, forceCreate); - } - - // do we need to put a NewLine char in the data from the file - if (DoesLastLineContainCr(fileData)) - { - newFileData.Append(fileData); - } - else - { - newFileData.AppendLine(fileData); - } - - // for F#, put the do() binding back in - if (projectType == ProjectTypes.Fs) - { - newFileData.AppendLine("do ()"); - } - - // Write the data out to a file - File.WriteAllText(filePath, newFileData.ToString()); - - // restore the file's original attributes - File.SetAttributes(filePath, currentFileAttributes); - } - - /// - /// - /// - /// AssemblyInfo file contents as a string - /// Name of the property to modify or insert - /// New value of the property - /// Type of project (cs, vb, cpp or fs) - /// If the value isn't in the AssemblyInfo file do we insert it anyway - /// The updated file data - public static string UpdateAssemblyValue(string fileData, string propertyName, string propertyValue, ProjectTypes projectType, bool forceCreate) - { - string newFileData; - - // Set up RegEx - var regExExpression = string.Format(VersioningHelper.RegExPropertyMatch, propertyName); - var regex = new Regex(regExExpression); - - // perform the actual replacement - var groups = regex.Match(fileData).Groups; - - // AssemblyInfo Property not found so insert it if forceCreate is true - // 5 is the number of groups that will be discovered in the regex expression match - if ((groups.Count < 5) && (forceCreate)) - { - newFileData = VersioningHelper.InsertAssemblyInfoProperty(fileData, propertyName, propertyValue, projectType); - } - else - { - // Property was found...replace the value - var replacementString = string.Format("{0}{1}{2}", groups["PropertyPrefix"], propertyValue, groups["PropertyPostfix"]); - - newFileData = regex.Replace(fileData, replacementString); - } - - return newFileData; - } - - public static bool DoesLastLineContainCr(string fileData) - { - var regEx = new Regex(@".+\n$"); - - var match = regEx.Match(fileData); - - if (match.Success) - { - return true; - } - - return false; - } - } -} - + var buildAgent = context.GetExtension(); + + #region Validate Arguments + + if (String.IsNullOrEmpty(filePath)) + { + throw new ArgumentException( + "You must provide a file path", "FilePath"); + } + + if (!File.Exists(filePath)) + { + throw new FileNotFoundException("File not found:", filePath); + } + + #endregion + + IList> inputValues = new ReadOnlyCollectionBuilder>(); + + inputValues.Add(new KeyValuePair( "AssemblyTitle", context.GetValue(AssemblyTitle))); + inputValues.Add(new KeyValuePair( "AssemblyDescription", context.GetValue(AssemblyDescription))); + inputValues.Add(new KeyValuePair( "AssemblyConfiguration", context.GetValue(AssemblyConfiguration))); + inputValues.Add(new KeyValuePair( "AssemblyCompany", context.GetValue(AssemblyCompany))); + inputValues.Add(new KeyValuePair( "AssemblyProduct", context.GetValue(AssemblyProduct))); + inputValues.Add(new KeyValuePair( "AssemblyCopyright", context.GetValue(AssemblyCopyright))); + inputValues.Add(new KeyValuePair( "AssemblyTrademark", context.GetValue(AssemblyTrademark))); + inputValues.Add(new KeyValuePair( "AssemblyCulture", context.GetValue(AssemblyCulture))); + inputValues.Add(new KeyValuePair( "AssemblyInformationalVersion", context.GetValue(AssemblyInformationalVersion))); + + // Get the arguments and values from the current context + IList> assemblyInfoProperties = VersioningHelper.GetArgumentValues(inputValues); + + // What type of project are we working on? + var projectType = VersioningHelper.GetProjectTypeFromFileName(filePath); + + // Perform the update of the assembly info values based on the list created above + var convertedValues = UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent); + + context.SetValue(OutAssemblyCopyright, convertedValues.Any(x => x.Key == "AssemblyCopyright") ? convertedValues.First(x => x.Key == "AssemblyCopyright").Value : string.Empty); + context.SetValue(OutAssemblyDescription, convertedValues.Any(x => x.Key == "AssemblyDescription") ? convertedValues.First(x => x.Key == "AssemblyDescription").Value : string.Empty); + } + + /// + /// Walks through the list of provided AssemblyInfo properties and updates those values + /// + /// AssemblyInfo file being modified + /// List of properties and values to change + /// + /// + /// Type of project (cs, vb, cpp or fs) + /// If the value isn't in the AssemblyInfo file do we insert it anyway + public ICollection> UpdateAssemblyValues(string filePath, IList> assemblyInfoProperties, + IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate, Workspace workspace, IBuildAgent buildAgent) + { + var convertedValues = new List>(); + var newFileData = new StringBuilder(); + + // make sure you can write to the file + var currentFileAttributes = File.GetAttributes(filePath); + File.SetAttributes(filePath, currentFileAttributes & ~FileAttributes.ReadOnly); + + // Get the file data + var fileData = File.ReadAllText(filePath); + + // if working with F# files, remove the "do binding" so we can make sure that the "do" is at the end of the file + if (projectType == ProjectTypes.Fs) + { + var regex = new Regex(@".*(\(\s*\)|do\s*\(\s*\))"); + fileData = regex.Replace(fileData, ""); + } + + foreach (KeyValuePair property in assemblyInfoProperties) + { + string convertedValue = VersioningHelper.ReplacePatternsInPropertyValue(property.Value, buildDetail, 0, + buildDate, workspace, buildAgent); + + convertedValues.Add(new KeyValuePair(property.Key, convertedValue)); + + fileData = UpdateAssemblyValue(fileData, property.Key, convertedValue, projectType, forceCreate); + } + + // do we need to put a NewLine char in the data from the file + if (DoesLastLineContainCr(fileData)) + { + newFileData.Append(fileData); + } + else + { + newFileData.AppendLine(fileData); + } + + // for F#, put the do() binding back in + if (projectType == ProjectTypes.Fs) + { + newFileData.AppendLine("do ()"); + } + + // Write the data out to a file + File.WriteAllText(filePath, newFileData.ToString()); + + // restore the file's original attributes + File.SetAttributes(filePath, currentFileAttributes); + + return convertedValues; + } + + /// + /// + /// + /// AssemblyInfo file contents as a string + /// Name of the property to modify or insert + /// New value of the property + /// Type of project (cs, vb, cpp or fs) + /// If the value isn't in the AssemblyInfo file do we insert it anyway + /// The updated file data + public static string UpdateAssemblyValue(string fileData, string propertyName, string propertyValue, ProjectTypes projectType, bool forceCreate) + { + string newFileData; + + // Set up RegEx + var regExExpression = string.Format(VersioningHelper.RegExPropertyMatch, propertyName); + var regex = new Regex(regExExpression); + + // perform the actual replacement + var groups = regex.Match(fileData).Groups; + + // AssemblyInfo Property not found so insert it if forceCreate is true + // 5 is the number of groups that will be discovered in the regex expression match + if ((groups.Count < 5) && (forceCreate)) + { + newFileData = VersioningHelper.InsertAssemblyInfoProperty(fileData, propertyName, propertyValue, projectType); + } + else + { + // Property was found...replace the value + var replacementString = string.Format("{0}{1}{2}", groups["PropertyPrefix"], propertyValue, groups["PropertyPostfix"]); + + newFileData = regex.Replace(fileData, replacementString); + } + + return newFileData; + } + + public static bool DoesLastLineContainCr(string fileData) + { + var regEx = new Regex(@".+\n$"); + + var match = regEx.Match(fileData); + + if (match.Success) + { + return true; + } + + return false; + } + } +} + diff --git a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml index d9b4ada..dcbd949 100644 --- a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml +++ b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml @@ -55,6 +55,10 @@ + + + + @@ -129,9 +133,6 @@ - - - @@ -140,15 +141,12 @@ - - - - + @@ -158,7 +156,7 @@ - d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDl2A6IBDgIBAXcFoAEKAgECdxN3MQIBA3kJmwEUAgEGngEJngHlAgIBBHoLmgEVAgEHngG0AZ4B/gECAQV6uwF60wECAVN/D5gBGgIBCIABEYABiwMCAU+BARGLARYCATmMARGWARYCASOXARGXAZ0GAgEJgAHcAYABpAICAVGAAYQBgAGjAQIBUIEBH4EBqwECATqDARWJASACATuMAR+MAbMBAgEkjgEVlAEgAgEllwGCAZcBrQECASGXAdgElwHvBAIBIJcB/ASXAYsFAgEflwGmBJcBzQQCAR2XAfgBlwGdAgIBG5cBsgKXAdsCAgEZlwHwA5cBkwQCAReXAcABlwHnAQIBFZcBvAOXAeEDAgETlwGNBpcBmgYCARKXAUaXAWsCARCXAfkClwGrAwIBDpcBqgWXAcAFAgEMlwGVBZcBnQUCAQqHAReHAfgCAgFEiAEXiAHyAgIBPJIBF5IBgAMCAS6TAReTAf4CAgEmhwGrAYcBvgECAU2HAUCHAU8CAUyHAX6HAZMBAgFKhwG4AocB3QICAUiHAVyHAWsCAUaHAegChwH1AgIBRYgBigKIAZ0CAgFCiAGqAogB7wICAUGIAXeIAY0BAgE/iAFiiAFqAgE9kgGrAZIBwgECATeSAUCSAU8CATaSAX6SAZMBAgE0kgG8ApIB5QICATKSAVySAWsCATCSAfACkgH9AgIBL5MBjgKTAaUCAgEskwGyApMB+wICASuTAXuTAZEBAgEpkwFmkwFuAgEn + d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDt6A6ABDgIBAXsFngEKAgECexN7MQIBA30JmQEUAgEHnAEJnAHlAgIBBH4LmAEVAgEInAG0AZwB/gECAQZ+uwF+0wECAV6DAQ+WARoCAQmEARGEAYsDAgFahQERjAEWAgFCjQERlAEWAgEqlQERlQH3BgIBCoQB3AGEAaQCAgFchAGEAYQBowECAVuFAR+FAasBAgFDhwEVigEgAgFEjQEfjQGzAQIBK48BFZIBIAIBLJUBggGVAa0BAgEolQHYBJUB7wQCASeVAfwElQGLBQIBJZUBpgSVAc0EAgEjlQH4AZUBnQICASGVAcUGlQHcBgIBH5UBsgKVAdsCAgEdlQHwA5UBkwQCARuVAcABlQHnAQIBGZUBmAaVAa0GAgEXlQG8A5UB4QMCARWVAecGlQH0BgIBE5UBRpUBawIBEZUB+QKVAasDAgEPlQGqBZUBwAUCAQ2VAZUFlQGdBQIBC4gBF4gB+AICAU2JAReJAfICAgFFkAEXkAGAAwIBNZEBF5EB/gICAS2IAasBiAG+AQIBWIgBQIgBTwIBVogBfogBkwECAVSIAbgCiAHdAgIBUogBXIgBawIBUIgB6AKIAfUCAgFOiQGKAokBnQICAUuJAaoCiQHvAgIBSokBd4kBjQECAUiJAWKJAWoCAUaQAasBkAHCAQIBQJABQJABTwIBPpABfpABkwECATyQAbwCkAHlAgIBOpABXJABawIBOJAB8AKQAf0CAgE2kQGOApEBpQICATORAbICkQH7AgIBMpEBe5EBkQECATCRAWaRAW4CAS4= diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index 78382a2..de88cdb 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -64,6 +64,10 @@ + + + + @@ -509,7 +513,7 @@ - + @@ -543,7 +547,7 @@ - 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 From 887d097988d6e358524296eb52d3fe582c424f7f Mon Sep 17 00:00:00 2001 From: jricke Date: Tue, 8 Dec 2015 17:01:38 -0600 Subject: [PATCH 05/11] added AssemblyProduct as an output parameter --- .../ReplaceAssemblyInfoProperties.cs | 2 ++ .../UpdateAssemblyInfoFileVersion.xaml | 5 +++-- TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml | 5 +++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs index 6e2dfa7..e8d178d 100644 --- a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs +++ b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs @@ -60,6 +60,7 @@ public sealed class ReplaceAssemblyInfoProperties : CodeActivity public OutArgument OutAssemblyDescription { get; set; } public OutArgument OutAssemblyCopyright { get; set; } + public OutArgument OutAssemblyProduct { get; set; } #endregion @@ -114,6 +115,7 @@ protected override void Execute(CodeActivityContext context) var convertedValues = UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent); context.SetValue(OutAssemblyCopyright, convertedValues.Any(x => x.Key == "AssemblyCopyright") ? convertedValues.First(x => x.Key == "AssemblyCopyright").Value : string.Empty); + context.SetValue(OutAssemblyProduct, convertedValues.Any(x => x.Key == "AssemblyProduct") ? convertedValues.First(x => x.Key == "AssemblyProduct").Value : string.Empty); context.SetValue(OutAssemblyDescription, convertedValues.Any(x => x.Key == "AssemblyDescription") ? convertedValues.First(x => x.Key == "AssemblyDescription").Value : string.Empty); } diff --git a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml index dcbd949..3d24857 100644 --- a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml +++ b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml @@ -59,6 +59,7 @@ + @@ -146,7 +147,7 @@ - + @@ -156,7 +157,7 @@ - d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDt6A6ABDgIBAXsFngEKAgECexN7MQIBA30JmQEUAgEHnAEJnAHlAgIBBH4LmAEVAgEInAG0AZwB/gECAQZ+uwF+0wECAV6DAQ+WARoCAQmEARGEAYsDAgFahQERjAEWAgFCjQERlAEWAgEqlQERlQH3BgIBCoQB3AGEAaQCAgFchAGEAYQBowECAVuFAR+FAasBAgFDhwEVigEgAgFEjQEfjQGzAQIBK48BFZIBIAIBLJUBggGVAa0BAgEolQHYBJUB7wQCASeVAfwElQGLBQIBJZUBpgSVAc0EAgEjlQH4AZUBnQICASGVAcUGlQHcBgIBH5UBsgKVAdsCAgEdlQHwA5UBkwQCARuVAcABlQHnAQIBGZUBmAaVAa0GAgEXlQG8A5UB4QMCARWVAecGlQH0BgIBE5UBRpUBawIBEZUB+QKVAasDAgEPlQGqBZUBwAUCAQ2VAZUFlQGdBQIBC4gBF4gB+AICAU2JAReJAfICAgFFkAEXkAGAAwIBNZEBF5EB/gICAS2IAasBiAG+AQIBWIgBQIgBTwIBVogBfogBkwECAVSIAbgCiAHdAgIBUogBXIgBawIBUIgB6AKIAfUCAgFOiQGKAokBnQICAUuJAaoCiQHvAgIBSokBd4kBjQECAUiJAWKJAWoCAUaQAasBkAHCAQIBQJABQJABTwIBPpABfpABkwECATyQAbwCkAHlAgIBOpABXJABawIBOJAB8AKQAf0CAgE2kQGOApEBpQICATORAbICkQH7AgIBMpEBe5EBkQECATCRAWaRAW4CAS4= + d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDx7A6EBDgIBAXwFnwEKAgECfBN8MQIBA34JmgEUAgEHnQEJnQHlAgIBBH8LmQEVAgEInQG0AZ0B/gECAQZ/uwF/0wECAWCEAQ+XARoCAQmFARGFAYsDAgFchgERjQEWAgFEjgERlQEWAgEslgERlgGeBwIBCoUB3AGFAaQCAgFehQGEAYUBowECAV2GAR+GAasBAgFFiAEViwEgAgFGjgEfjgGzAQIBLZABFZMBIAIBLpYBggGWAa0BAgEqlgHYBJYB7wQCASmWAfwElgGLBQIBJ5YBpgSWAc0EAgEllgH4AZYBnQICASOWAcUGlgHcBgIBIZYBsgKWAdsCAgEflgHwA5YBkwQCAR2WAcABlgHnAQIBG5YBmAaWAa0GAgEZlgG8A5YB4QMCAReWAY4HlgGbBwIBFZYBRpYBawIBE5YB+QKWAasDAgERlgGqBZYBwAUCAQ+WAfAGlgGDBwIBDZYBlQWWAZ0FAgELiQEXiQH4AgIBT4oBF4oB8gICAUeRAReRAYADAgE3kgEXkgH+AgIBL4kBqwGJAb4BAgFaiQFAiQFPAgFYiQF+iQGTAQIBVokBuAKJAd0CAgFUiQFciQFrAgFSiQHoAokB9QICAVCKAYoCigGdAgIBTYoBqgKKAe8CAgFMigF3igGNAQIBSooBYooBagIBSJEBqwGRAcIBAgFCkQFAkQFPAgFAkQF+kQGTAQIBPpEBvAKRAeUCAgE8kQFckQFrAgE6kQHwApEB/QICATiSAY4CkgGlAgIBNZIBsgKSAfsCAgE0kgF7kgGRAQIBMpIBZpIBbgIBMA== diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index de88cdb..f6c6d78 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -68,6 +68,7 @@ + @@ -513,7 +514,7 @@ - + @@ -547,7 +548,7 @@ - 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 From be59028f827f3f1ecc79174fcf2dec48731142e3 Mon Sep 17 00:00:00 2001 From: jricke Date: Mon, 14 Dec 2015 14:43:03 -0600 Subject: [PATCH 06/11] updated version template to include new parameters for version task --- .../BuildProcessTemplates/VersioningBuildTemplate20.xaml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml index 9bbcc02..ad4e0dc 100644 --- a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml +++ b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml @@ -203,6 +203,11 @@ + + + + + @@ -286,7 +291,7 @@ - + From f0aca39ff0b6c560d88f866612082b98f4d12fc0 Mon Sep 17 00:00:00 2001 From: jricke Date: Mon, 14 Dec 2015 15:41:39 -0600 Subject: [PATCH 07/11] adding assembly informational version for output --- .../VersioningBuildTemplate20.xaml | 13 +++++++------ .../ReplaceAssemblyInfoProperties.cs | 2 ++ .../UpdateAssemblyInfoFileVersion.xaml | 5 +++-- .../VersionAssemblyInfoFiles.xaml | 5 +++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml index ad4e0dc..23135bc 100644 --- a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml +++ b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml @@ -203,11 +203,12 @@ - - - - - + + + + + + @@ -291,7 +292,7 @@ - + diff --git a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs index e8d178d..c2ece94 100644 --- a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs +++ b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs @@ -61,6 +61,7 @@ public sealed class ReplaceAssemblyInfoProperties : CodeActivity public OutArgument OutAssemblyDescription { get; set; } public OutArgument OutAssemblyCopyright { get; set; } public OutArgument OutAssemblyProduct { get; set; } + public OutArgument OutAssemblyInformationalVersion { get; set; } #endregion @@ -117,6 +118,7 @@ protected override void Execute(CodeActivityContext context) context.SetValue(OutAssemblyCopyright, convertedValues.Any(x => x.Key == "AssemblyCopyright") ? convertedValues.First(x => x.Key == "AssemblyCopyright").Value : string.Empty); context.SetValue(OutAssemblyProduct, convertedValues.Any(x => x.Key == "AssemblyProduct") ? convertedValues.First(x => x.Key == "AssemblyProduct").Value : string.Empty); context.SetValue(OutAssemblyDescription, convertedValues.Any(x => x.Key == "AssemblyDescription") ? convertedValues.First(x => x.Key == "AssemblyDescription").Value : string.Empty); + context.SetValue(OutAssemblyInformationalVersion, convertedValues.Any(x => x.Key == "AssemblyInformationalVersion") ? convertedValues.First(x => x.Key == "AssemblyInformationalVersion").Value : string.Empty); } /// diff --git a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml index 3d24857..a9f7f4d 100644 --- a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml +++ b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml @@ -60,6 +60,7 @@ + @@ -147,7 +148,7 @@ - + @@ -157,7 +158,7 @@ - d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbDx7A6EBDgIBAXwFnwEKAgECfBN8MQIBA34JmgEUAgEHnQEJnQHlAgIBBH8LmQEVAgEInQG0AZ0B/gECAQZ/uwF/0wECAWCEAQ+XARoCAQmFARGFAYsDAgFchgERjQEWAgFEjgERlQEWAgEslgERlgGeBwIBCoUB3AGFAaQCAgFehQGEAYUBowECAV2GAR+GAasBAgFFiAEViwEgAgFGjgEfjgGzAQIBLZABFZMBIAIBLpYBggGWAa0BAgEqlgHYBJYB7wQCASmWAfwElgGLBQIBJ5YBpgSWAc0EAgEllgH4AZYBnQICASOWAcUGlgHcBgIBIZYBsgKWAdsCAgEflgHwA5YBkwQCAR2WAcABlgHnAQIBG5YBmAaWAa0GAgEZlgG8A5YB4QMCAReWAY4HlgGbBwIBFZYBRpYBawIBE5YB+QKWAasDAgERlgGqBZYBwAUCAQ+WAfAGlgGDBwIBDZYBlQWWAZ0FAgELiQEXiQH4AgIBT4oBF4oB8gICAUeRAReRAYADAgE3kgEXkgH+AgIBL4kBqwGJAb4BAgFaiQFAiQFPAgFYiQF+iQGTAQIBVokBuAKJAd0CAgFUiQFciQFrAgFSiQHoAokB9QICAVCKAYoCigGdAgIBTYoBqgKKAe8CAgFMigF3igGNAQIBSooBYooBagIBSJEBqwGRAcIBAgFCkQFAkQFPAgFAkQF+kQGTAQIBPpEBvAKRAeUCAgE8kQFckQFrAgE6kQHwApEB/QICATiSAY4CkgGlAgIBNZIBsgKSAfsCAgE0kgF7kgGRAQIBMpIBZpIBbgIBMA== + d1xDOlxkZXZcVGZzVmVyc2lvbmluZ1x0cnVua1xUZnNCdWlsZC5WZXJzaW9uaW5nLkFjdGl2aXRpZXNcVXBkYXRlQXNzZW1ibHlJbmZvRmlsZVZlcnNpb24ueGFtbD18A6IBDgIBAX0FoAEKAgECfRN9MQIBA38JmwEUAgEHngEJngHlAgIBBIABC5oBFQIBCJ4BtAGeAf4BAgEGgAG7AYAB0wECAWKFAQ+YARoCAQmGARGGAYsDAgFehwERjgEWAgFGjwERlgEWAgEulwERlwHfBwIBCoYB3AGGAaQCAgFghgGEAYYBowECAV+HAR+HAasBAgFHiQEVjAEgAgFIjwEfjwGzAQIBL5EBFZQBIAIBMJcBggGXAa0BAgEslwHYBJcB7wQCASuXAfwElwGLBQIBKZcBpgSXAc0EAgEnlwH4AZcBnQICASWXAcUGlwHcBgIBI5cBsgKXAdsCAgEhlwHwA5cBkwQCAR+XAcABlwHnAQIBHZcBmAaXAa0GAgEblwG8A5cB4QMCARmXAc8HlwHcBwIBF5cBRpcBawIBFZcB+QKXAasDAgETlwH9BpcBnQcCARGXAaoFlwHABQIBD5cBsQeXAcQHAgENlwGVBZcBnQUCAQuKAReKAfgCAgFRiwEXiwHyAgIBSZIBF5IBgAMCATmTAReTAf4CAgExigGrAYoBvgECAVyKAUCKAU8CAVqKAX6KAZMBAgFYigG4AooB3QICAVaKAVyKAWsCAVSKAegCigH1AgIBUosBigKLAZ0CAgFPiwGqAosB7wICAU6LAXeLAY0BAgFMiwFiiwFqAgFKkgGrAZIBwgECAUSSAUCSAU8CAUKSAX6SAZMBAgFAkgG8ApIB5QICAT6SAVySAWsCATySAfACkgH9AgIBOpMBjgKTAaUCAgE3kwGyApMB+wICATaTAXuTAZEBAgE0kwFmkwFuAgEy diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index f6c6d78..4e99b7e 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -69,6 +69,7 @@ + @@ -514,7 +515,7 @@ - + @@ -548,7 +549,7 @@ - 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 From a825158e33597744512715374e9a84266070f25a Mon Sep 17 00:00:00 2001 From: jricke Date: Fri, 18 Dec 2015 16:11:08 -0600 Subject: [PATCH 08/11] added build increment and seed --- .../VersioningBuildTemplate20.xaml | 8 +- .../ConvertVersionPattern.cs | 12 ++- .../ReplaceAssemblyInfoProperties.cs | 30 ++++++-- .../UpdateAssemblyInfoFileVersion.xaml | 12 +-- .../VersionAssemblyInfoFiles.xaml | 8 +- .../VersioningHelper.cs | 73 +++++++++++-------- 6 files changed, 94 insertions(+), 49 deletions(-) diff --git a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml index 23135bc..b59818a 100644 --- a/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml +++ b/TfsBuild.Versioning.Activities/BuildProcessTemplates/VersioningBuildTemplate20.xaml @@ -1,4 +1,4 @@ - + + @@ -106,6 +108,8 @@ + + @@ -292,7 +296,7 @@ - + diff --git a/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs b/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs index d69032a..3d7accb 100644 --- a/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs +++ b/TfsBuild.Versioning.Activities/ConvertVersionPattern.cs @@ -45,6 +45,12 @@ public sealed class ConvertVersionPattern : CodeActivity [RequiredArgument] public InArgument BuildNumberPrefix { get; set; } + [RequiredArgument] + public InArgument BuildIncrementValue { get; set; } + + [RequiredArgument] + public InArgument BuildNumberSeed { get; set; } + [RequiredArgument] public InArgument BuildDetail { get; set; } @@ -68,10 +74,12 @@ protected override void Execute(CodeActivityContext context) var versionPattern = context.GetValue(VersionPattern); var buildNumber = context.GetValue(BuildNumber); var buildNumberPrefix = context.GetValue(BuildNumberPrefix); + var buildIncrementValue = context.GetValue(BuildIncrementValue); + var buildNumberSeed = context.GetValue(BuildNumberSeed); var buildDetail = context.GetValue(BuildDetail); var workspace = context.GetValue(Workspace); var buildAgent = context.GetExtension(); - + var version = new StringBuilder(); var addDot = false; @@ -88,7 +96,7 @@ protected override void Execute(CodeActivityContext context) { if (addDot) { version.Append("."); } - version.Append(VersioningHelper.ReplacePatternWithValue(conversionItem, buildDetail, buildNumber, buildNumberPrefix, DateTime.Now, workspace, buildAgent)); + version.Append(VersioningHelper.ReplacePatternWithValue(conversionItem, buildDetail, buildNumber, buildNumberPrefix, buildIncrementValue, buildNumberSeed, DateTime.Now, workspace, buildAgent)); addDot = true; } diff --git a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs index c2ece94..8be1132 100644 --- a/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs +++ b/TfsBuild.Versioning.Activities/ReplaceAssemblyInfoProperties.cs @@ -47,6 +47,18 @@ public sealed class ReplaceAssemblyInfoProperties : CodeActivity [RequiredArgument] public InArgument Workspace { get; set; } + /// + /// The prefix value to add to the build number to make it unique compared to other builds + /// + [RequiredArgument] + public InArgument BuildNumberPrefix { get; set; } + + [RequiredArgument] + public InArgument BuildIncrementValue { get; set; } + + [RequiredArgument] + public InArgument BuildNumberSeed { get; set; } + // Assembly properties public InArgument AssemblyTitle { get; set; } public InArgument AssemblyDescription { get; set; } @@ -77,8 +89,11 @@ protected override void Execute(CodeActivityContext context) var buildDetail = context.GetValue(BuildDetail); var buildDate = context.GetValue(BuildDate); var workspace = context.GetValue(Workspace); + var buildNumberPrefix = context.GetValue(BuildNumberPrefix); + var buildIncrementValue = context.GetValue(BuildIncrementValue); + var buildNumberSeed = context.GetValue(BuildNumberSeed); var buildAgent = context.GetExtension(); - + #region Validate Arguments if (String.IsNullOrEmpty(filePath)) @@ -113,7 +128,7 @@ protected override void Execute(CodeActivityContext context) var projectType = VersioningHelper.GetProjectTypeFromFileName(filePath); // Perform the update of the assembly info values based on the list created above - var convertedValues = UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent); + var convertedValues = UpdateAssemblyValues(filePath, assemblyInfoProperties, buildDetail, buildDate, projectType, forceCreate, workspace, buildAgent, buildNumberPrefix, buildIncrementValue, buildNumberSeed); context.SetValue(OutAssemblyCopyright, convertedValues.Any(x => x.Key == "AssemblyCopyright") ? convertedValues.First(x => x.Key == "AssemblyCopyright").Value : string.Empty); context.SetValue(OutAssemblyProduct, convertedValues.Any(x => x.Key == "AssemblyProduct") ? convertedValues.First(x => x.Key == "AssemblyProduct").Value : string.Empty); @@ -130,8 +145,13 @@ protected override void Execute(CodeActivityContext context) /// /// Type of project (cs, vb, cpp or fs) /// If the value isn't in the AssemblyInfo file do we insert it anyway - public ICollection> UpdateAssemblyValues(string filePath, IList> assemblyInfoProperties, - IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate, Workspace workspace, IBuildAgent buildAgent) + /// + /// + /// + /// + /// + public ICollection> UpdateAssemblyValues(string filePath, IList> assemblyInfoProperties, + IBuildDetail buildDetail, DateTime buildDate, ProjectTypes projectType, bool forceCreate, Workspace workspace, IBuildAgent buildAgent, int buildNumberPrefix, int incrementBy, int buildNumberSeed) { var convertedValues = new List>(); var newFileData = new StringBuilder(); @@ -152,7 +172,7 @@ public ICollection> UpdateAssemblyValues(string fil foreach (KeyValuePair property in assemblyInfoProperties) { - string convertedValue = VersioningHelper.ReplacePatternsInPropertyValue(property.Value, buildDetail, 0, + string convertedValue = VersioningHelper.ReplacePatternsInPropertyValue(property.Value, buildDetail, buildNumberPrefix, incrementBy, buildNumberSeed, buildDate, workspace, buildAgent); convertedValues.Add(new KeyValuePair(property.Key, convertedValue)); diff --git a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml index a9f7f4d..d917d52 100644 --- a/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml +++ b/TfsBuild.Versioning.Activities/UpdateAssemblyInfoFileVersion.xaml @@ -1,4 +1,4 @@ - + + @@ -135,7 +137,7 @@ - + @@ -143,12 +145,12 @@ - + - + @@ -158,7 +160,7 @@ - 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 diff --git a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml index 4e99b7e..11785d2 100644 --- a/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml +++ b/TfsBuild.Versioning.Activities/VersionAssemblyInfoFiles.xaml @@ -1,4 +1,4 @@ - + + @@ -515,7 +517,7 @@ - + @@ -549,7 +551,7 @@ - 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 diff --git a/TfsBuild.Versioning.Activities/VersioningHelper.cs b/TfsBuild.Versioning.Activities/VersioningHelper.cs index 03b1d29..481af0d 100644 --- a/TfsBuild.Versioning.Activities/VersioningHelper.cs +++ b/TfsBuild.Versioning.Activities/VersioningHelper.cs @@ -182,9 +182,11 @@ public static IList> GetArgumentValues(IList /// /// + /// + /// /// /// - public static string ReplacePatternsInPropertyValue(string propertyValue, IBuildDetail buildDetail, int buildNumberPrefix, DateTime date, Workspace workspace, IBuildAgent buildAgent) + public static string ReplacePatternsInPropertyValue(string propertyValue, IBuildDetail buildDetail, int buildNumberPrefix, int incrementBy, int buildNumberSeed, DateTime date, Workspace workspace, IBuildAgent buildAgent) { const string regExFindTokenPattern = @"\$(?\w+)"; const string regExReplaceTokenPattern = @"\${0}"; @@ -197,7 +199,7 @@ public static string ReplacePatternsInPropertyValue(string propertyValue, IBuild { string token = match.Value.Remove(0, 1); - string convertedValue = ReplacePatternWithValue(token, buildDetail, buildDetail.BuildNumber, buildNumberPrefix, date, workspace, buildAgent); + string convertedValue = ReplacePatternWithValue(token, buildDetail, buildDetail.BuildNumber, buildNumberPrefix, incrementBy, buildNumberSeed, date, workspace, buildAgent); var regExReplace = new Regex(string.Format(regExReplaceTokenPattern, token)); @@ -216,9 +218,11 @@ public static string ReplacePatternsInPropertyValue(string propertyValue, IBuild /// /// The full build number - left in for versioning (backward compatibility) reasons /// + /// + /// /// /// - public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, DateTime date, Workspace workspace, IBuildAgent buildAgent) + public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, int incrementBy, int buildNumberSeed, DateTime date, Workspace workspace, IBuildAgent buildAgent) { var patternUpper = pattern.ToUpper(); string convertedValue; @@ -318,38 +322,12 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD break; case "B": - if (string.IsNullOrEmpty(buildNumber)) - { - throw new ArgumentException("BuildNumber must contain the build value: use $(Rev:.r) at the end of the Build Number Format"); - } - - int buildNumberValue; - - // Attempt to parse - this should probably fail since it will only work if the only thing passed - // in through the BuildNumber is a number. This is typically something like: "Buildname.year.month.buildNumber" - var isNumber = int.TryParse(internalBuildNumber, out buildNumberValue); - - if (!isNumber) - { - var buildNumberArray = internalBuildNumber.Split('.'); - - const string exceptionString = "'Build Number Format' in the build definition must end with $(Rev:.r) to use the build number in the version pattern. Suggested pattern: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)"; + if (incrementBy <= 0) throw new ArgumentException("incrementBy cannot be <= 0.", "incrementBy"); - if (buildNumberArray.Length < 2) - { - throw new ArgumentException(exceptionString); - } + var buildNum = GetBuildNumberValue(internalBuildNumber, buildNumberSeed, buildNumberPrefix); - isNumber = int.TryParse(buildNumberArray[buildNumberArray.Length - 1], out buildNumberValue); + convertedValue = (buildNum * incrementBy).ToString(); - if (isNumber == false) - { - throw new ArgumentException(exceptionString); - } - } - - buildNumberValue = AddBuildNumberPrefixIfNecessary(buildNumberPrefix, buildNumberValue); - convertedValue = buildNumberValue.ToString(); break; default: @@ -360,6 +338,37 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD return convertedValue; } + private static int GetBuildNumberValue(string internalBuildNumber, int buildNumberSeed, int buildNumberPrefix) + { + int buildNumberValue; + + // Attempt to parse - this should probably fail since it will only work if the only thing passed + // in through the BuildNumber is a number. This is typically something like: "Buildname.year.month.buildNumber" + var isNumber = int.TryParse(internalBuildNumber, out buildNumberValue); + + if (!isNumber) + { + var buildNumberArray = internalBuildNumber.Split('.'); + + const string exceptionString = + "'Build Number Format' in the build definition must end with $(Rev:.r) to use the build number in the version pattern. Suggested pattern: $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)"; + + if (buildNumberArray.Length < 2) + { + throw new ArgumentException(exceptionString); + } + + isNumber = int.TryParse(buildNumberArray[buildNumberArray.Length - 1], out buildNumberValue); + + if (isNumber == false) + { + throw new ArgumentException(exceptionString); + } + } + + return AddBuildNumberPrefixIfNecessary(buildNumberPrefix, buildNumberValue + buildNumberSeed); + } + public static string StripDomain(string userId) { var convertedValue = userId; From f000f815569e951ad61373e4c949e91ace19c392 Mon Sep 17 00:00:00 2001 From: jricke Date: Tue, 22 Dec 2015 14:02:01 -0600 Subject: [PATCH 09/11] Adding "S" as a version option. "S" will use 1 for ValidateShelveset reason, otherwise 0 --- TfsBuild.Versioning.Activities/VersioningHelper.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/TfsBuild.Versioning.Activities/VersioningHelper.cs b/TfsBuild.Versioning.Activities/VersioningHelper.cs index 481af0d..88114f1 100644 --- a/TfsBuild.Versioning.Activities/VersioningHelper.cs +++ b/TfsBuild.Versioning.Activities/VersioningHelper.cs @@ -268,7 +268,7 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD case "BNUM": if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = buildDetail.BuildNumber; + convertedValue = internalBuildNumber; break; case "YYYY": @@ -301,7 +301,7 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD var workspaceSourcePath = Path.Combine(buildAgent.GetExpandedBuildDirectory(buildDetail.BuildDefinition), "Sources"); var versionSpec = new WorkspaceVersionSpec(workspace); - + var historyParams = new QueryHistoryParameters(workspaceSourcePath, RecursionType.Full) { ItemVersion = versionSpec, @@ -320,7 +320,7 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD convertedValue = "0"; } break; - + case "B": if (incrementBy <= 0) throw new ArgumentException("incrementBy cannot be <= 0.", "incrementBy"); @@ -330,6 +330,13 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD break; + case "S": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + + convertedValue = buildDetail.Reason == BuildReason.ValidateShelveset ? "1" : "0"; + + break; + default: convertedValue = pattern; break; From 6005aedc79d00e4776976cc658943011dba91c33 Mon Sep 17 00:00:00 2001 From: jricke Date: Sat, 2 Jan 2016 21:53:25 -0600 Subject: [PATCH 10/11] Absolute value seed result --- TfsBuild.Versioning.Activities/VersioningHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TfsBuild.Versioning.Activities/VersioningHelper.cs b/TfsBuild.Versioning.Activities/VersioningHelper.cs index 88114f1..f9af3b5 100644 --- a/TfsBuild.Versioning.Activities/VersioningHelper.cs +++ b/TfsBuild.Versioning.Activities/VersioningHelper.cs @@ -326,7 +326,7 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD var buildNum = GetBuildNumberValue(internalBuildNumber, buildNumberSeed, buildNumberPrefix); - convertedValue = (buildNum * incrementBy).ToString(); + convertedValue = Math.Abs(buildNum * incrementBy).ToString(); break; From 2326f9f208146ce5dee847ce440a17342fe61084 Mon Sep 17 00:00:00 2001 From: jricke Date: Wed, 24 Feb 2016 09:45:05 -0600 Subject: [PATCH 11/11] adding changeset max for overflow value --- .../VersioningHelper.cs | 61 ++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/TfsBuild.Versioning.Activities/VersioningHelper.cs b/TfsBuild.Versioning.Activities/VersioningHelper.cs index f9af3b5..8137b69 100644 --- a/TfsBuild.Versioning.Activities/VersioningHelper.cs +++ b/TfsBuild.Versioning.Activities/VersioningHelper.cs @@ -222,7 +222,7 @@ public static string ReplacePatternsInPropertyValue(string propertyValue, IBuild /// /// /// - public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, int incrementBy, int buildNumberSeed, DateTime date, Workspace workspace, IBuildAgent buildAgent) + public static string ReplacePatternWithValue(string pattern, IBuildDetail buildDetail, string buildNumber, int buildNumberPrefix, int incrementBy, int buildNumberSeed, DateTime date, Workspace workspace, IBuildAgent buildAgent, int changesetMax) { var patternUpper = pattern.ToUpper(); string convertedValue; @@ -297,23 +297,29 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD if (buildDetail == null) throw new ArgumentNullException("buildDetail"); if (workspace == null) throw new ArgumentNullException("workspace"); if (buildAgent == null) throw new ArgumentNullException("buildAgent"); - - var workspaceSourcePath = Path.Combine(buildAgent.GetExpandedBuildDirectory(buildDetail.BuildDefinition), "Sources"); - - var versionSpec = new WorkspaceVersionSpec(workspace); - - var historyParams = new QueryHistoryParameters(workspaceSourcePath, RecursionType.Full) - { - ItemVersion = versionSpec, - VersionEnd = versionSpec, - MaxResults = 1 - }; - var changeset = workspace.VersionControlServer.QueryHistory(historyParams).FirstOrDefault(); + var changeset = GetChangeset(buildDetail, workspace, buildAgent); if (changeset != null) { - convertedValue = changeset.ChangesetId.ToString(); + convertedValue = (changeset.ChangesetId % changesetMax).ToString(); + } + else + { + convertedValue = "0"; + } + break; + + case "CO": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + if (workspace == null) throw new ArgumentNullException("workspace"); + if (buildAgent == null) throw new ArgumentNullException("buildAgent"); + + var overflowChangeset = GetChangeset(buildDetail, workspace, buildAgent); + + if (overflowChangeset != null) + { + convertedValue = (overflowChangeset.ChangesetId / changesetMax).ToString(); } else { @@ -321,6 +327,7 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD } break; + case "B": if (incrementBy <= 0) throw new ArgumentException("incrementBy cannot be <= 0.", "incrementBy"); @@ -333,7 +340,14 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD case "S": if (buildDetail == null) throw new ArgumentNullException("buildDetail"); - convertedValue = buildDetail.Reason == BuildReason.ValidateShelveset ? "1" : "0"; + convertedValue = buildDetail.Reason == BuildReason.ValidateShelveset ? "65535" : "0"; + + break; + + case "SN": + if (buildDetail == null) throw new ArgumentNullException("buildDetail"); + + convertedValue = buildDetail.ShelvesetName; break; @@ -345,6 +359,23 @@ public static string ReplacePatternWithValue(string pattern, IBuildDetail buildD return convertedValue; } + private static Changeset GetChangeset(IBuildDetail buildDetail, Workspace workspace, IBuildAgent buildAgent) + { + var workspaceSourcePath = Path.Combine(buildAgent.GetExpandedBuildDirectory(buildDetail.BuildDefinition), "Sources"); + + var versionSpec = new WorkspaceVersionSpec(workspace); + + var historyParams = new QueryHistoryParameters(workspaceSourcePath, RecursionType.Full) + { + ItemVersion = versionSpec, + VersionEnd = versionSpec, + MaxResults = 1 + }; + + var changeset = workspace.VersionControlServer.QueryHistory(historyParams).FirstOrDefault(); + return changeset; + } + private static int GetBuildNumberValue(string internalBuildNumber, int buildNumberSeed, int buildNumberPrefix) { int buildNumberValue;