From cd6f466549ba8e4b138da4332b0831ab45ca8a2f Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Sat, 13 Jun 2020 10:01:27 -0700 Subject: Implement simplified command and improved backend integration --- .../WixToolsetCoreServiceProviderExtensions.cs | 17 ++++ .../WixToolsetStandardBackend.cs | 12 --- .../WixToolsetCoreServiceProviderExtensions.cs | 10 +-- src/WixToolset.Core.TestPackage/WixRunner.cs | 35 +++------ .../ValidatorExtension.cs | 2 +- .../WixToolsetCoreServiceProviderExtensions.cs | 17 ++++ .../WixToolsetStandardBackend.cs | 12 --- src/WixToolset.Core/CommandLine/CommandLine.cs | 91 +++++++++++++--------- 8 files changed, 102 insertions(+), 94 deletions(-) create mode 100644 src/WixToolset.Core.Burn/WixToolsetCoreServiceProviderExtensions.cs delete mode 100644 src/WixToolset.Core.Burn/WixToolsetStandardBackend.cs create mode 100644 src/WixToolset.Core.WindowsInstaller/WixToolsetCoreServiceProviderExtensions.cs delete mode 100644 src/WixToolset.Core.WindowsInstaller/WixToolsetStandardBackend.cs diff --git a/src/WixToolset.Core.Burn/WixToolsetCoreServiceProviderExtensions.cs b/src/WixToolset.Core.Burn/WixToolsetCoreServiceProviderExtensions.cs new file mode 100644 index 00000000..5c3fd449 --- /dev/null +++ b/src/WixToolset.Core.Burn/WixToolsetCoreServiceProviderExtensions.cs @@ -0,0 +1,17 @@ +// 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. + +namespace WixToolset.Core.Burn +{ + using WixToolset.Extensibility.Services; + + public static class WixToolsetCoreServiceProviderExtensions + { + public static IWixToolsetCoreServiceProvider AddBundleBackend(this IWixToolsetCoreServiceProvider coreProvider) + { + var extensionManager = coreProvider.GetService(); + extensionManager.Add(typeof(BurnExtensionFactory).Assembly); + + return coreProvider; + } + } +} diff --git a/src/WixToolset.Core.Burn/WixToolsetStandardBackend.cs b/src/WixToolset.Core.Burn/WixToolsetStandardBackend.cs deleted file mode 100644 index 5f589d71..00000000 --- a/src/WixToolset.Core.Burn/WixToolsetStandardBackend.cs +++ /dev/null @@ -1,12 +0,0 @@ -// 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. - -namespace WixToolset.Core.Burn -{ - /// - /// Denotes this assembly contains a backend that is considered - /// a standard part of the WiX Toolset. - /// - public static class WixToolsetStandardBackend - { - } -} diff --git a/src/WixToolset.Core.ExtensionCache/WixToolsetCoreServiceProviderExtensions.cs b/src/WixToolset.Core.ExtensionCache/WixToolsetCoreServiceProviderExtensions.cs index c1579330..535a08f7 100644 --- a/src/WixToolset.Core.ExtensionCache/WixToolsetCoreServiceProviderExtensions.cs +++ b/src/WixToolset.Core.ExtensionCache/WixToolsetCoreServiceProviderExtensions.cs @@ -8,16 +8,16 @@ namespace WixToolset.Core.ExtensionCache public static class WixToolsetCoreServiceProviderExtensions { - public static IWixToolsetCoreServiceProvider AddExtensionCacheManager(this IWixToolsetCoreServiceProvider serviceProvider) + public static IWixToolsetCoreServiceProvider AddExtensionCacheManager(this IWixToolsetCoreServiceProvider coreProvider) { - var extensionManager = serviceProvider.GetService(); + var extensionManager = coreProvider.GetService(); extensionManager.Add(typeof(ExtensionCacheManagerExtensionFactory).Assembly); - serviceProvider.AddService(CreateExtensionCacheManager); - return serviceProvider; + coreProvider.AddService(CreateExtensionCacheManager); + return coreProvider; } - private static ExtensionCacheManager CreateExtensionCacheManager(IWixToolsetCoreServiceProvider provider, Dictionary singletons) + private static ExtensionCacheManager CreateExtensionCacheManager(IWixToolsetCoreServiceProvider coreProvider, Dictionary singletons) { var extensionCacheManager = new ExtensionCacheManager(); singletons.Add(typeof(ExtensionCacheManager), extensionCacheManager); diff --git a/src/WixToolset.Core.TestPackage/WixRunner.cs b/src/WixToolset.Core.TestPackage/WixRunner.cs index 679956bd..940b55a8 100644 --- a/src/WixToolset.Core.TestPackage/WixRunner.cs +++ b/src/WixToolset.Core.TestPackage/WixRunner.cs @@ -6,6 +6,8 @@ namespace WixToolset.Core.TestPackage using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; + using WixToolset.Core.Burn; + using WixToolset.Core.WindowsInstaller; using WixToolset.Data; using WixToolset.Extensibility.Data; using WixToolset.Extensibility.Services; @@ -26,40 +28,21 @@ namespace WixToolset.Core.TestPackage return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }; } - public static Task Execute(string[] args, IWixToolsetServiceProvider serviceProvider, out List messages) + public static Task Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List messages) { + coreProvider.AddWindowsInstallerBackend() + .AddBundleBackend(); + var listener = new TestMessageListener(); messages = listener.Messages; - var messaging = serviceProvider.GetService(); + var messaging = coreProvider.GetService(); messaging.SetListener(listener); - var arguments = serviceProvider.GetService(); - arguments.Populate(args); - - var commandLine = serviceProvider.GetService(); - commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions); - commandLine.Arguments = arguments; - var command = commandLine.ParseStandardCommandLine(); + var commandLine = coreProvider.GetService(); + var command = commandLine.CreateCommand(args); return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1); } - - private static IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, string[] extensions) - { - var extensionManager = serviceProvider.GetService(); - - foreach (var type in new[] { typeof(WixToolset.Core.Burn.WixToolsetStandardBackend), typeof(WixToolset.Core.WindowsInstaller.WixToolsetStandardBackend) }) - { - extensionManager.Add(type.Assembly); - } - - foreach (var extension in extensions) - { - extensionManager.Load(extension); - } - - return extensionManager; - } } } diff --git a/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs b/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs index 97208ddb..5ce04147 100644 --- a/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs +++ b/src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs @@ -63,7 +63,7 @@ namespace WixToolset.Extensibility { if (this.databaseFile != null) { - this.sourceLineNumbers = new SourceLineNumber(databaseFile); + this.sourceLineNumbers = new SourceLineNumber(this.databaseFile); } } diff --git a/src/WixToolset.Core.WindowsInstaller/WixToolsetCoreServiceProviderExtensions.cs b/src/WixToolset.Core.WindowsInstaller/WixToolsetCoreServiceProviderExtensions.cs new file mode 100644 index 00000000..f3671332 --- /dev/null +++ b/src/WixToolset.Core.WindowsInstaller/WixToolsetCoreServiceProviderExtensions.cs @@ -0,0 +1,17 @@ +// 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. + +namespace WixToolset.Core.WindowsInstaller +{ + using WixToolset.Extensibility.Services; + + public static class WixToolsetCoreServiceProviderExtensions + { + public static IWixToolsetCoreServiceProvider AddWindowsInstallerBackend(this IWixToolsetCoreServiceProvider coreProvider) + { + var extensionManager = coreProvider.GetService(); + extensionManager.Add(typeof(WindowsInstallerExtensionFactory).Assembly); + + return coreProvider; + } + } +} diff --git a/src/WixToolset.Core.WindowsInstaller/WixToolsetStandardBackend.cs b/src/WixToolset.Core.WindowsInstaller/WixToolsetStandardBackend.cs deleted file mode 100644 index 3751cb54..00000000 --- a/src/WixToolset.Core.WindowsInstaller/WixToolsetStandardBackend.cs +++ /dev/null @@ -1,12 +0,0 @@ -// 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. - -namespace WixToolset.Core.WindowsInstaller -{ - /// - /// Denotes this assembly contains a backend that is considered - /// a standard part of the WiX Toolset. - /// - public static class WixToolsetStandardBackend - { - } -} diff --git a/src/WixToolset.Core/CommandLine/CommandLine.cs b/src/WixToolset.Core/CommandLine/CommandLine.cs index 744e05b8..02bc32e9 100644 --- a/src/WixToolset.Core/CommandLine/CommandLine.cs +++ b/src/WixToolset.Core/CommandLine/CommandLine.cs @@ -21,30 +21,35 @@ namespace WixToolset.Core.CommandLine internal class CommandLine : ICommandLine { - public CommandLine(IWixToolsetServiceProvider serviceProvider) - { - this.ServiceProvider = serviceProvider; - - this.Messaging = this.ServiceProvider.GetService(); - } + public CommandLine(IWixToolsetServiceProvider serviceProvider) => this.ServiceProvider = serviceProvider; private IWixToolsetServiceProvider ServiceProvider { get; } - private IMessaging Messaging { get; set; } + public ICommandLineCommand CreateCommand(string[] args) + { + var arguments = this.ServiceProvider.GetService(); + arguments.Populate(args); - public IExtensionManager ExtensionManager { get; set; } + this.LoadExtensions(arguments.Extensions); - public ICommandLineArguments Arguments { get; set; } + return this.ParseStandardCommandLine(arguments); + } - public static string ExpectedArgument { get; } = "expected argument"; + public ICommandLineCommand CreateCommand(string commandLine) + { + var arguments = this.ServiceProvider.GetService(); + arguments.Populate(commandLine); - public bool ShowHelp { get; private set; } + this.LoadExtensions(arguments.Extensions); - public ICommandLineCommand ParseStandardCommandLine() + return this.ParseStandardCommandLine(arguments); + } + + public ICommandLineCommand ParseStandardCommandLine(ICommandLineArguments arguments) { var context = this.ServiceProvider.GetService(); - context.ExtensionManager = this.ExtensionManager ?? this.ServiceProvider.GetService(); - context.Arguments = this.Arguments; + context.ExtensionManager = this.ServiceProvider.GetService(); + context.Arguments = arguments; var command = this.Parse(context); @@ -56,9 +61,19 @@ namespace WixToolset.Core.CommandLine return command; } + private void LoadExtensions(string[] extensions) + { + var extensionManager = this.ServiceProvider.GetService(); + + foreach (var extension in extensions) + { + extensionManager.Load(extension); + } + } + private ICommandLineCommand Parse(ICommandLineContext context) { - var extensions = this.ExtensionManager.GetServices(); + var extensions = context.ExtensionManager.GetServices(); foreach (var extension in extensions) { @@ -80,7 +95,7 @@ namespace WixToolset.Core.CommandLine // First argument must be the command or global switch (that creates a command). if (command == null) { - if (!this.TryParseCommand(arg, parser, out command, extensions)) + if (!this.TryParseCommand(arg, parser, extensions, out command)) { parser.ErrorArgument = arg; } @@ -105,8 +120,8 @@ namespace WixToolset.Core.CommandLine return command ?? new HelpCommand(); } - - private bool TryParseCommand(string arg, ICommandLineParser parser, out ICommandLineCommand command, IEnumerable extensions) + + private bool TryParseCommand(string arg, ICommandLineParser parser, IEnumerable extensions, out ICommandLineCommand command) { command = null; @@ -115,17 +130,17 @@ namespace WixToolset.Core.CommandLine var parameter = arg.Substring(1); switch (parameter.ToLowerInvariant()) { - case "?": - case "h": - case "help": - case "-help": - command = new HelpCommand(); - break; - - case "version": - case "-version": - command = new VersionCommand(); - break; + case "?": + case "h": + case "help": + case "-help": + command = new HelpCommand(); + break; + + case "version": + case "-version": + command = new VersionCommand(); + break; } } else @@ -134,17 +149,17 @@ namespace WixToolset.Core.CommandLine { switch (commandType) { - case CommandTypes.Build: - command = new BuildCommand(this.ServiceProvider); - break; + case CommandTypes.Build: + command = new BuildCommand(this.ServiceProvider); + break; - case CommandTypes.Compile: - command = new CompileCommand(this.ServiceProvider); - break; + case CommandTypes.Compile: + command = new CompileCommand(this.ServiceProvider); + break; - case CommandTypes.Decompile: - command = new DecompileCommand(this.ServiceProvider); - break; + case CommandTypes.Decompile: + command = new DecompileCommand(this.ServiceProvider); + break; } } else -- cgit v1.2.3-55-g6feb