aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-06-13 10:01:27 -0700
committerRob Mensching <rob@firegiant.com>2020-06-13 10:13:41 -0700
commitcd6f466549ba8e4b138da4332b0831ab45ca8a2f (patch)
tree0d02b559903966d64ec67fff17d898b78ebb33ba /src
parentc0f1332a0e18e9d506fe80c328548b001dcf93df (diff)
downloadwix-cd6f466549ba8e4b138da4332b0831ab45ca8a2f.tar.gz
wix-cd6f466549ba8e4b138da4332b0831ab45ca8a2f.tar.bz2
wix-cd6f466549ba8e4b138da4332b0831ab45ca8a2f.zip
Implement simplified command and improved backend integration
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core.Burn/WixToolsetCoreServiceProviderExtensions.cs17
-rw-r--r--src/WixToolset.Core.Burn/WixToolsetStandardBackend.cs12
-rw-r--r--src/WixToolset.Core.ExtensionCache/WixToolsetCoreServiceProviderExtensions.cs10
-rw-r--r--src/WixToolset.Core.TestPackage/WixRunner.cs35
-rw-r--r--src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/WixToolsetCoreServiceProviderExtensions.cs17
-rw-r--r--src/WixToolset.Core.WindowsInstaller/WixToolsetStandardBackend.cs12
-rw-r--r--src/WixToolset.Core/CommandLine/CommandLine.cs91
8 files changed, 102 insertions, 94 deletions
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 @@
1// 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.
2
3namespace WixToolset.Core.Burn
4{
5 using WixToolset.Extensibility.Services;
6
7 public static class WixToolsetCoreServiceProviderExtensions
8 {
9 public static IWixToolsetCoreServiceProvider AddBundleBackend(this IWixToolsetCoreServiceProvider coreProvider)
10 {
11 var extensionManager = coreProvider.GetService<IExtensionManager>();
12 extensionManager.Add(typeof(BurnExtensionFactory).Assembly);
13
14 return coreProvider;
15 }
16 }
17}
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 @@
1// 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.
2
3namespace WixToolset.Core.Burn
4{
5 /// <summary>
6 /// Denotes this assembly contains a backend that is considered
7 /// a standard part of the WiX Toolset.
8 /// </summary>
9 public static class WixToolsetStandardBackend
10 {
11 }
12}
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
8 8
9 public static class WixToolsetCoreServiceProviderExtensions 9 public static class WixToolsetCoreServiceProviderExtensions
10 { 10 {
11 public static IWixToolsetCoreServiceProvider AddExtensionCacheManager(this IWixToolsetCoreServiceProvider serviceProvider) 11 public static IWixToolsetCoreServiceProvider AddExtensionCacheManager(this IWixToolsetCoreServiceProvider coreProvider)
12 { 12 {
13 var extensionManager = serviceProvider.GetService<IExtensionManager>(); 13 var extensionManager = coreProvider.GetService<IExtensionManager>();
14 extensionManager.Add(typeof(ExtensionCacheManagerExtensionFactory).Assembly); 14 extensionManager.Add(typeof(ExtensionCacheManagerExtensionFactory).Assembly);
15 15
16 serviceProvider.AddService(CreateExtensionCacheManager); 16 coreProvider.AddService(CreateExtensionCacheManager);
17 return serviceProvider; 17 return coreProvider;
18 } 18 }
19 19
20 private static ExtensionCacheManager CreateExtensionCacheManager(IWixToolsetCoreServiceProvider provider, Dictionary<Type, object> singletons) 20 private static ExtensionCacheManager CreateExtensionCacheManager(IWixToolsetCoreServiceProvider coreProvider, Dictionary<Type, object> singletons)
21 { 21 {
22 var extensionCacheManager = new ExtensionCacheManager(); 22 var extensionCacheManager = new ExtensionCacheManager();
23 singletons.Add(typeof(ExtensionCacheManager), extensionCacheManager); 23 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
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Threading; 7 using System.Threading;
8 using System.Threading.Tasks; 8 using System.Threading.Tasks;
9 using WixToolset.Core.Burn;
10 using WixToolset.Core.WindowsInstaller;
9 using WixToolset.Data; 11 using WixToolset.Data;
10 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
11 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -26,40 +28,21 @@ namespace WixToolset.Core.TestPackage
26 return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() }; 28 return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() };
27 } 29 }
28 30
29 public static Task<int> Execute(string[] args, IWixToolsetServiceProvider serviceProvider, out List<Message> messages) 31 public static Task<int> Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List<Message> messages)
30 { 32 {
33 coreProvider.AddWindowsInstallerBackend()
34 .AddBundleBackend();
35
31 var listener = new TestMessageListener(); 36 var listener = new TestMessageListener();
32 37
33 messages = listener.Messages; 38 messages = listener.Messages;
34 39
35 var messaging = serviceProvider.GetService<IMessaging>(); 40 var messaging = coreProvider.GetService<IMessaging>();
36 messaging.SetListener(listener); 41 messaging.SetListener(listener);
37 42
38 var arguments = serviceProvider.GetService<ICommandLineArguments>(); 43 var commandLine = coreProvider.GetService<ICommandLine>();
39 arguments.Populate(args); 44 var command = commandLine.CreateCommand(args);
40
41 var commandLine = serviceProvider.GetService<ICommandLine>();
42 commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, arguments.Extensions);
43 commandLine.Arguments = arguments;
44 var command = commandLine.ParseStandardCommandLine();
45 return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1); 45 return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1);
46 } 46 }
47
48 private static IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, string[] extensions)
49 {
50 var extensionManager = serviceProvider.GetService<IExtensionManager>();
51
52 foreach (var type in new[] { typeof(WixToolset.Core.Burn.WixToolsetStandardBackend), typeof(WixToolset.Core.WindowsInstaller.WixToolsetStandardBackend) })
53 {
54 extensionManager.Add(type.Assembly);
55 }
56
57 foreach (var extension in extensions)
58 {
59 extensionManager.Load(extension);
60 }
61
62 return extensionManager;
63 }
64 } 47 }
65} 48}
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
63 { 63 {
64 if (this.databaseFile != null) 64 if (this.databaseFile != null)
65 { 65 {
66 this.sourceLineNumbers = new SourceLineNumber(databaseFile); 66 this.sourceLineNumbers = new SourceLineNumber(this.databaseFile);
67 } 67 }
68 } 68 }
69 69
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 @@
1// 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.
2
3namespace WixToolset.Core.WindowsInstaller
4{
5 using WixToolset.Extensibility.Services;
6
7 public static class WixToolsetCoreServiceProviderExtensions
8 {
9 public static IWixToolsetCoreServiceProvider AddWindowsInstallerBackend(this IWixToolsetCoreServiceProvider coreProvider)
10 {
11 var extensionManager = coreProvider.GetService<IExtensionManager>();
12 extensionManager.Add(typeof(WindowsInstallerExtensionFactory).Assembly);
13
14 return coreProvider;
15 }
16 }
17}
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 @@
1// 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.
2
3namespace WixToolset.Core.WindowsInstaller
4{
5 /// <summary>
6 /// Denotes this assembly contains a backend that is considered
7 /// a standard part of the WiX Toolset.
8 /// </summary>
9 public static class WixToolsetStandardBackend
10 {
11 }
12}
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
21 21
22 internal class CommandLine : ICommandLine 22 internal class CommandLine : ICommandLine
23 { 23 {
24 public CommandLine(IWixToolsetServiceProvider serviceProvider) 24 public CommandLine(IWixToolsetServiceProvider serviceProvider) => this.ServiceProvider = serviceProvider;
25 {
26 this.ServiceProvider = serviceProvider;
27
28 this.Messaging = this.ServiceProvider.GetService<IMessaging>();
29 }
30 25
31 private IWixToolsetServiceProvider ServiceProvider { get; } 26 private IWixToolsetServiceProvider ServiceProvider { get; }
32 27
33 private IMessaging Messaging { get; set; } 28 public ICommandLineCommand CreateCommand(string[] args)
29 {
30 var arguments = this.ServiceProvider.GetService<ICommandLineArguments>();
31 arguments.Populate(args);
34 32
35 public IExtensionManager ExtensionManager { get; set; } 33 this.LoadExtensions(arguments.Extensions);
36 34
37 public ICommandLineArguments Arguments { get; set; } 35 return this.ParseStandardCommandLine(arguments);
36 }
38 37
39 public static string ExpectedArgument { get; } = "expected argument"; 38 public ICommandLineCommand CreateCommand(string commandLine)
39 {
40 var arguments = this.ServiceProvider.GetService<ICommandLineArguments>();
41 arguments.Populate(commandLine);
40 42
41 public bool ShowHelp { get; private set; } 43 this.LoadExtensions(arguments.Extensions);
42 44
43 public ICommandLineCommand ParseStandardCommandLine() 45 return this.ParseStandardCommandLine(arguments);
46 }
47
48 public ICommandLineCommand ParseStandardCommandLine(ICommandLineArguments arguments)
44 { 49 {
45 var context = this.ServiceProvider.GetService<ICommandLineContext>(); 50 var context = this.ServiceProvider.GetService<ICommandLineContext>();
46 context.ExtensionManager = this.ExtensionManager ?? this.ServiceProvider.GetService<IExtensionManager>(); 51 context.ExtensionManager = this.ServiceProvider.GetService<IExtensionManager>();
47 context.Arguments = this.Arguments; 52 context.Arguments = arguments;
48 53
49 var command = this.Parse(context); 54 var command = this.Parse(context);
50 55
@@ -56,9 +61,19 @@ namespace WixToolset.Core.CommandLine
56 return command; 61 return command;
57 } 62 }
58 63
64 private void LoadExtensions(string[] extensions)
65 {
66 var extensionManager = this.ServiceProvider.GetService<IExtensionManager>();
67
68 foreach (var extension in extensions)
69 {
70 extensionManager.Load(extension);
71 }
72 }
73
59 private ICommandLineCommand Parse(ICommandLineContext context) 74 private ICommandLineCommand Parse(ICommandLineContext context)
60 { 75 {
61 var extensions = this.ExtensionManager.GetServices<IExtensionCommandLine>(); 76 var extensions = context.ExtensionManager.GetServices<IExtensionCommandLine>();
62 77
63 foreach (var extension in extensions) 78 foreach (var extension in extensions)
64 { 79 {
@@ -80,7 +95,7 @@ namespace WixToolset.Core.CommandLine
80 // First argument must be the command or global switch (that creates a command). 95 // First argument must be the command or global switch (that creates a command).
81 if (command == null) 96 if (command == null)
82 { 97 {
83 if (!this.TryParseCommand(arg, parser, out command, extensions)) 98 if (!this.TryParseCommand(arg, parser, extensions, out command))
84 { 99 {
85 parser.ErrorArgument = arg; 100 parser.ErrorArgument = arg;
86 } 101 }
@@ -105,8 +120,8 @@ namespace WixToolset.Core.CommandLine
105 120
106 return command ?? new HelpCommand(); 121 return command ?? new HelpCommand();
107 } 122 }
108 123
109 private bool TryParseCommand(string arg, ICommandLineParser parser, out ICommandLineCommand command, IEnumerable<IExtensionCommandLine> extensions) 124 private bool TryParseCommand(string arg, ICommandLineParser parser, IEnumerable<IExtensionCommandLine> extensions, out ICommandLineCommand command)
110 { 125 {
111 command = null; 126 command = null;
112 127
@@ -115,17 +130,17 @@ namespace WixToolset.Core.CommandLine
115 var parameter = arg.Substring(1); 130 var parameter = arg.Substring(1);
116 switch (parameter.ToLowerInvariant()) 131 switch (parameter.ToLowerInvariant())
117 { 132 {
118 case "?": 133 case "?":
119 case "h": 134 case "h":
120 case "help": 135 case "help":
121 case "-help": 136 case "-help":
122 command = new HelpCommand(); 137 command = new HelpCommand();
123 break; 138 break;
124 139
125 case "version": 140 case "version":
126 case "-version": 141 case "-version":
127 command = new VersionCommand(); 142 command = new VersionCommand();
128 break; 143 break;
129 } 144 }
130 } 145 }
131 else 146 else
@@ -134,17 +149,17 @@ namespace WixToolset.Core.CommandLine
134 { 149 {
135 switch (commandType) 150 switch (commandType)
136 { 151 {
137 case CommandTypes.Build: 152 case CommandTypes.Build:
138 command = new BuildCommand(this.ServiceProvider); 153 command = new BuildCommand(this.ServiceProvider);
139 break; 154 break;
140 155
141 case CommandTypes.Compile: 156 case CommandTypes.Compile:
142 command = new CompileCommand(this.ServiceProvider); 157 command = new CompileCommand(this.ServiceProvider);
143 break; 158 break;
144 159
145 case CommandTypes.Decompile: 160 case CommandTypes.Decompile:
146 command = new DecompileCommand(this.ServiceProvider); 161 command = new DecompileCommand(this.ServiceProvider);
147 break; 162 break;
148 } 163 }
149 } 164 }
150 else 165 else