From a451caf6d60e3f7fcbd56b87ca3c0f393e8f7b52 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Thu, 18 Mar 2021 02:12:04 -0700 Subject: Track database copy for validation as temporary --- .../Bind/BindDatabaseCommand.cs | 4 +++- .../Bind/ValidateDatabaseCommand.cs | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs index 6503ba65..f645c85e 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs @@ -537,8 +537,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind // Validate the output if there are CUBe files and we're not explicitly suppressing validation. if (this.CubeFiles != null && !this.SuppressValidation) { - var command = new ValidateDatabaseCommand(this.Messaging, this.IntermediateFolder, data, this.OutputPath, this.CubeFiles, this.Ices, this.SuppressedIces); + var command = new ValidateDatabaseCommand(this.Messaging, this.WindowsInstallerBackendHelper, this.IntermediateFolder, data, this.OutputPath, this.CubeFiles, this.Ices, this.SuppressedIces); command.Execute(); + + trackedFiles.AddRange(command.TrackedFiles); } if (this.Messaging.EncounteredError) diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ValidateDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ValidateDatabaseCommand.cs index 35b6018c..cf1e21c2 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/ValidateDatabaseCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/ValidateDatabaseCommand.cs @@ -4,15 +4,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind { using System; using System.Collections.Generic; - using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; - using System.Threading; using WixToolset.Core.Native; - using WixToolset.Core.Native.Msi; using WixToolset.Data; using WixToolset.Data.WindowsInstaller; + using WixToolset.Extensibility.Data; using WixToolset.Extensibility.Services; internal class ValidateDatabaseCommand : IWindowsInstallerValidatorCallback @@ -20,9 +18,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind // Set of ICEs that have equivalent-or-better checks in WiX. private static readonly string[] WellKnownSuppressedIces = new[] { "ICE08", "ICE33", "ICE47", "ICE66" }; - public ValidateDatabaseCommand(IMessaging messaging, string intermediateFolder, WindowsInstallerData data, string outputPath, IEnumerable cubeFiles, IEnumerable ices, IEnumerable suppressedIces) + public ValidateDatabaseCommand(IMessaging messaging, IBackendHelper backendHelper, string intermediateFolder, WindowsInstallerData data, string outputPath, IEnumerable cubeFiles, IEnumerable ices, IEnumerable suppressedIces) { this.Messaging = messaging; + this.BackendHelper = backendHelper; this.Data = data; this.OutputPath = outputPath; this.CubeFiles = cubeFiles; @@ -33,6 +32,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind this.OutputSourceLineNumber = new SourceLineNumber(outputPath); } + public IEnumerable TrackedFiles { get; private set; } + /// /// Encountered error implementation for . /// @@ -40,6 +41,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind private IMessaging Messaging { get; } + private IBackendHelper BackendHelper { get; } + private WindowsInstallerData Data { get; } private string OutputPath { get; } @@ -61,6 +64,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind public void Execute() { + var trackedFiles = new List(); var stopwatch = Stopwatch.StartNew(); this.Messaging.Write(VerboseMessages.ValidatingDatabase()); @@ -74,6 +78,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind var workingDatabasePath = Path.Combine(workingFolder, Path.GetFileName(this.OutputPath)); FileSystem.CopyFile(this.OutputPath, workingDatabasePath, allowHardlink: false); + var trackWorkingDatabase = this.BackendHelper.TrackFile(workingDatabasePath, TrackedFileType.Temporary); + trackedFiles.Add(trackWorkingDatabase); + var attributes = File.GetAttributes(workingDatabasePath); File.SetAttributes(workingDatabasePath, attributes & ~FileAttributes.ReadOnly); @@ -82,6 +89,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind stopwatch.Stop(); this.Messaging.Write(VerboseMessages.ValidatedDatabase(stopwatch.ElapsedMilliseconds)); + + + this.TrackedFiles = trackedFiles; } private void LogValidationMessage(ValidationMessage message) -- cgit v1.2.3-55-g6feb