From 14abd47046fecdfe175b9f7a4c0a55e0bad503bf Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 21 Jan 2022 12:07:53 -0600 Subject: Only packages with no dependency providers get a generated one. --- .../Bind/ProcessDependencyProvidersCommand.cs | 17 ++++++------ .../ContainerFixture.cs | 30 +++++++++++++++++----- .../DependencyExtensionFixture.cs | 1 - 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs b/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs index 99effbc7..5df6c887 100644 --- a/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs @@ -22,8 +22,6 @@ namespace WixToolset.Core.Burn.Bind public string BundleProviderKey { get; private set; } - public Dictionary DependencySymbolsByKey { get; private set; } - private IMessaging Messaging { get; } private IntermediateSection Section { get; } @@ -88,7 +86,7 @@ namespace WixToolset.Core.Burn.Bind } } - this.DependencySymbolsByKey = this.GetDependencySymbolsByKey(dependencySymbols); + var dependencySymbolsByPackageId = this.GetDependencySymbolsByPackageId(dependencySymbols); // Generate providers for MSI and MSP packages that still do not have providers. foreach (var facade in this.Facades.Values) @@ -104,24 +102,23 @@ namespace WixToolset.Core.Burn.Bind key = mspPackage.PatchCode; } - if (!String.IsNullOrEmpty(key) && !this.DependencySymbolsByKey.ContainsKey(key)) + if (!String.IsNullOrEmpty(key) && !dependencySymbolsByPackageId.Contains(facade.PackageId)) { - var dependency = this.Section.AddSymbol(new WixDependencyProviderSymbol(facade.PackageSymbol.SourceLineNumbers, facade.PackageSymbol.Id) + this.Section.AddSymbol(new WixDependencyProviderSymbol(facade.PackageSymbol.SourceLineNumbers, facade.PackageSymbol.Id) { ParentRef = facade.PackageId, ProviderKey = key, Version = facade.PackageSymbol.Version, DisplayName = facade.PackageSymbol.DisplayName }); - - this.DependencySymbolsByKey.Add(dependency.ProviderKey, dependency); } } } - private Dictionary GetDependencySymbolsByKey(IEnumerable dependencySymbols) + private HashSet GetDependencySymbolsByPackageId(IEnumerable dependencySymbols) { var dependencySymbolsByKey = new Dictionary(); + var dependencySymbolsByPackageId = new HashSet(); foreach (var dependency in dependencySymbols) { @@ -139,9 +136,11 @@ namespace WixToolset.Core.Burn.Bind { dependencySymbolsByKey.Add(dependency.ProviderKey, dependency); } + + dependencySymbolsByPackageId.Add(dependency.ParentRef); } - return dependencySymbolsByKey; + return dependencySymbolsByPackageId; } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs index 482a6edd..70aca8c0 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs @@ -9,6 +9,9 @@ namespace WixToolsetTest.CoreIntegration using WixBuildTools.TestSupport; using WixToolset.Core.Burn.Bundles; using WixToolset.Core.TestPackage; + using WixToolset.Data; + using WixToolset.Data.WindowsInstaller; + using WixToolset.Data.WindowsInstaller.Rows; using Xunit; public class ContainerFixture @@ -115,7 +118,7 @@ namespace WixToolsetTest.CoreIntegration var baFolderPath = Path.Combine(baseFolder, "ba"); var extractFolderPath = Path.Combine(baseFolder, "extract"); - this.BuildMsis(folder, intermediateFolder, binFolder); + var pdbPaths = this.BuildMsis(folder, intermediateFolder, binFolder); var result = WixRunner.Execute(new[] { @@ -138,7 +141,6 @@ namespace WixToolsetTest.CoreIntegration var ignoreAttributes = new Dictionary> { { "MsiPackage", new List { "CacheId", "InstallSize", "Size", "ProductCode" } }, - { "Provides", new List { "Key" } }, }; var msiPackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage") .Cast() @@ -148,7 +150,7 @@ namespace WixToolsetTest.CoreIntegration { "" + "" + - "" + + $"" + "" + "" + "" + @@ -156,7 +158,7 @@ namespace WixToolsetTest.CoreIntegration "", "" + "" + - "" + + $"" + "" + "" + "" + @@ -372,8 +374,9 @@ namespace WixToolsetTest.CoreIntegration } } - private void BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false) + private string[] BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false) { + var x86OutputPath = Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"); var result = WixRunner.Execute(new[] { "build", @@ -382,11 +385,12 @@ namespace WixToolsetTest.CoreIntegration Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, - "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"), + "-o", x86OutputPath, }); result.AssertSuccess(); + var x64OutputPath = Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"); result = WixRunner.Execute(new[] { "build", @@ -395,10 +399,22 @@ namespace WixToolsetTest.CoreIntegration Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), "-bindpath", Path.Combine(folder, "SingleFile", "data"), "-intermediateFolder", intermediateFolder, - "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"), + "-o", x64OutputPath, }); result.AssertSuccess(); + + return new[] + { + Path.ChangeExtension(x86OutputPath, ".wixpdb"), + Path.ChangeExtension(x64OutputPath, ".wixpdb"), + }; + } + + private static string GetProductCodeFromMsiPdb(string pdbPath) + { + var wiData = WindowsInstallerData.Load(pdbPath, suppressVersionCheck: false); + return wiData.Tables["Property"].Rows.Cast().Single(r => r.Property == "ProductCode").Value; } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs index 1f1a121e..36855c84 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/DependencyExtensionFixture.cs @@ -107,7 +107,6 @@ namespace WixToolsetTest.CoreIntegration WixAssert.CompareLineByLine(new string[] { "", - "", }, provides); } } -- cgit v1.2.3-55-g6feb