aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs7
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs6
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs4
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CabinetWorkItem.cs7
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs7
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs19
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs19
7 files changed, 47 insertions, 22 deletions
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
index c9659287..5c84a82f 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
@@ -134,7 +134,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
134 bool compressed; 134 bool compressed;
135 bool longNames; 135 bool longNames;
136 int installerVersion; 136 int installerVersion;
137 string modularizationGuid; 137 string modularizationSuffix;
138 { 138 {
139 var command = new BindSummaryInfoCommand(section); 139 var command = new BindSummaryInfoCommand(section);
140 command.Execute(); 140 command.Execute();
@@ -142,7 +142,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
142 compressed = command.Compressed; 142 compressed = command.Compressed;
143 longNames = command.LongNames; 143 longNames = command.LongNames;
144 installerVersion = command.InstallerVersion; 144 installerVersion = command.InstallerVersion;
145 modularizationGuid = command.ModularizationGuid; 145 modularizationSuffix = command.ModularizationSuffix;
146 } 146 }
147 147
148 // Add binder variables for all properties. 148 // Add binder variables for all properties.
@@ -362,7 +362,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
362 // Modularize identifiers. 362 // Modularize identifiers.
363 if (OutputType.Module == output.Type) 363 if (OutputType.Module == output.Type)
364 { 364 {
365 var command = new ModularizeCommand(output, modularizationGuid, section.Tuples.OfType<WixSuppressModularizationTuple>()); 365 var command = new ModularizeCommand(output, modularizationSuffix, section.Tuples.OfType<WixSuppressModularizationTuple>());
366 command.Execute(); 366 command.Execute();
367 } 367 }
368 else if (output.Type == OutputType.Patch) 368 else if (output.Type == OutputType.Patch)
@@ -448,6 +448,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
448 command.BackendExtensions = this.BackendExtensions; 448 command.BackendExtensions = this.BackendExtensions;
449 command.LayoutDirectory = layoutDirectory; 449 command.LayoutDirectory = layoutDirectory;
450 command.Compressed = compressed; 450 command.Compressed = compressed;
451 command.ModularizationSuffix = modularizationSuffix;
451 command.FileRowsByCabinet = filesByCabinetMedia; 452 command.FileRowsByCabinet = filesByCabinetMedia;
452 command.ResolveMedia = this.ResolveMedia; 453 command.ResolveMedia = this.ResolveMedia;
453 command.TableDefinitions = tableDefinitions; 454 command.TableDefinitions = tableDefinitions;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
index 6483f0fc..d5806fee 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
@@ -35,14 +35,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
35 /// <summary> 35 /// <summary>
36 /// Modularization guid, or null if the output is not a module. 36 /// Modularization guid, or null if the output is not a module.
37 /// </summary> 37 /// </summary>
38 public string ModularizationGuid { get; private set; } 38 public string ModularizationSuffix { get; private set; }
39 39
40 public void Execute() 40 public void Execute()
41 { 41 {
42 this.Compressed = false; 42 this.Compressed = false;
43 this.LongNames = false; 43 this.LongNames = false;
44 this.InstallerVersion = 0; 44 this.InstallerVersion = 0;
45 this.ModularizationGuid = null; 45 this.ModularizationSuffix = null;
46 46
47 var foundCreateDataTime = false; 47 var foundCreateDataTime = false;
48 var foundLastSaveDataTime = false; 48 var foundLastSaveDataTime = false;
@@ -71,7 +71,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
71 71
72 if (SectionType.Module == this.Section.Type) 72 if (SectionType.Module == this.Section.Type)
73 { 73 {
74 this.ModularizationGuid = packageCode.Substring(1, 36).Replace('-', '_'); 74 this.ModularizationSuffix = "." + packageCode.Substring(1, 36).Replace('-', '_');
75 } 75 }
76 else if ("*" == packageCode) 76 else if ("*" == packageCode)
77 { 77 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
index f70548d9..5f19fd2a 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetBuilder.cs
@@ -166,8 +166,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
166 166
167 var files = cabinetWorkItem.FileFacades 167 var files = cabinetWorkItem.FileFacades
168 .Select(facade => facade.Hash == null ? 168 .Select(facade => facade.Hash == null ?
169 new CabinetCompressFile(facade.SourcePath, facade.Id) : 169 new CabinetCompressFile(facade.SourcePath, facade.Id + cabinetWorkItem.ModularizationSuffix) :
170 new CabinetCompressFile(facade.SourcePath, facade.Id, facade.Hash.HashPart1, facade.Hash.HashPart2, facade.Hash.HashPart3, facade.Hash.HashPart4)) 170 new CabinetCompressFile(facade.SourcePath, facade.Id + cabinetWorkItem.ModularizationSuffix, facade.Hash.HashPart1, facade.Hash.HashPart2, facade.Hash.HashPart3, facade.Hash.HashPart4))
171 .ToList(); 171 .ToList();
172 172
173 var cab = new Cabinet(cabinetPath); 173 var cab = new Cabinet(cabinetPath);
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetWorkItem.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetWorkItem.cs
index 405b840b..760b5fb9 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CabinetWorkItem.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CabinetWorkItem.cs
@@ -25,9 +25,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
25 /// <param name="compressionLevel">The compression level of the cabinet.</param> 25 /// <param name="compressionLevel">The compression level of the cabinet.</param>
26 /// <param name="binderFileManager">The binder file manager.</param> 26 /// <param name="binderFileManager">The binder file manager.</param>
27 public CabinetWorkItem(IEnumerable<FileFacade> fileFacades, string cabinetFile, int maxThreshold, CompressionLevel compressionLevel /*, BinderFileManager binderFileManager*/) 27 public CabinetWorkItem(IEnumerable<FileFacade> fileFacades, string cabinetFile, int maxThreshold, CompressionLevel compressionLevel /*, BinderFileManager binderFileManager*/)
28 public CabinetWorkItem(IEnumerable<FileFacade> fileFacades, string cabinetFile, int maxThreshold, CompressionLevel compressionLevel, string modularizationSuffix /*, BinderFileManager binderFileManager*/)
28 { 29 {
29 this.cabinetFile = cabinetFile; 30 this.cabinetFile = cabinetFile;
30 this.compressionLevel = compressionLevel; 31 this.compressionLevel = compressionLevel;
32 this.ModularizationSuffix = modularizationSuffix;
31 this.FileFacades = fileFacades; 33 this.FileFacades = fileFacades;
32 //this.binderFileManager = binderFileManager; 34 //this.binderFileManager = binderFileManager;
33 this.maxThreshold = maxThreshold; 35 this.maxThreshold = maxThreshold;
@@ -52,6 +54,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
52 } 54 }
53 55
54 /// <summary> 56 /// <summary>
57 /// Gets the modularization suffix used when building a Merge Module.
58 /// </summary>
59 public string ModularizationSuffix { get; }
60
61 /// <summary>
55 /// Gets the collection of files in this cabinet. 62 /// Gets the collection of files in this cabinet.
56 /// </summary> 63 /// </summary>
57 /// <value>The collection of files in this cabinet.</value> 64 /// <value>The collection of files in this cabinet.</value>
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
index 2536eeac..6852772e 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
@@ -75,6 +75,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
75 75
76 public bool Compressed { private get; set; } 76 public bool Compressed { private get; set; }
77 77
78 public string ModularizationSuffix { private get; set; }
79
78 public Dictionary<MediaTuple, IEnumerable<FileFacade>> FileRowsByCabinet { private get; set; } 80 public Dictionary<MediaTuple, IEnumerable<FileFacade>> FileRowsByCabinet { private get; set; }
79 81
80 public Func<MediaTuple, string, string, string> ResolveMedia { private get; set; } 82 public Func<MediaTuple, string, string, string> ResolveMedia { private get; set; }
@@ -214,9 +216,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
214 // create a cabinet work item if it's not being skipped 216 // create a cabinet work item if it's not being skipped
215 if (CabinetBuildOption.BuildAndCopy == resolvedCabinet.BuildOption || CabinetBuildOption.BuildAndMove == resolvedCabinet.BuildOption) 217 if (CabinetBuildOption.BuildAndCopy == resolvedCabinet.BuildOption || CabinetBuildOption.BuildAndMove == resolvedCabinet.BuildOption)
216 { 218 {
217 int maxThreshold = 0; // default to the threshold for best smartcabbing (makes smallest cabinet). 219 // Default to the threshold for best smartcabbing (makes smallest cabinet).
218 220 cabinetWorkItem = new CabinetWorkItem(fileFacades, resolvedCabinet.Path, maxThreshold: 0, compressionLevel, this.ModularizationSuffix /*, this.FileManager*/);
219 cabinetWorkItem = new CabinetWorkItem(fileFacades, resolvedCabinet.Path, maxThreshold, compressionLevel/*, this.FileManager*/);
220 } 221 }
221 else // reuse the cabinet from the cabinet cache. 222 else // reuse the cabinet from the cabinet cache.
222 { 223 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
index 64257ccf..8b459d69 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
@@ -15,10 +15,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
15 15
16 internal class ModularizeCommand 16 internal class ModularizeCommand
17 { 17 {
18 public ModularizeCommand(WindowsInstallerData output, string modularizationGuid, IEnumerable<WixSuppressModularizationTuple> suppressTuples) 18 public ModularizeCommand(WindowsInstallerData output, string modularizationSuffix, IEnumerable<WixSuppressModularizationTuple> suppressTuples)
19 { 19 {
20 this.Output = output; 20 this.Output = output;
21 this.ModularizationGuid = modularizationGuid; 21 this.ModularizationSuffix = modularizationSuffix;
22 22
23 // Gather all the unique suppress modularization identifiers. 23 // Gather all the unique suppress modularization identifiers.
24 this.SuppressModularizationIdentifiers = new HashSet<string>(suppressTuples.Select(s => s.Id.Id)); 24 this.SuppressModularizationIdentifiers = new HashSet<string>(suppressTuples.Select(s => s.Id.Id));
@@ -26,7 +26,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
26 26
27 private WindowsInstallerData Output { get; } 27 private WindowsInstallerData Output { get; }
28 28
29 private string ModularizationGuid { get; } 29 private string ModularizationSuffix { get; }
30 30
31 private HashSet<string> SuppressModularizationIdentifiers { get; } 31 private HashSet<string> SuppressModularizationIdentifiers { get; }
32 32
@@ -129,7 +129,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
129 // if we're not supposed to suppress modularization of this identifier 129 // if we're not supposed to suppress modularization of this identifier
130 if (!this.SuppressModularizationIdentifiers.Contains(fieldData)) 130 if (!this.SuppressModularizationIdentifiers.Contains(fieldData))
131 { 131 {
132 fieldData = String.Concat(fieldData, ".", this.ModularizationGuid); 132 fieldData = String.Concat(fieldData, this.ModularizationSuffix);
133 } 133 }
134 break; 134 break;
135 135
@@ -178,8 +178,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
178 var identifier = group.Value; 178 var identifier = group.Value;
179 if (!WindowsInstallerStandard.IsStandardProperty(identifier) && !this.SuppressModularizationIdentifiers.Contains(identifier)) 179 if (!WindowsInstallerStandard.IsStandardProperty(identifier) && !this.SuppressModularizationIdentifiers.Contains(identifier))
180 { 180 {
181 sb.Insert(group.Index + group.Length, '.'); 181 sb.Insert(group.Index + group.Length, this.ModularizationSuffix);
182 sb.Insert(group.Index + group.Length + 1, this.ModularizationGuid);
183 } 182 }
184 } 183 }
185 } 184 }
@@ -193,7 +192,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
193 if (!this.SuppressModularizationIdentifiers.Contains(fieldData) && 192 if (!this.SuppressModularizationIdentifiers.Contains(fieldData) &&
194 0 < fieldData.Length && !Char.IsDigit(fieldData, 0)) 193 0 < fieldData.Length && !Char.IsDigit(fieldData, 0))
195 { 194 {
196 fieldData = String.Concat(fieldData, ".", this.ModularizationGuid); 195 fieldData = String.Concat(fieldData, this.ModularizationSuffix);
197 } 196 }
198 break; 197 break;
199 198
@@ -203,11 +202,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
203 var start = fieldData.LastIndexOf(".", StringComparison.Ordinal); 202 var start = fieldData.LastIndexOf(".", StringComparison.Ordinal);
204 if (-1 == start) 203 if (-1 == start)
205 { 204 {
206 fieldData = String.Concat(fieldData, ".", this.ModularizationGuid); 205 fieldData = String.Concat(fieldData, this.ModularizationSuffix);
207 } 206 }
208 else 207 else
209 { 208 {
210 fieldData = String.Concat(fieldData.Substring(0, start), ".", this.ModularizationGuid, fieldData.Substring(start)); 209 fieldData = String.Concat(fieldData.Substring(0, start), this.ModularizationSuffix, fieldData.Substring(start));
211 } 210 }
212 } 211 }
213 break; 212 break;
@@ -218,7 +217,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
218 { 217 {
219 if (!String.IsNullOrEmpty(keys[i])) 218 if (!String.IsNullOrEmpty(keys[i]))
220 { 219 {
221 keys[i] = String.Concat(keys[i], ".", this.ModularizationGuid); 220 keys[i] = String.Concat(keys[i], this.ModularizationSuffix);
222 } 221 }
223 } 222 }
224 223
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
index 5af256c1..075f7733 100644
--- a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
@@ -346,15 +346,32 @@ namespace WixToolsetTest.CoreIntegration
346 346
347 result.AssertSuccess(); 347 result.AssertSuccess();
348 348
349 Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.msm"))); 349 var msmPath = Path.Combine(intermediateFolder, @"bin\test.msm");
350 Assert.True(File.Exists(msmPath));
350 Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb"))); 351 Assert.True(File.Exists(Path.Combine(intermediateFolder, @"bin\test.wixpdb")));
351 352
352 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 353 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
353 var section = intermediate.Sections.Single(); 354 var section = intermediate.Sections.Single();
354 355
355 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 356 var fileTuple = section.Tuples.OfType<FileTuple>().Single();
357 Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileTuple.Id.Id);
356 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 358 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path);
357 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 359 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path);
360
361 var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
362 var fileRows = data.Tables["File"].Rows;
363 Assert.Equal(new[]
364 {
365 "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
366 }, fileRows.Select(r => r.FieldAsString(0)).ToArray());
367
368 var cabPath = Path.Combine(intermediateFolder, "msm-test.cab");
369 Query.ExtractStream(msmPath, "MergeModule.CABinet", cabPath);
370 var files = Query.GetCabinetFiles(cabPath);
371 Assert.Equal(new[]
372 {
373 "filyIq8rqcxxf903Hsn5K9L0SWV73g.243FB739_4D05_472F_9CFB_EF6B1017B6DE"
374 }, files.Select(f => Path.Combine(f.Path, f.Name)).ToArray());
358 } 375 }
359 } 376 }
360 377