From fc92b28f87599ac25d35399dc2df2f356a285960 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Thu, 12 Jul 2018 22:27:09 -0700 Subject: Refactor command line parsing to enable extensions there in light.exe Fixes wixtoolset/issues#5845 --- src/light/light.cs | 49 ++++++++++++++----------------------------------- 1 file changed, 14 insertions(+), 35 deletions(-) (limited to 'src/light/light.cs') diff --git a/src/light/light.cs b/src/light/light.cs index c0967caa..0f467bbb 100644 --- a/src/light/light.cs +++ b/src/light/light.cs @@ -22,7 +22,6 @@ namespace WixToolset.Tools public sealed class Light { LightCommandLine commandLine; - private IEnumerable extensionData; //private IEnumerable binderExtensions; //private IEnumerable fileManagers; @@ -101,45 +100,20 @@ namespace WixToolset.Tools /// Command line arguments to be parsed. private IEnumerable ParseCommandLineAndLoadExtensions(IServiceProvider serviceProvider, IMessaging messaging, string[] args) { - this.commandLine = new LightCommandLine(messaging); + var arguments = serviceProvider.GetService(); + arguments.Populate(args); - string[] unprocessed = this.commandLine.Parse(args); - if (messaging.EncounteredError) - { - return unprocessed; - } + var extensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions); - // Load extensions. - var extensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider); - foreach (string extension in this.commandLine.Extensions) - { - extensionManager.Load(extension); - } - - // Extension data command line processing. var context = serviceProvider.GetService(); - context.Arguments = null; context.ExtensionManager = extensionManager; context.Messaging = messaging; - context.ParsedArguments = args; - - var commandLineExtensions = extensionManager.Create(); - foreach (var extension in commandLineExtensions) - { - extension.PreParse(context); - } + context.Arguments = arguments; - // Process unproccessed arguments. - List actuallyUnprocessed = new List(); - foreach (var arg in unprocessed) - { - if (!this.TryParseCommandLineArgumentWithExtension(arg, commandLineExtensions)) - { - actuallyUnprocessed.Add(arg); - } - } + this.commandLine = new LightCommandLine(messaging); + var unprocessed = this.commandLine.Parse(context); - return this.commandLine.ParsePostExtensions(actuallyUnprocessed.ToArray()); + return unprocessed; } private void Bind(IServiceProvider serviceProvider, IMessaging messaging) @@ -194,7 +168,7 @@ namespace WixToolset.Tools binder.IntermediateRepresentation = resolveResult.IntermediateRepresentation; binder.OutputPath = this.commandLine.OutputFile; binder.OutputPdbPath = Path.ChangeExtension(this.commandLine.OutputFile, ".wixpdb"); - binder.SuppressIces = this.commandLine.SuppressIces; + binder.SuppressIces = this.commandLine.SuppressIces; binder.SuppressValidation = this.commandLine.SuppressValidation; bindResult = binder.Execute(); @@ -526,7 +500,7 @@ namespace WixToolset.Tools return Intermediate.Load(path); } - private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider) + private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, IEnumerable extensions) { var extensionManager = serviceProvider.GetService(); @@ -535,6 +509,11 @@ namespace WixToolset.Tools extensionManager.Add(type.Assembly); } + foreach (var extension in extensions) + { + extensionManager.Load(extension); + } + return extensionManager; } -- cgit v1.2.3-55-g6feb