aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/LayoutCreator.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/WixToolset.Core/LayoutCreator.cs (renamed from src/WixToolset.Core/Layout.cs)50
1 files changed, 12 insertions, 38 deletions
diff --git a/src/WixToolset.Core/Layout.cs b/src/WixToolset.Core/LayoutCreator.cs
index b1b03aa7..684465d2 100644
--- a/src/WixToolset.Core/Layout.cs
+++ b/src/WixToolset.Core/LayoutCreator.cs
@@ -8,16 +8,15 @@ namespace WixToolset.Core
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Data; 11 using WixToolset.Extensibility.Data;
13 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
14 13
15 /// <summary> 14 /// <summary>
16 /// Layout for the WiX toolset. 15 /// Layout for the WiX toolset.
17 /// </summary> 16 /// </summary>
18 internal class Layout 17 internal class LayoutCreator : ILayoutCreator
19 { 18 {
20 internal Layout(IServiceProvider serviceProvider) 19 internal LayoutCreator(IServiceProvider serviceProvider)
21 { 20 {
22 this.ServiceProvider = serviceProvider; 21 this.ServiceProvider = serviceProvider;
23 22
@@ -28,33 +27,8 @@ namespace WixToolset.Core
28 27
29 private IMessaging Messaging { get; } 28 private IMessaging Messaging { get; }
30 29
31 public IEnumerable<ITrackedFile> TrackedFiles { get; set; } 30 public void Layout(ILayoutContext context)
32
33 public IEnumerable<IFileTransfer> FileTransfers { get; set; }
34
35 public string IntermediateFolder { get; set; }
36
37 public string ContentsFile { get; set; }
38
39 public string OutputsFile { get; set; }
40
41 public string BuiltOutputsFile { get; set; }
42
43 public bool SuppressAclReset { get; set; }
44
45 public void Execute()
46 { 31 {
47 var extensionManager = this.ServiceProvider.GetService<IExtensionManager>();
48
49 var context = this.ServiceProvider.GetService<ILayoutContext>();
50 context.Extensions = extensionManager.Create<ILayoutExtension>();
51 context.TrackedFiles = this.TrackedFiles;
52 context.FileTransfers = this.FileTransfers;
53 context.ContentsFile = this.ContentsFile;
54 context.OutputsFile = this.OutputsFile;
55 context.BuiltOutputsFile = this.BuiltOutputsFile;
56 context.SuppressAclReset = this.SuppressAclReset;
57
58 // Pre-layout. 32 // Pre-layout.
59 // 33 //
60 foreach (var extension in context.Extensions) 34 foreach (var extension in context.Extensions)
@@ -76,7 +50,7 @@ namespace WixToolset.Core
76 50
77 if (context.TrackedFiles != null) 51 if (context.TrackedFiles != null)
78 { 52 {
79 this.CleanTempFiles(context.TrackedFiles); 53 this.CleanTempFiles(context.IntermediateFolder, context.TrackedFiles);
80 } 54 }
81 } 55 }
82 finally 56 finally
@@ -126,7 +100,7 @@ namespace WixToolset.Core
126 100
127 using (var contents = new StreamWriter(path, false)) 101 using (var contents = new StreamWriter(path, false))
128 { 102 {
129 foreach (string inputPath in uniqueInputFilePaths) 103 foreach (var inputPath in uniqueInputFilePaths)
130 { 104 {
131 contents.WriteLine(inputPath); 105 contents.WriteLine(inputPath);
132 } 106 }
@@ -190,7 +164,7 @@ namespace WixToolset.Core
190 } 164 }
191 } 165 }
192 166
193 private void CleanTempFiles(IEnumerable<ITrackedFile> trackedFiles) 167 private void CleanTempFiles(string intermediateFolder, IEnumerable<ITrackedFile> trackedFiles)
194 { 168 {
195 var uniqueTempPaths = new SortedSet<string>(trackedFiles.Where(t => t.Type == TrackedFileType.Temporary).Select(t => t.Path), StringComparer.OrdinalIgnoreCase); 169 var uniqueTempPaths = new SortedSet<string>(trackedFiles.Where(t => t.Type == TrackedFileType.Temporary).Select(t => t.Path), StringComparer.OrdinalIgnoreCase);
196 170
@@ -201,7 +175,7 @@ namespace WixToolset.Core
201 175
202 var uniqueFolders = new SortedSet<string>(StringComparer.OrdinalIgnoreCase) 176 var uniqueFolders = new SortedSet<string>(StringComparer.OrdinalIgnoreCase)
203 { 177 {
204 this.IntermediateFolder 178 intermediateFolder
205 }; 179 };
206 180
207 // Clean up temp files. 181 // Clean up temp files.
@@ -209,7 +183,7 @@ namespace WixToolset.Core
209 { 183 {
210 try 184 try
211 { 185 {
212 this.SplitUniqueFolders(tempPath, uniqueFolders); 186 this.SplitUniqueFolders(intermediateFolder, tempPath, uniqueFolders);
213 187
214 File.Delete(tempPath); 188 File.Delete(tempPath);
215 } 189 }
@@ -231,15 +205,15 @@ namespace WixToolset.Core
231 } 205 }
232 } 206 }
233 207
234 private void SplitUniqueFolders(string tempPath, SortedSet<string> uniqueFolders) 208 private void SplitUniqueFolders(string intermediateFolder, string tempPath, SortedSet<string> uniqueFolders)
235 { 209 {
236 if (tempPath.StartsWith(this.IntermediateFolder, StringComparison.OrdinalIgnoreCase)) 210 if (tempPath.StartsWith(intermediateFolder, StringComparison.OrdinalIgnoreCase))
237 { 211 {
238 var folder = Path.GetDirectoryName(tempPath).Substring(this.IntermediateFolder.Length); 212 var folder = Path.GetDirectoryName(tempPath).Substring(intermediateFolder.Length);
239 213
240 var parts = folder.Split(new[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries); 214 var parts = folder.Split(new[] { '\\', '/' }, StringSplitOptions.RemoveEmptyEntries);
241 215
242 folder = this.IntermediateFolder; 216 folder = intermediateFolder;
243 217
244 foreach (var part in parts) 218 foreach (var part in parts)
245 { 219 {