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 | ||