diff options
| author | Rob Mensching <rob@firegiant.com> | 2018-07-12 22:27:09 -0700 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2018-07-12 22:38:12 -0700 |
| commit | fc92b28f87599ac25d35399dc2df2f356a285960 (patch) | |
| tree | 0a775850ec5b4ff580b949700b51f5eee3182325 /src/light/light.cs | |
| parent | 1a2d7994764060dc6f8936fab1c03e255f2671c5 (diff) | |
| download | wix-fc92b28f87599ac25d35399dc2df2f356a285960.tar.gz wix-fc92b28f87599ac25d35399dc2df2f356a285960.tar.bz2 wix-fc92b28f87599ac25d35399dc2df2f356a285960.zip | |
Refactor command line parsing to enable extensions there in light.exe
Fixes wixtoolset/issues#5845
Diffstat (limited to 'src/light/light.cs')
| -rw-r--r-- | src/light/light.cs | 49 |
1 files changed, 14 insertions, 35 deletions
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 | |||
| 22 | public sealed class Light | 22 | public sealed class Light |
| 23 | { | 23 | { |
| 24 | LightCommandLine commandLine; | 24 | LightCommandLine commandLine; |
| 25 | private IEnumerable<IExtensionData> extensionData; | ||
| 26 | //private IEnumerable<IBinderExtension> binderExtensions; | 25 | //private IEnumerable<IBinderExtension> binderExtensions; |
| 27 | //private IEnumerable<IBinderFileManager> fileManagers; | 26 | //private IEnumerable<IBinderFileManager> fileManagers; |
| 28 | 27 | ||
| @@ -101,45 +100,20 @@ namespace WixToolset.Tools | |||
| 101 | /// <param name="args">Command line arguments to be parsed.</param> | 100 | /// <param name="args">Command line arguments to be parsed.</param> |
| 102 | private IEnumerable<string> ParseCommandLineAndLoadExtensions(IServiceProvider serviceProvider, IMessaging messaging, string[] args) | 101 | private IEnumerable<string> ParseCommandLineAndLoadExtensions(IServiceProvider serviceProvider, IMessaging messaging, string[] args) |
| 103 | { | 102 | { |
| 104 | this.commandLine = new LightCommandLine(messaging); | 103 | var arguments = serviceProvider.GetService<ICommandLineArguments>(); |
| 104 | arguments.Populate(args); | ||
| 105 | 105 | ||
| 106 | string[] unprocessed = this.commandLine.Parse(args); | 106 | var extensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions); |
| 107 | if (messaging.EncounteredError) | ||
| 108 | { | ||
| 109 | return unprocessed; | ||
| 110 | } | ||
| 111 | 107 | ||
| 112 | // Load extensions. | ||
| 113 | var extensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider); | ||
| 114 | foreach (string extension in this.commandLine.Extensions) | ||
| 115 | { | ||
| 116 | extensionManager.Load(extension); | ||
| 117 | } | ||
| 118 | |||
| 119 | // Extension data command line processing. | ||
| 120 | var context = serviceProvider.GetService<ICommandLineContext>(); | 108 | var context = serviceProvider.GetService<ICommandLineContext>(); |
| 121 | context.Arguments = null; | ||
| 122 | context.ExtensionManager = extensionManager; | 109 | context.ExtensionManager = extensionManager; |
| 123 | context.Messaging = messaging; | 110 | context.Messaging = messaging; |
| 124 | context.ParsedArguments = args; | 111 | context.Arguments = arguments; |
| 125 | |||
| 126 | var commandLineExtensions = extensionManager.Create<IExtensionCommandLine>(); | ||
| 127 | foreach (var extension in commandLineExtensions) | ||
| 128 | { | ||
| 129 | extension.PreParse(context); | ||
| 130 | } | ||
| 131 | 112 | ||
| 132 | // Process unproccessed arguments. | 113 | this.commandLine = new LightCommandLine(messaging); |
| 133 | List<string> actuallyUnprocessed = new List<string>(); | 114 | var unprocessed = this.commandLine.Parse(context); |
| 134 | foreach (var arg in unprocessed) | ||
| 135 | { | ||
| 136 | if (!this.TryParseCommandLineArgumentWithExtension(arg, commandLineExtensions)) | ||
| 137 | { | ||
| 138 | actuallyUnprocessed.Add(arg); | ||
| 139 | } | ||
| 140 | } | ||
| 141 | 115 | ||
| 142 | return this.commandLine.ParsePostExtensions(actuallyUnprocessed.ToArray()); | 116 | return unprocessed; |
| 143 | } | 117 | } |
| 144 | 118 | ||
| 145 | private void Bind(IServiceProvider serviceProvider, IMessaging messaging) | 119 | private void Bind(IServiceProvider serviceProvider, IMessaging messaging) |
| @@ -194,7 +168,7 @@ namespace WixToolset.Tools | |||
| 194 | binder.IntermediateRepresentation = resolveResult.IntermediateRepresentation; | 168 | binder.IntermediateRepresentation = resolveResult.IntermediateRepresentation; |
| 195 | binder.OutputPath = this.commandLine.OutputFile; | 169 | binder.OutputPath = this.commandLine.OutputFile; |
| 196 | binder.OutputPdbPath = Path.ChangeExtension(this.commandLine.OutputFile, ".wixpdb"); | 170 | binder.OutputPdbPath = Path.ChangeExtension(this.commandLine.OutputFile, ".wixpdb"); |
| 197 | binder.SuppressIces = this.commandLine.SuppressIces; | 171 | binder.SuppressIces = this.commandLine.SuppressIces; |
| 198 | binder.SuppressValidation = this.commandLine.SuppressValidation; | 172 | binder.SuppressValidation = this.commandLine.SuppressValidation; |
| 199 | 173 | ||
| 200 | bindResult = binder.Execute(); | 174 | bindResult = binder.Execute(); |
| @@ -526,7 +500,7 @@ namespace WixToolset.Tools | |||
| 526 | return Intermediate.Load(path); | 500 | return Intermediate.Load(path); |
| 527 | } | 501 | } |
| 528 | 502 | ||
| 529 | private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider) | 503 | private static IExtensionManager CreateExtensionManagerWithStandardBackends(IServiceProvider serviceProvider, IEnumerable<string> extensions) |
| 530 | { | 504 | { |
| 531 | var extensionManager = serviceProvider.GetService<IExtensionManager>(); | 505 | var extensionManager = serviceProvider.GetService<IExtensionManager>(); |
| 532 | 506 | ||
| @@ -535,6 +509,11 @@ namespace WixToolset.Tools | |||
| 535 | extensionManager.Add(type.Assembly); | 509 | extensionManager.Add(type.Assembly); |
| 536 | } | 510 | } |
| 537 | 511 | ||
| 512 | foreach (var extension in extensions) | ||
| 513 | { | ||
| 514 | extensionManager.Load(extension); | ||
| 515 | } | ||
| 516 | |||
| 538 | return extensionManager; | 517 | return extensionManager; |
| 539 | } | 518 | } |
| 540 | 519 | ||
