aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-05-22 14:47:36 -0700
committerRob Mensching <rob@firegiant.com>2020-05-22 15:25:19 -0700
commite8030ca17ff96a794a3fecd66bb01b81581a5451 (patch)
tree6f05c2356882f33b375e2372efecf3d60830686b /src
parentd84ed7360adec89569eaab3793e9723f38d2a855 (diff)
downloadwix-e8030ca17ff96a794a3fecd66bb01b81581a5451.tar.gz
wix-e8030ca17ff96a794a3fecd66bb01b81581a5451.tar.bz2
wix-e8030ca17ff96a794a3fecd66bb01b81581a5451.zip
Fix naming of file in a merge module's cabinet
The file was stored in the merge module's cabinet with plain FileId, without the modularization GUID. This change fixes the cabinet builder so that it adds the modularization GUID when creating the cabinet.
Diffstat (limited to 'src')
-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