From 02e682881979cd87592ee1e8e39b7744b575829c Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Mon, 9 May 2022 22:21:16 -0700 Subject: Add support for semver in bundles and dependencies Take advantage of WixVersion/verutil functionality to support wider range of version numbers were possible in the WiX Toolset Completes 4666 --- src/api/wix/WixToolset.Data/ErrorMessages.cs | 8 ++++---- src/api/wix/WixToolset.Data/WarningMessages.cs | 12 ++++++------ .../Services/IBackendHelper.cs | 18 ++++++++++++++++-- 3 files changed, 26 insertions(+), 12 deletions(-) (limited to 'src/api') diff --git a/src/api/wix/WixToolset.Data/ErrorMessages.cs b/src/api/wix/WixToolset.Data/ErrorMessages.cs index 186acd29..d3d2932d 100644 --- a/src/api/wix/WixToolset.Data/ErrorMessages.cs +++ b/src/api/wix/WixToolset.Data/ErrorMessages.cs @@ -1076,7 +1076,7 @@ namespace WixToolset.Data public static Message IllegalVersionValue(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string value) { - return Message(sourceLineNumbers, Ids.IllegalVersionValue, "The {0}/@{1} attribute's value, '{2}', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534.", elementName, attributeName, value); + return Message(sourceLineNumbers, Ids.IllegalVersionValue, "The {0}/@{1} attribute's value, '{2}', is not a valid version. Specify a four-part version or semantic version, such as '#.#.#.#' or '#.#.#-label.#'.", elementName, attributeName, value); } public static Message IllegalWarningIdAsError(string warningId) @@ -1279,9 +1279,9 @@ namespace WixToolset.Data return Message(sourceLineNumbers, Ids.InvalidMergeLanguage, "The Merge element '{0}' specified an invalid language '{1}'. Verify that localization tokens are being properly resolved to a numeric LCID.", mergeId, mergeLanguage); } - public static Message InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version) + public static Message InvalidFourPartVersion(SourceLineNumber sourceLineNumbers, string elementName, string attributeName, string version) { - return Message(sourceLineNumbers, Ids.InvalidModuleOrBundleVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", moduleOrBundle, version); + return Message(sourceLineNumbers, Ids.InvalidFourPartVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", elementName, version); } public static Message InvalidPlatformValue(SourceLineNumber sourceLineNumbers, string value) @@ -2678,7 +2678,7 @@ namespace WixToolset.Data SplitCabinetNameCollision = 377, SplitCabinetInsertionFailed = 378, InvalidPreprocessorFunctionAutoVersion = 379, - InvalidModuleOrBundleVersion = 380, + InvalidFourPartVersion = 380, UnsupportedPlatformForElement = 381, MissingMedia = 382, IllegalYesNoAlwaysValue = 384, diff --git a/src/api/wix/WixToolset.Data/WarningMessages.cs b/src/api/wix/WixToolset.Data/WarningMessages.cs index ecd76392..5a5d1e79 100644 --- a/src/api/wix/WixToolset.Data/WarningMessages.cs +++ b/src/api/wix/WixToolset.Data/WarningMessages.cs @@ -367,9 +367,9 @@ namespace WixToolset.Data return Message(sourceLineNumbers, Ids.InvalidHigherInstallerVersionInModule, "Merge module '{0}' has an installer version of {1} which is greater than the product's installer version of {2}. Merging a module with a higher installer version than the product it is being merged into can result in invalid values in the resulting msi. You must set the Package/@InstallerVersion attribute to {1} or greater to merge this merge module into your product.", moduleId, moduleInstallerVersion, productInstallerVersion); } - public static Message InvalidModuleOrBundleVersion(SourceLineNumber sourceLineNumbers, string moduleOrBundle, string version) + public static Message InvalidFourPartVersion(SourceLineNumber sourceLineNumbers, string elementName, string version) { - return Message(sourceLineNumbers, Ids.InvalidModuleOrBundleVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", moduleOrBundle, version); + return Message(sourceLineNumbers, Ids.InvalidFourPartVersion, "Invalid {0}/@Version '{1}'. {0} version has a max value of \"65535.65535.65535.65535\" and must be all numeric.", elementName, version); } public static Message InvalidRemoveFile(SourceLineNumber sourceLineNumbers, string file, string component) @@ -663,9 +663,9 @@ namespace WixToolset.Data return Message(sourceLineNumbers, Ids.VariableDeclarationCollision, "The variable '{0}' with value '{1}' was previously declared with value '{2}'.", variableName, variableValue, variableCollidingValue); } - public static Message VersionTruncated(SourceLineNumber sourceLineNumbers, string originalVersion, string package, string truncatedVersion) + public static Message InvalidMsiProductVersion(SourceLineNumber sourceLineNumbers, string version, string package) { - return Message(sourceLineNumbers, Ids.VersionTruncated, "Product version {0} in package '{1}' is not valid per the MSI SDK and cannot be represented in a bundle. It has been truncated to {2}.", originalVersion, package, truncatedVersion); + return Message(sourceLineNumbers, Ids.InvalidMsiProductVersion, "Invalid product version '{0}' in MSI package '{1}'. Product version should have a major version less than 256, a minor version less than 256, and a build version less than 65536. The bundle may incorrectly detect upgrades of this package.", version, package); } public static Message CollidingModularizationTypes(string tableName, string columnName, string foreignTableName, int foreignColumnNumber, string modularizationType, string foreignModularizationType) @@ -764,7 +764,7 @@ namespace WixToolset.Data DeprecatedPackageCompressedAttribute = 1087, DeprecatedQuestionMarksGuid = 1090, PackageCodeSet = 1091, - InvalidModuleOrBundleVersion = 1093, + InvalidFourPartVersion = 1093, InvalidRemoveFile = 1095, PreprocessorWarning = 1096, UpdateOfNonKeyPathFile = 1097, @@ -816,7 +816,7 @@ namespace WixToolset.Data AllChangesIncludedInPatch = 1145, RelatedAttributeConditionallyIgnored = 1146, BackslashTerminateInlineDirectorySyntax = 1147, - VersionTruncated = 1148, + InvalidMsiProductVersion = 1148, ServiceConfigFamilyNotSupported = 1149, SymbolNotTranslatedToOutput = 1150, MsiTransactionLimitations = 1151, diff --git a/src/api/wix/WixToolset.Extensibility/Services/IBackendHelper.cs b/src/api/wix/WixToolset.Extensibility/Services/IBackendHelper.cs index 23ad44f5..1c92303e 100644 --- a/src/api/wix/WixToolset.Extensibility/Services/IBackendHelper.cs +++ b/src/api/wix/WixToolset.Extensibility/Services/IBackendHelper.cs @@ -104,12 +104,26 @@ namespace WixToolset.Extensibility.Services bool IsValidBinderVariable(string variable); /// - /// Verifies the given string is a valid 4-part version module or bundle version. + /// Verifies the given string is a valid 4-part version. /// /// The version to verify. - /// True if version is a valid module or bundle version. + /// True if version is a valid 4-part version. bool IsValidFourPartVersion(string version); + /// + /// Verifies the given string is a valid MSI product version. + /// + /// The MSI product version to verify. + /// True if version is a valid MSI product version + bool IsValidMsiProductVersion(string version); + + /// + /// Verifies the given string is a valid WiX version. + /// + /// The version to verify. + /// True if version is a valid WiX version. + bool IsValidWixVersion(string version); + /// /// Determines if value is a valid identifier. /// -- cgit v1.2.3-55-g6feb