diff options
| author | Rob Mensching <rob@firegiant.com> | 2022-03-10 14:18:34 -0800 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2022-03-14 12:50:55 -0700 |
| commit | 64750a8dd105d89c27613694e1008a454df2a4ee (patch) | |
| tree | 55827f3654620da0ac1145345ca1423e04c63f40 /src | |
| parent | 91cd2d65121a163e625d2f029025123b0f8467d2 (diff) | |
| download | wix-64750a8dd105d89c27613694e1008a454df2a4ee.tar.gz wix-64750a8dd105d89c27613694e1008a454df2a4ee.tar.bz2 wix-64750a8dd105d89c27613694e1008a454df2a4ee.zip | |
Remove Unbind as backend function
Unbinding is not a general purpose function as initially imagined.
Diffstat (limited to 'src')
13 files changed, 19 insertions, 215 deletions
diff --git a/src/api/wix/WixToolset.Extensibility/Data/IUnbindContext.cs b/src/api/wix/WixToolset.Extensibility/Data/IUnbindContext.cs deleted file mode 100644 index 6427422f..00000000 --- a/src/api/wix/WixToolset.Extensibility/Data/IUnbindContext.cs +++ /dev/null | |||
| @@ -1,24 +0,0 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolset.Extensibility.Data | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | |||
| 7 | #pragma warning disable 1591 // TODO: add documentation | ||
| 8 | public interface IUnbindContext | ||
| 9 | { | ||
| 10 | IServiceProvider ServiceProvider { get; } | ||
| 11 | |||
| 12 | string ExportBasePath { get; set; } | ||
| 13 | |||
| 14 | string InputFilePath { get; set; } | ||
| 15 | |||
| 16 | string IntermediateFolder { get; set; } | ||
| 17 | |||
| 18 | bool IsAdminImage { get; set; } | ||
| 19 | |||
| 20 | bool SuppressDemodularization { get; set; } | ||
| 21 | |||
| 22 | bool SuppressExtractCabinets { get; set; } | ||
| 23 | } | ||
| 24 | } \ No newline at end of file | ||
diff --git a/src/api/wix/WixToolset.Extensibility/IBackend.cs b/src/api/wix/WixToolset.Extensibility/IBackend.cs index be8406e4..cb151e05 100644 --- a/src/api/wix/WixToolset.Extensibility/IBackend.cs +++ b/src/api/wix/WixToolset.Extensibility/IBackend.cs | |||
| @@ -2,16 +2,21 @@ | |||
| 2 | 2 | ||
| 3 | namespace WixToolset.Extensibility | 3 | namespace WixToolset.Extensibility |
| 4 | { | 4 | { |
| 5 | using WixToolset.Data; | ||
| 6 | using WixToolset.Extensibility.Data; | 5 | using WixToolset.Extensibility.Data; |
| 7 | 6 | ||
| 8 | #pragma warning disable 1591 // TODO: add documentation | 7 | /// <summary> |
| 8 | /// Interface all backends implement. | ||
| 9 | /// </summary> | ||
| 9 | public interface IBackend | 10 | public interface IBackend |
| 10 | { | 11 | { |
| 12 | /// <summary> | ||
| 13 | /// Bind the intermediate into the final output. | ||
| 14 | /// </summary> | ||
| 15 | /// <param name="context">Bind context.</param> | ||
| 16 | /// <returns>Result of the bind operation.</returns> | ||
| 11 | IBindResult Bind(IBindContext context); | 17 | IBindResult Bind(IBindContext context); |
| 12 | 18 | ||
| 19 | #pragma warning disable 1591 // TODO: add documentation | ||
| 13 | IDecompileResult Decompile(IDecompileContext context); | 20 | IDecompileResult Decompile(IDecompileContext context); |
| 14 | |||
| 15 | Intermediate Unbind(IUnbindContext context); | ||
| 16 | } | 21 | } |
| 17 | } | 22 | } |
diff --git a/src/api/wix/WixToolset.Extensibility/IBackendFactory.cs b/src/api/wix/WixToolset.Extensibility/IBackendFactory.cs index 99a6704f..7f9ef62d 100644 --- a/src/api/wix/WixToolset.Extensibility/IBackendFactory.cs +++ b/src/api/wix/WixToolset.Extensibility/IBackendFactory.cs | |||
| @@ -2,9 +2,18 @@ | |||
| 2 | 2 | ||
| 3 | namespace WixToolset.Extensibility | 3 | namespace WixToolset.Extensibility |
| 4 | { | 4 | { |
| 5 | #pragma warning disable 1591 // TODO: add documentation | 5 | /// <summary> |
| 6 | /// Implemented by extensions to create backends. | ||
| 7 | /// </summary> | ||
| 6 | public interface IBackendFactory | 8 | public interface IBackendFactory |
| 7 | { | 9 | { |
| 10 | /// <summary> | ||
| 11 | /// Called to find the backend used to produce the requested output type. | ||
| 12 | /// </summary> | ||
| 13 | /// <param name="outputType">Type of output being created.</param> | ||
| 14 | /// <param name="outputPath">Path to the output to create.</param> | ||
| 15 | /// <param name="backend">The backend for the output.</param> | ||
| 16 | /// <returns>True if the backend was created, otherwise false.</returns> | ||
| 8 | bool TryCreateBackend(string outputType, string outputPath, out IBackend backend); | 17 | bool TryCreateBackend(string outputType, string outputPath, out IBackend backend); |
| 9 | } | 18 | } |
| 10 | } | 19 | } |
diff --git a/src/api/wix/WixToolset.Extensibility/IUnbinderExtension.cs b/src/api/wix/WixToolset.Extensibility/IUnbinderExtension.cs deleted file mode 100644 index 0e9a2504..00000000 --- a/src/api/wix/WixToolset.Extensibility/IUnbinderExtension.cs +++ /dev/null | |||
| @@ -1,18 +0,0 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolset.Extensibility | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.Data; | ||
| 7 | |||
| 8 | /// <summary> | ||
| 9 | /// Base class for creating an unbinder extension. | ||
| 10 | /// </summary> | ||
| 11 | public interface IUnbinderExtension | ||
| 12 | { | ||
| 13 | /// <summary> | ||
| 14 | /// Called during the generation of sectionIds for an admin image. | ||
| 15 | /// </summary> | ||
| 16 | void GenerateSectionIds(Intermediate output); | ||
| 17 | } | ||
| 18 | } | ||
diff --git a/src/wix/WixToolset.Core.Burn/BundleBackend.cs b/src/wix/WixToolset.Core.Burn/BundleBackend.cs index fa66ab1f..e248bc67 100644 --- a/src/wix/WixToolset.Core.Burn/BundleBackend.cs +++ b/src/wix/WixToolset.Core.Burn/BundleBackend.cs | |||
| @@ -5,7 +5,6 @@ namespace WixToolset.Core.Burn | |||
| 5 | using System; | 5 | using System; |
| 6 | using System.IO; | 6 | using System.IO; |
| 7 | using WixToolset.Core.Burn.Bundles; | 7 | using WixToolset.Core.Burn.Bundles; |
| 8 | using WixToolset.Core.Burn.Inscribe; | ||
| 9 | using WixToolset.Data; | 8 | using WixToolset.Data; |
| 10 | using WixToolset.Extensibility; | 9 | using WixToolset.Extensibility; |
| 11 | using WixToolset.Extensibility.Data; | 10 | using WixToolset.Extensibility.Data; |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/MsiBackend.cs b/src/wix/WixToolset.Core.WindowsInstaller/MsiBackend.cs index 628ad8de..d1c1d3a6 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/MsiBackend.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/MsiBackend.cs | |||
| @@ -69,10 +69,5 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 69 | 69 | ||
| 70 | return result; | 70 | return result; |
| 71 | } | 71 | } |
| 72 | |||
| 73 | public Intermediate Unbind(IUnbindContext context) | ||
| 74 | { | ||
| 75 | throw new NotImplementedException(); | ||
| 76 | } | ||
| 77 | } | 72 | } |
| 78 | } | 73 | } |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/MsmBackend.cs b/src/wix/WixToolset.Core.WindowsInstaller/MsmBackend.cs index 01e3c6d8..ea008c39 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/MsmBackend.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/MsmBackend.cs | |||
| @@ -65,10 +65,5 @@ namespace WixToolset.Core.WindowsInstaller | |||
| 65 | 65 | ||
| 66 | return result; | 66 | return result; |
| 67 | } | 67 | } |
| 68 | |||
| 69 | public Intermediate Unbind(IUnbindContext context) | ||
| 70 | { | ||
| 71 | throw new NotImplementedException(); | ||
| 72 | } | ||
| 73 | } | 68 | } |
| 74 | } | 69 | } |
diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Unbind/UnbindMsiOrMsmCommand.cs b/src/wix/WixToolset.Core.WindowsInstaller/Unbind/UnbindMsiOrMsmCommand.cs index 82015cf2..8070d42d 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/Unbind/UnbindMsiOrMsmCommand.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/Unbind/UnbindMsiOrMsmCommand.cs | |||
| @@ -7,7 +7,6 @@ namespace WixToolset.Core.WindowsInstaller.Unbind | |||
| 7 | using WixToolset.Core.Native.Msi; | 7 | using WixToolset.Core.Native.Msi; |
| 8 | using WixToolset.Data; | 8 | using WixToolset.Data; |
| 9 | using WixToolset.Data.WindowsInstaller; | 9 | using WixToolset.Data.WindowsInstaller; |
| 10 | using WixToolset.Extensibility.Data; | ||
| 11 | using WixToolset.Extensibility.Services; | 10 | using WixToolset.Extensibility.Services; |
| 12 | 11 | ||
| 13 | internal class UnbindMsiOrMsmCommand | 12 | internal class UnbindMsiOrMsmCommand |
| @@ -24,16 +23,6 @@ namespace WixToolset.Core.WindowsInstaller.Unbind | |||
| 24 | this.SuppressExtractCabinets = suppressExtractCabinets; | 23 | this.SuppressExtractCabinets = suppressExtractCabinets; |
| 25 | } | 24 | } |
| 26 | 25 | ||
| 27 | public UnbindMsiOrMsmCommand(IUnbindContext context) | ||
| 28 | { | ||
| 29 | this.Messaging = context.ServiceProvider.GetService<IMessaging>(); | ||
| 30 | this.DatabasePath = context.InputFilePath; | ||
| 31 | this.ExportBasePath = context.ExportBasePath; | ||
| 32 | this.IntermediateFolder = context.IntermediateFolder; | ||
| 33 | this.IsAdminImage = context.IsAdminImage; | ||
| 34 | this.SuppressDemodularization = context.SuppressDemodularization; | ||
| 35 | } | ||
| 36 | |||
| 37 | private IMessaging Messaging { get; } | 26 | private IMessaging Messaging { get; } |
| 38 | 27 | ||
| 39 | private IBackendHelper BackendHelper { get; } | 28 | private IBackendHelper BackendHelper { get; } |
diff --git a/src/wix/WixToolset.Core/IUnbinder.cs b/src/wix/WixToolset.Core/IUnbinder.cs deleted file mode 100644 index 2b4daaa5..00000000 --- a/src/wix/WixToolset.Core/IUnbinder.cs +++ /dev/null | |||
| @@ -1,12 +0,0 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolset.Core | ||
| 4 | { | ||
| 5 | using WixToolset.Data; | ||
| 6 | |||
| 7 | #pragma warning disable 1591 // TODO: add documentation, move into Extensibility | ||
| 8 | public interface IUnbinder | ||
| 9 | { | ||
| 10 | Intermediate Unbind(string file, OutputType outputType, string exportBasePath); | ||
| 11 | } | ||
| 12 | } | ||
diff --git a/src/wix/WixToolset.Core/UnbindContext.cs b/src/wix/WixToolset.Core/UnbindContext.cs deleted file mode 100644 index c3817a08..00000000 --- a/src/wix/WixToolset.Core/UnbindContext.cs +++ /dev/null | |||
| @@ -1,29 +0,0 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolset.Core | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using WixToolset.Extensibility.Data; | ||
| 7 | |||
| 8 | internal class UnbindContext : IUnbindContext | ||
| 9 | { | ||
| 10 | internal UnbindContext(IServiceProvider serviceProvider) | ||
| 11 | { | ||
| 12 | this.ServiceProvider = serviceProvider; | ||
| 13 | } | ||
| 14 | |||
| 15 | public IServiceProvider ServiceProvider { get; } | ||
| 16 | |||
| 17 | public string ExportBasePath { get; set; } | ||
| 18 | |||
| 19 | public string InputFilePath { get; set; } | ||
| 20 | |||
| 21 | public string IntermediateFolder { get; set; } | ||
| 22 | |||
| 23 | public bool IsAdminImage { get; set; } | ||
| 24 | |||
| 25 | public bool SuppressExtractCabinets { get; set; } | ||
| 26 | |||
| 27 | public bool SuppressDemodularization { get; set; } | ||
| 28 | } | ||
| 29 | } | ||
diff --git a/src/wix/WixToolset.Core/Unbinder.cs b/src/wix/WixToolset.Core/Unbinder.cs deleted file mode 100644 index 3ef77083..00000000 --- a/src/wix/WixToolset.Core/Unbinder.cs +++ /dev/null | |||
| @@ -1,99 +0,0 @@ | |||
| 1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
| 2 | |||
| 3 | namespace WixToolset.Core | ||
| 4 | { | ||
| 5 | using System; | ||
| 6 | using System.Collections.Generic; | ||
| 7 | using System.IO; | ||
| 8 | using WixToolset.Data; | ||
| 9 | using WixToolset.Extensibility; | ||
| 10 | using WixToolset.Extensibility.Services; | ||
| 11 | |||
| 12 | /// <summary> | ||
| 13 | /// Unbinder core of the WiX toolset. | ||
| 14 | /// </summary> | ||
| 15 | internal sealed class Unbinder : IUnbinder | ||
| 16 | { | ||
| 17 | public Unbinder(IServiceProvider serviceProvider) | ||
| 18 | { | ||
| 19 | this.ServiceProvider = serviceProvider; | ||
| 20 | |||
| 21 | var extensionManager = this.ServiceProvider.GetService<IExtensionManager>(); | ||
| 22 | this.BackendFactories = extensionManager.GetServices<IBackendFactory>(); | ||
| 23 | } | ||
| 24 | |||
| 25 | public IServiceProvider ServiceProvider { get; } | ||
| 26 | |||
| 27 | public IEnumerable<IBackendFactory> BackendFactories { get; } | ||
| 28 | |||
| 29 | /// <summary> | ||
| 30 | /// Gets or sets whether the input msi is an admin image. | ||
| 31 | /// </summary> | ||
| 32 | /// <value>Set to true if the input msi is part of an admin image.</value> | ||
| 33 | public bool IsAdminImage { get; set; } | ||
| 34 | |||
| 35 | /// <summary> | ||
| 36 | /// Gets or sets the option to suppress demodularizing values. | ||
| 37 | /// </summary> | ||
| 38 | /// <value>The option to suppress demodularizing values.</value> | ||
| 39 | public bool SuppressDemodularization { get; set; } | ||
| 40 | |||
| 41 | /// <summary> | ||
| 42 | /// Gets or sets the option to suppress extracting cabinets. | ||
| 43 | /// </summary> | ||
| 44 | /// <value>The option to suppress extracting cabinets.</value> | ||
| 45 | public bool SuppressExtractCabinets { get; set; } | ||
| 46 | |||
| 47 | /// <summary> | ||
| 48 | /// Gets or sets the temporary path for the Binder. If left null, the binder | ||
| 49 | /// will use %TEMP% environment variable. | ||
| 50 | /// </summary> | ||
| 51 | /// <value>Path to temp files.</value> | ||
| 52 | public string TempFilesLocation => Path.GetTempPath(); | ||
| 53 | |||
| 54 | /// <summary> | ||
| 55 | /// Unbind a Windows Installer file. | ||
| 56 | /// </summary> | ||
| 57 | /// <param name="file">The Windows Installer file.</param> | ||
| 58 | /// <param name="outputType">The type of output to create.</param> | ||
| 59 | /// <param name="exportBasePath">The path where files should be exported.</param> | ||
| 60 | /// <returns>The output representing the database.</returns> | ||
| 61 | public Intermediate Unbind(string file, OutputType outputType, string exportBasePath) | ||
| 62 | { | ||
| 63 | if (!File.Exists(file)) | ||
| 64 | { | ||
| 65 | if (OutputType.Transform == outputType) | ||
| 66 | { | ||
| 67 | throw new WixException(ErrorMessages.FileNotFound(null, file, "Transform")); | ||
| 68 | } | ||
| 69 | else | ||
| 70 | { | ||
| 71 | throw new WixException(ErrorMessages.FileNotFound(null, file, "Database")); | ||
| 72 | } | ||
| 73 | } | ||
| 74 | |||
| 75 | // if we don't have the temporary files object yet, get one | ||
| 76 | Directory.CreateDirectory(this.TempFilesLocation); // ensure the base path is there | ||
| 77 | |||
| 78 | var context = new UnbindContext(this.ServiceProvider); | ||
| 79 | context.InputFilePath = file; | ||
| 80 | context.ExportBasePath = exportBasePath; | ||
| 81 | context.IntermediateFolder = this.TempFilesLocation; | ||
| 82 | context.IsAdminImage = this.IsAdminImage; | ||
| 83 | context.SuppressDemodularization = this.SuppressDemodularization; | ||
| 84 | context.SuppressExtractCabinets = this.SuppressExtractCabinets; | ||
| 85 | |||
| 86 | foreach (var factory in this.BackendFactories) | ||
| 87 | { | ||
| 88 | if (factory.TryCreateBackend(outputType.ToString(), file, out var backend)) | ||
| 89 | { | ||
| 90 | return backend.Unbind(context); | ||
| 91 | } | ||
| 92 | } | ||
| 93 | |||
| 94 | // TODO: Display message that could not find a unbinder for output type? | ||
| 95 | |||
| 96 | return null; | ||
| 97 | } | ||
| 98 | } | ||
| 99 | } | ||
diff --git a/src/wix/WixToolset.Core/WixToolsetServiceProvider.cs b/src/wix/WixToolset.Core/WixToolsetServiceProvider.cs index 06dbdfae..a74ba6b3 100644 --- a/src/wix/WixToolset.Core/WixToolsetServiceProvider.cs +++ b/src/wix/WixToolset.Core/WixToolsetServiceProvider.cs | |||
| @@ -41,7 +41,6 @@ namespace WixToolset.Core | |||
| 41 | this.AddService<IBindContext>((provider, singletons) => new BindContext(provider)); | 41 | this.AddService<IBindContext>((provider, singletons) => new BindContext(provider)); |
| 42 | this.AddService<IDecompileContext>((provider, singletons) => new DecompileContext(provider)); | 42 | this.AddService<IDecompileContext>((provider, singletons) => new DecompileContext(provider)); |
| 43 | this.AddService<ILayoutContext>((provider, singletons) => new LayoutContext(provider)); | 43 | this.AddService<ILayoutContext>((provider, singletons) => new LayoutContext(provider)); |
| 44 | this.AddService<IUnbindContext>((provider, singletons) => new UnbindContext(provider)); | ||
| 45 | 44 | ||
| 46 | this.AddService<IBindFileWithPath>((provider, singletons) => new BindFileWithPath()); | 45 | this.AddService<IBindFileWithPath>((provider, singletons) => new BindFileWithPath()); |
| 47 | this.AddService<IBindPath>((provider, singletons) => new BindPath()); | 46 | this.AddService<IBindPath>((provider, singletons) => new BindPath()); |
| @@ -64,7 +63,6 @@ namespace WixToolset.Core | |||
| 64 | this.AddService<ILibrarian>((provider, singletons) => new Librarian(provider)); | 63 | this.AddService<ILibrarian>((provider, singletons) => new Librarian(provider)); |
| 65 | this.AddService<ILinker>((provider, singletons) => new Linker(provider)); | 64 | this.AddService<ILinker>((provider, singletons) => new Linker(provider)); |
| 66 | this.AddService<IResolver>((provider, singletons) => new Resolver(provider)); | 65 | this.AddService<IResolver>((provider, singletons) => new Resolver(provider)); |
| 67 | this.AddService<IUnbinder>((provider, singletons) => new Unbinder(provider)); | ||
| 68 | 66 | ||
| 69 | this.AddService<ILocalizationParser>((provider, singletons) => new LocalizationParser(provider)); | 67 | this.AddService<ILocalizationParser>((provider, singletons) => new LocalizationParser(provider)); |
| 70 | this.AddService<IVariableResolver>((provider, singletons) => new VariableResolver(provider)); | 68 | this.AddService<IVariableResolver>((provider, singletons) => new VariableResolver(provider)); |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/BundleExtractionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/BundleExtractionFixture.cs index 0e056c29..5a5a52d3 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/BundleExtractionFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/BundleExtractionFixture.cs | |||
| @@ -47,11 +47,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 47 | 47 | ||
| 48 | Assert.True(File.Exists(exePath)); | 48 | Assert.True(File.Exists(exePath)); |
| 49 | 49 | ||
| 50 | var unbinder = serviceProvider.GetService<IUnbinder>(); | ||
| 51 | unbinder.Unbind(exePath, OutputType.Bundle, extractFolderPath); | ||
| 52 | 50 | ||
| 53 | Assert.True(File.Exists(Path.Combine(baFolderPath, "manifest.xml"))); | ||
| 54 | Assert.False(Directory.Exists(attachedContainerFolderPath)); | ||
| 55 | } | 51 | } |
| 56 | } | 52 | } |
| 57 | } | 53 | } |
