From 93d3a9e1f9cdc05456a612e238a83738cfd1750f Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sun, 10 May 2020 19:31:53 +1000 Subject: Track files in BindBundleCommand. --- src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs | 34 +++++++++++++++------- .../Bundles/CreateNonUXContainers.cs | 6 +++- .../Bundles/ProcessPayloadsCommand.cs | 9 ++++++ .../Bind/BindDatabaseCommand.cs | 4 ++- .../Bind/ExtractEmbeddedFilesCommand.cs | 12 +++++++- 5 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs index 733996c0..35c45fad 100644 --- a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs +++ b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs @@ -123,8 +123,10 @@ namespace WixToolset.Core.Burn // Extract files that come from binary .wixlibs and WixExtensions (this does not extract files from merge modules). { - var command = new ExtractEmbeddedFilesCommand(this.ExpectedEmbeddedFiles); + var command = new ExtractEmbeddedFilesCommand(this.BackendHelper, this.ExpectedEmbeddedFiles); command.Execute(); + + trackedFiles.AddRange(command.TrackedFiles); } // Get the explicit payloads. @@ -164,6 +166,7 @@ namespace WixToolset.Core.Burn command.Execute(); fileTransfers.AddRange(command.FileTransfers); + trackedFiles.AddRange(command.TrackedFiles); processedPayloads = new HashSet(payloadTuples.Keys); } @@ -245,6 +248,7 @@ namespace WixToolset.Core.Burn command.Execute(); fileTransfers.AddRange(command.FileTransfers); + trackedFiles.AddRange(command.TrackedFiles); processedPayloads = null; } @@ -379,6 +383,17 @@ namespace WixToolset.Core.Burn // Update the bundle per-machine/per-user scope based on the chained packages. this.ResolveBundleInstallScope(section, bundleTuple, orderedFacades); + // Give the extension one last hook before generating the output files. + foreach (var extension in this.BackendExtensions) + { + extension.BundleFinalize(); + } + + if (this.Messaging.EncounteredError) + { + return; + } + // Generate the core-defined BA manifest tables... string baManifestPath; { @@ -389,6 +404,8 @@ namespace WixToolset.Core.Burn baManifestPath = command.OutputPath; payloadTuples.Add(baManifestPayload.Id.Id, baManifestPayload); ++uxPayloadIndex; + + trackedFiles.Add(this.BackendHelper.TrackFile(baManifestPath, TrackedFileType.Temporary)); } // Generate the bundle extension manifest... @@ -401,16 +418,8 @@ namespace WixToolset.Core.Burn bextManifestPath = command.OutputPath; payloadTuples.Add(bextManifestPayload.Id.Id, bextManifestPayload); ++uxPayloadIndex; - } - foreach (var extension in this.BackendExtensions) - { - extension.BundleFinalize(); - } - - if (this.Messaging.EncounteredError) - { - return; + trackedFiles.Add(this.BackendHelper.TrackFile(bextManifestPath, TrackedFileType.Temporary)); } // Create all the containers except the UX container first so the manifest (that goes in the UX container) @@ -423,6 +432,7 @@ namespace WixToolset.Core.Burn command.Execute(); fileTransfers.AddRange(command.FileTransfers); + trackedFiles.AddRange(command.TrackedFiles); uxContainer = command.UXContainer; uxPayloads = command.UXContainerPayloads; @@ -438,6 +448,7 @@ namespace WixToolset.Core.Burn command.Execute(); manifestPath = command.OutputPath; + trackedFiles.Add(this.BackendHelper.TrackFile(manifestPath, TrackedFileType.Temporary)); } // Create the UX container. @@ -447,6 +458,8 @@ namespace WixToolset.Core.Burn uxContainer.Hash = command.Hash; uxContainer.Size = command.Size; + + trackedFiles.Add(this.BackendHelper.TrackFile(uxContainer.WorkingPath, TrackedFileType.Temporary)); } { @@ -454,6 +467,7 @@ namespace WixToolset.Core.Burn command.Execute(); fileTransfers.Add(command.Transfer); + trackedFiles.Add(this.BackendHelper.TrackFile(this.OutputPath, TrackedFileType.Final)); } #if TODO // does this need to come back, or do they only need to be in TrackedFiles? diff --git a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs index 34e601a7..babac5e2 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs @@ -27,6 +27,8 @@ namespace WixToolset.Core.Burn.Bundles public IEnumerable FileTransfers { get; private set; } + public IEnumerable TrackedFiles { get; private set; } + public WixBundleContainerTuple UXContainer { get; set; } public IEnumerable UXContainerPayloads { get; private set; } @@ -50,7 +52,7 @@ namespace WixToolset.Core.Burn.Bundles public void Execute() { var fileTransfers = new List(); - + var trackedFiles = new List(); var uxPayloadTuples = new List(); var attachedContainerIndex = 1; // count starts at one because UX container is "0". @@ -114,12 +116,14 @@ namespace WixToolset.Core.Burn.Bundles } this.CreateContainer(container, containerPayloads); + trackedFiles.Add(this.BackendHelper.TrackFile(container.WorkingPath, TrackedFileType.Temporary, container.SourceLineNumbers)); } } this.Containers = containerTuples; this.UXContainerPayloads = uxPayloadTuples; this.FileTransfers = fileTransfers; + this.TrackedFiles = trackedFiles; } private void CreateContainer(WixBundleContainerTuple container, IEnumerable containerPayloads) diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs index 42b1b5ab..7f3a2501 100644 --- a/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs @@ -31,6 +31,8 @@ namespace WixToolset.Core.Burn.Bundles public IEnumerable FileTransfers { get; private set; } + public IEnumerable TrackedFiles { get; private set; } + private IMessaging Messaging { get; } private IBackendHelper BackendHelper { get; } @@ -44,6 +46,7 @@ namespace WixToolset.Core.Burn.Bundles public void Execute() { var fileTransfers = new List(); + var trackedFiles = new List(); foreach (var payload in this.Payloads) { @@ -77,10 +80,16 @@ namespace WixToolset.Core.Burn.Bundles var transfer = this.BackendHelper.CreateFileTransfer(sourceFile.Path, Path.Combine(this.LayoutDirectory, payload.Name), false, payload.SourceLineNumbers); fileTransfers.Add(transfer); } + + if (payload.ContentFile) + { + trackedFiles.Add(this.BackendHelper.TrackFile(sourceFile.Path, TrackedFileType.Input, payload.SourceLineNumbers)); + } } } this.FileTransfers = fileTransfers; + this.TrackedFiles = trackedFiles; } private void UpdatePayloadPackagingType(WixBundlePayloadTuple payload) diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs index 5b401a0c..c9659287 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs @@ -232,8 +232,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind // Extract files that come from binary .wixlibs and WixExtensions (this does not extract files from merge modules). { - var command = new ExtractEmbeddedFilesCommand(this.ExpectedEmbeddedFiles); + var command = new ExtractEmbeddedFilesCommand(this.BackendHelper, this.ExpectedEmbeddedFiles); command.Execute(); + + trackedFiles.AddRange(command.TrackedFiles); } // This must occur after all variables and source paths have been resolved. diff --git a/src/WixToolset.Core/Bind/ExtractEmbeddedFilesCommand.cs b/src/WixToolset.Core/Bind/ExtractEmbeddedFilesCommand.cs index 683c3c50..bb9ab844 100644 --- a/src/WixToolset.Core/Bind/ExtractEmbeddedFilesCommand.cs +++ b/src/WixToolset.Core/Bind/ExtractEmbeddedFilesCommand.cs @@ -7,18 +7,25 @@ namespace WixToolset.Core.Bind using System.Linq; using WixToolset.Data; using WixToolset.Extensibility.Data; + using WixToolset.Extensibility.Services; public class ExtractEmbeddedFilesCommand { - public ExtractEmbeddedFilesCommand(IEnumerable embeddedFiles) + public ExtractEmbeddedFilesCommand(IBackendHelper backendHelper, IEnumerable embeddedFiles) { + this.BackendHelper = backendHelper; this.FilesWithEmbeddedFiles = embeddedFiles; } + public IEnumerable TrackedFiles { get; private set; } + + private IBackendHelper BackendHelper { get; } + private IEnumerable FilesWithEmbeddedFiles { get; } public void Execute() { + var trackedFiles = new List(); var group = this.FilesWithEmbeddedFiles.GroupBy(e => e.Uri); foreach (var expectedEmbeddedFileByUri in group) @@ -34,10 +41,13 @@ namespace WixToolset.Core.Bind if (uniqueIds.Add(embeddedFile.EmbeddedFileId)) { wixout.ExtractEmbeddedFile(embeddedFile.EmbeddedFileId, embeddedFile.OutputPath); + trackedFiles.Add(this.BackendHelper.TrackFile(embeddedFile.OutputPath, TrackedFileType.Temporary)); } } } } + + this.TrackedFiles = trackedFiles; } } } -- cgit v1.2.3-55-g6feb