aboutsummaryrefslogtreecommitdiff
path: root/src/light/light.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2018-07-12 22:27:09 -0700
committerRob Mensching <rob@firegiant.com>2018-07-12 22:38:12 -0700
commitfc92b28f87599ac25d35399dc2df2f356a285960 (patch)
tree0a775850ec5b4ff580b949700b51f5eee3182325 /src/light/light.cs
parent1a2d7994764060dc6f8936fab1c03e255f2671c5 (diff)
downloadwix-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.cs49
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