aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-01-24 15:27:20 -0800
committerRob Mensching <rob@firegiant.com>2020-02-05 16:15:47 -0800
commit6ff680e386b1543ad1a58d1b1d465ce8aa20bc7d (patch)
treec717333cd10d5592e59dfb898b391275bba1f389 /src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
parent6e2e67ab55c75f4655397588c0dcc64f50d22f92 (diff)
downloadwix-6ff680e386b1543ad1a58d1b1d465ce8aa20bc7d.tar.gz
wix-6ff680e386b1543ad1a58d1b1d465ce8aa20bc7d.tar.bz2
wix-6ff680e386b1543ad1a58d1b1d465ce8aa20bc7d.zip
Start on new patch infrastructure
Diffstat (limited to 'src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs')
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs197
1 files changed, 95 insertions, 102 deletions
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
index 8757024e..ea6e4f31 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
@@ -15,24 +15,37 @@ namespace WixToolset.Core.WindowsInstaller.Bind
15 15
16 internal class BindTransformCommand 16 internal class BindTransformCommand
17 { 17 {
18 public IEnumerable<IFileSystemExtension> Extensions { private get; set; } 18 public BindTransformCommand(IMessaging messaging, IBackendHelper backendHelper, IEnumerable<IFileSystemExtension> extensions, string intermediateFolder, WindowsInstallerData transform, string outputPath, TableDefinitionCollection tableDefinitions)
19 {
20 this.Messaging = messaging;
21 this.BackendHelper = backendHelper;
22 this.Extensions = extensions;
23 this.IntermediateFolder = intermediateFolder;
24 this.Transform = transform;
25 this.OutputPath = outputPath;
26 this.TableDefinitions = tableDefinitions;
27 }
28
29 private IMessaging Messaging { get; }
19 30
20 public TableDefinitionCollection TableDefinitions { private get; set; } 31 private IBackendHelper BackendHelper { get; }
21 32
22 public string TempFilesLocation { private get; set; } 33 private IEnumerable<IFileSystemExtension> Extensions { get; }
23 34
24 public WindowsInstallerData Transform { private get; set; } 35 private TableDefinitionCollection TableDefinitions { get; }
25 36
26 public IMessaging Messaging { private get; set; } 37 private string IntermediateFolder { get; }
27 38
28 public string OutputPath { private get; set; } 39 private WindowsInstallerData Transform { get; }
40
41 private string OutputPath { get; }
29 42
30 public void Execute() 43 public void Execute()
31 { 44 {
32 int transformFlags = 0; 45 var transformFlags = 0;
33 46
34 WindowsInstallerData targetOutput = new WindowsInstallerData(null); 47 var targetOutput = new WindowsInstallerData(null);
35 WindowsInstallerData updatedOutput = new WindowsInstallerData(null); 48 var updatedOutput = new WindowsInstallerData(null);
36 49
37 // TODO: handle added columns 50 // TODO: handle added columns
38 51
@@ -49,8 +62,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
49 string targetUpgradeCode = null; 62 string targetUpgradeCode = null;
50 string updatedUpgradeCode = null; 63 string updatedUpgradeCode = null;
51 64
52 Table propertyTable = this.Transform.Tables["Property"]; 65 if (this.Transform.TryGetTable("Property", out var propertyTable))
53 if (null != propertyTable)
54 { 66 {
55 for (int i = propertyTable.Rows.Count - 1; i >= 0; i--) 67 for (int i = propertyTable.Rows.Count - 1; i >= 0; i--)
56 { 68 {
@@ -68,18 +80,21 @@ namespace WixToolset.Core.WindowsInstaller.Bind
68 } 80 }
69 } 81 }
70 82
71 Table targetSummaryInfo = targetOutput.EnsureTable(this.TableDefinitions["_SummaryInformation"]); 83 var targetSummaryInfo = targetOutput.EnsureTable(this.TableDefinitions["_SummaryInformation"]);
72 Table updatedSummaryInfo = updatedOutput.EnsureTable(this.TableDefinitions["_SummaryInformation"]); 84 var updatedSummaryInfo = updatedOutput.EnsureTable(this.TableDefinitions["_SummaryInformation"]);
73 Table targetPropertyTable = targetOutput.EnsureTable(this.TableDefinitions["Property"]); 85 var targetPropertyTable = targetOutput.EnsureTable(this.TableDefinitions["Property"]);
74 Table updatedPropertyTable = updatedOutput.EnsureTable(this.TableDefinitions["Property"]); 86 var updatedPropertyTable = updatedOutput.EnsureTable(this.TableDefinitions["Property"]);
75 87
76 // process special summary information values 88 // process special summary information values
77 foreach (Row row in this.Transform.Tables["_SummaryInformation"].Rows) 89 foreach (var row in this.Transform.Tables["_SummaryInformation"].Rows)
78 { 90 {
79 if ((int)SummaryInformation.Transform.CodePage == (int)row[0]) 91 var summaryId = row.FieldAsInteger(0);
92 var summaryData = row.FieldAsString(1);
93
94 if ((int)SummaryInformation.Transform.CodePage == summaryId)
80 { 95 {
81 // convert from a web name if provided 96 // convert from a web name if provided
82 string codePage = (string)row.Fields[1].Data; 97 var codePage = summaryData;
83 if (null == codePage) 98 if (null == codePage)
84 { 99 {
85 codePage = "0"; 100 codePage = "0";
@@ -89,7 +104,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
89 codePage = Common.GetValidCodePage(codePage).ToString(CultureInfo.InvariantCulture); 104 codePage = Common.GetValidCodePage(codePage).ToString(CultureInfo.InvariantCulture);
90 } 105 }
91 106
92 string previousCodePage = (string)row.Fields[1].PreviousData; 107 var previousCodePage = row.Fields[1].PreviousData;
93 if (null == previousCodePage) 108 if (null == previousCodePage)
94 { 109 {
95 previousCodePage = "0"; 110 previousCodePage = "0";
@@ -99,50 +114,50 @@ namespace WixToolset.Core.WindowsInstaller.Bind
99 previousCodePage = Common.GetValidCodePage(previousCodePage).ToString(CultureInfo.InvariantCulture); 114 previousCodePage = Common.GetValidCodePage(previousCodePage).ToString(CultureInfo.InvariantCulture);
100 } 115 }
101 116
102 Row targetCodePageRow = targetSummaryInfo.CreateRow(null); 117 var targetCodePageRow = targetSummaryInfo.CreateRow(null);
103 targetCodePageRow[0] = 1; // PID_CODEPAGE 118 targetCodePageRow[0] = 1; // PID_CODEPAGE
104 targetCodePageRow[1] = previousCodePage; 119 targetCodePageRow[1] = previousCodePage;
105 120
106 Row updatedCodePageRow = updatedSummaryInfo.CreateRow(null); 121 var updatedCodePageRow = updatedSummaryInfo.CreateRow(null);
107 updatedCodePageRow[0] = 1; // PID_CODEPAGE 122 updatedCodePageRow[0] = 1; // PID_CODEPAGE
108 updatedCodePageRow[1] = codePage; 123 updatedCodePageRow[1] = codePage;
109 } 124 }
110 else if ((int)SummaryInformation.Transform.TargetPlatformAndLanguage == (int)row[0] || 125 else if ((int)SummaryInformation.Transform.TargetPlatformAndLanguage == summaryId ||
111 (int)SummaryInformation.Transform.UpdatedPlatformAndLanguage == (int)row[0]) 126 (int)SummaryInformation.Transform.UpdatedPlatformAndLanguage == summaryId)
112 { 127 {
113 // the target language 128 // the target language
114 string[] propertyData = ((string)row[1]).Split(';'); 129 var propertyData = summaryData.Split(';');
115 string lang = 2 == propertyData.Length ? propertyData[1] : "0"; 130 var lang = 2 == propertyData.Length ? propertyData[1] : "0";
116 131
117 Table tempSummaryInfo = (int)SummaryInformation.Transform.TargetPlatformAndLanguage == (int)row[0] ? targetSummaryInfo : updatedSummaryInfo; 132 var tempSummaryInfo = (int)SummaryInformation.Transform.TargetPlatformAndLanguage == summaryId ? targetSummaryInfo : updatedSummaryInfo;
118 Table tempPropertyTable = (int)SummaryInformation.Transform.TargetPlatformAndLanguage == (int)row[0] ? targetPropertyTable : updatedPropertyTable; 133 var tempPropertyTable = (int)SummaryInformation.Transform.TargetPlatformAndLanguage == summaryId ? targetPropertyTable : updatedPropertyTable;
119 134
120 Row productLanguageRow = tempPropertyTable.CreateRow(null); 135 var productLanguageRow = tempPropertyTable.CreateRow(null);
121 productLanguageRow[0] = "ProductLanguage"; 136 productLanguageRow[0] = "ProductLanguage";
122 productLanguageRow[1] = lang; 137 productLanguageRow[1] = lang;
123 138
124 // set the platform;language on the MSI to be generated 139 // set the platform;language on the MSI to be generated
125 Row templateRow = tempSummaryInfo.CreateRow(null); 140 var templateRow = tempSummaryInfo.CreateRow(null);
126 templateRow[0] = 7; // PID_TEMPLATE 141 templateRow[0] = 7; // PID_TEMPLATE
127 templateRow[1] = (string)row[1]; 142 templateRow[1] = summaryData;
128 } 143 }
129 else if ((int)SummaryInformation.Transform.ProductCodes == (int)row[0]) 144 else if ((int)SummaryInformation.Transform.ProductCodes == summaryId)
130 { 145 {
131 string[] propertyData = ((string)row[1]).Split(';'); 146 var propertyData = summaryData.Split(';');
132 147
133 Row targetProductCodeRow = targetPropertyTable.CreateRow(null); 148 var targetProductCodeRow = targetPropertyTable.CreateRow(null);
134 targetProductCodeRow[0] = "ProductCode"; 149 targetProductCodeRow[0] = "ProductCode";
135 targetProductCodeRow[1] = propertyData[0].Substring(0, 38); 150 targetProductCodeRow[1] = propertyData[0].Substring(0, 38);
136 151
137 Row targetProductVersionRow = targetPropertyTable.CreateRow(null); 152 var targetProductVersionRow = targetPropertyTable.CreateRow(null);
138 targetProductVersionRow[0] = "ProductVersion"; 153 targetProductVersionRow[0] = "ProductVersion";
139 targetProductVersionRow[1] = propertyData[0].Substring(38); 154 targetProductVersionRow[1] = propertyData[0].Substring(38);
140 155
141 Row updatedProductCodeRow = updatedPropertyTable.CreateRow(null); 156 var updatedProductCodeRow = updatedPropertyTable.CreateRow(null);
142 updatedProductCodeRow[0] = "ProductCode"; 157 updatedProductCodeRow[0] = "ProductCode";
143 updatedProductCodeRow[1] = propertyData[1].Substring(0, 38); 158 updatedProductCodeRow[1] = propertyData[1].Substring(0, 38);
144 159
145 Row updatedProductVersionRow = updatedPropertyTable.CreateRow(null); 160 var updatedProductVersionRow = updatedPropertyTable.CreateRow(null);
146 updatedProductVersionRow[0] = "ProductVersion"; 161 updatedProductVersionRow[0] = "ProductVersion";
147 updatedProductVersionRow[1] = propertyData[1].Substring(38); 162 updatedProductVersionRow[1] = propertyData[1].Substring(38);
148 163
@@ -153,7 +168,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
153 targetUpgradeCode = propertyData[2]; 168 targetUpgradeCode = propertyData[2];
154 if (!String.IsNullOrEmpty(targetUpgradeCode)) 169 if (!String.IsNullOrEmpty(targetUpgradeCode))
155 { 170 {
156 Row targetUpgradeCodeRow = targetPropertyTable.CreateRow(null); 171 var targetUpgradeCodeRow = targetPropertyTable.CreateRow(null);
157 targetUpgradeCodeRow[0] = "UpgradeCode"; 172 targetUpgradeCodeRow[0] = "UpgradeCode";
158 targetUpgradeCodeRow[1] = targetUpgradeCode; 173 targetUpgradeCodeRow[1] = targetUpgradeCode;
159 174
@@ -167,16 +182,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
167 182
168 if (!String.IsNullOrEmpty(updatedUpgradeCode)) 183 if (!String.IsNullOrEmpty(updatedUpgradeCode))
169 { 184 {
170 Row updatedUpgradeCodeRow = updatedPropertyTable.CreateRow(null); 185 var updatedUpgradeCodeRow = updatedPropertyTable.CreateRow(null);
171 updatedUpgradeCodeRow[0] = "UpgradeCode"; 186 updatedUpgradeCodeRow[0] = "UpgradeCode";
172 updatedUpgradeCodeRow[1] = updatedUpgradeCode; 187 updatedUpgradeCodeRow[1] = updatedUpgradeCode;
173 } 188 }
174 } 189 }
175 else if ((int)SummaryInformation.Transform.ValidationFlags == (int)row[0]) 190 else if ((int)SummaryInformation.Transform.ValidationFlags == summaryId)
176 { 191 {
177 transformFlags = Convert.ToInt32(row[1], CultureInfo.InvariantCulture); 192 transformFlags = Convert.ToInt32(summaryData, CultureInfo.InvariantCulture);
178 } 193 }
179 else if ((int)SummaryInformation.Transform.Reserved11 == (int)row[0]) 194 else if ((int)SummaryInformation.Transform.Reserved11 == summaryId)
180 { 195 {
181 // PID_LASTPRINTED should be null for transforms 196 // PID_LASTPRINTED should be null for transforms
182 row.Operation = RowOperation.None; 197 row.Operation = RowOperation.None;
@@ -184,11 +199,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
184 else 199 else
185 { 200 {
186 // add everything else as is 201 // add everything else as is
187 Row targetRow = targetSummaryInfo.CreateRow(null); 202 var targetRow = targetSummaryInfo.CreateRow(null);
188 targetRow[0] = row[0]; 203 targetRow[0] = row[0];
189 targetRow[1] = row[1]; 204 targetRow[1] = row[1];
190 205
191 Row updatedRow = updatedSummaryInfo.CreateRow(null); 206 var updatedRow = updatedSummaryInfo.CreateRow(null);
192 updatedRow[0] = row[0]; 207 updatedRow[0] = row[0];
193 updatedRow[1] = row[1]; 208 updatedRow[1] = row[1];
194 } 209 }
@@ -205,7 +220,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
205 220
206 string emptyFile = null; 221 string emptyFile = null;
207 222
208 foreach (Table table in this.Transform.Tables) 223 foreach (var table in this.Transform.Tables)
209 { 224 {
210 // Ignore unreal tables when building transforms except the _Stream table. 225 // Ignore unreal tables when building transforms except the _Stream table.
211 // These tables are ignored when generating the database so there is no reason 226 // These tables are ignored when generating the database so there is no reason
@@ -231,20 +246,21 @@ namespace WixToolset.Core.WindowsInstaller.Bind
231 } 246 }
232 247
233 // process row operations 248 // process row operations
234 foreach (Row row in table.Rows) 249 foreach (var row in table.Rows)
235 { 250 {
236 switch (row.Operation) 251 switch (row.Operation)
237 { 252 {
238 case RowOperation.Add: 253 case RowOperation.Add:
239 Table updatedTable = updatedOutput.EnsureTable(table.Definition); 254 var updatedTable = updatedOutput.EnsureTable(table.Definition);
240 updatedTable.Rows.Add(row); 255 updatedTable.Rows.Add(row);
241 continue; 256 continue;
257
242 case RowOperation.Delete: 258 case RowOperation.Delete:
243 Table targetTable = targetOutput.EnsureTable(table.Definition); 259 var targetTable = targetOutput.EnsureTable(table.Definition);
244 targetTable.Rows.Add(row); 260 targetTable.Rows.Add(row);
245 261
246 // fill-in non-primary key values 262 // fill-in non-primary key values
247 foreach (Field field in row.Fields) 263 foreach (var field in row.Fields)
248 { 264 {
249 if (!field.Column.PrimaryKey) 265 if (!field.Column.PrimaryKey)
250 { 266 {
@@ -256,7 +272,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
256 { 272 {
257 if (null == emptyFile) 273 if (null == emptyFile)
258 { 274 {
259 emptyFile = Path.Combine(this.TempFilesLocation, "empty"); 275 emptyFile = Path.Combine(this.IntermediateFolder, "empty");
260 } 276 }
261 277
262 field.Data = emptyFile; 278 field.Data = emptyFile;
@@ -273,7 +289,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
273 // Assure that the file table's sequence is populated 289 // Assure that the file table's sequence is populated
274 if ("File" == table.Name) 290 if ("File" == table.Name)
275 { 291 {
276 foreach (Row fileRow in table.Rows) 292 foreach (var fileRow in table.Rows)
277 { 293 {
278 if (null == fileRow[7]) 294 if (null == fileRow[7])
279 { 295 {
@@ -290,60 +306,48 @@ namespace WixToolset.Core.WindowsInstaller.Bind
290 } 306 }
291 307
292 // process modified and unmodified rows 308 // process modified and unmodified rows
293 bool modifiedRow = false; 309 var modifiedRow = false;
294 Row targetRow = new Row(null, table.Definition); 310 var targetRow = new Row(null, table.Definition);
295 Row updatedRow = row; 311 var updatedRow = row;
296 for (int i = 0; i < row.Fields.Length; i++) 312 for (var i = 0; i < row.Fields.Length; i++)
297 { 313 {
298 Field updatedField = row.Fields[i]; 314 var updatedField = row.Fields[i];
299 315
300 if (updatedField.Modified) 316 if (updatedField.Modified)
301 { 317 {
302 // set a different value in the target row to ensure this value will be modified during transform generation 318 // set a different value in the target row to ensure this value will be modified during transform generation
303 if (ColumnType.Number == updatedField.Column.Type && !updatedField.Column.IsLocalizable) 319 if (ColumnType.Number == updatedField.Column.Type && !updatedField.Column.IsLocalizable)
304 { 320 {
305 if (null == updatedField.Data || 1 != (int)updatedField.Data) 321 var data = updatedField.AsNullableInteger();
306 { 322 targetRow[i] = (data == 1) ? 2 : 1;
307 targetRow[i] = 1;
308 }
309 else
310 {
311 targetRow[i] = 2;
312 }
313 } 323 }
314 else if (ColumnType.Object == updatedField.Column.Type) 324 else if (ColumnType.Object == updatedField.Column.Type)
315 { 325 {
316 if (null == emptyFile) 326 if (null == emptyFile)
317 { 327 {
318 emptyFile = Path.Combine(this.TempFilesLocation, "empty"); 328 emptyFile = Path.Combine(this.IntermediateFolder, "empty");
319 } 329 }
320 330
321 targetRow[i] = emptyFile; 331 targetRow[i] = emptyFile;
322 } 332 }
323 else 333 else
324 { 334 {
325 if ("0" != (string)updatedField.Data) 335 var data = updatedField.AsString();
326 { 336 targetRow[i] = (data == "0") ? "1" : "0";
327 targetRow[i] = "0";
328 }
329 else
330 {
331 targetRow[i] = "1";
332 }
333 } 337 }
334 338
335 modifiedRow = true; 339 modifiedRow = true;
336 } 340 }
337 else if (ColumnType.Object == updatedField.Column.Type) 341 else if (ColumnType.Object == updatedField.Column.Type)
338 { 342 {
339 ObjectField objectField = (ObjectField)updatedField; 343 var objectField = (ObjectField)updatedField;
340 344
341 // create an empty file for comparing against 345 // create an empty file for comparing against
342 if (null == objectField.PreviousData) 346 if (null == objectField.PreviousData)
343 { 347 {
344 if (null == emptyFile) 348 if (null == emptyFile)
345 { 349 {
346 emptyFile = Path.Combine(this.TempFilesLocation, "empty"); 350 emptyFile = Path.Combine(this.IntermediateFolder, "empty");
347 } 351 }
348 352
349 targetRow[i] = emptyFile; 353 targetRow[i] = emptyFile;
@@ -372,10 +376,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
372 "ProductVersion" == (string)row[0] || 376 "ProductVersion" == (string)row[0] ||
373 "UpgradeCode" == (string)row[0]))) 377 "UpgradeCode" == (string)row[0])))
374 { 378 {
375 Table targetTable = targetOutput.EnsureTable(table.Definition); 379 var targetTable = targetOutput.EnsureTable(table.Definition);
376 targetTable.Rows.Add(targetRow); 380 targetTable.Rows.Add(targetRow);
377 381
378 Table updatedTable = updatedOutput.EnsureTable(table.Definition); 382 var updatedTable = updatedOutput.EnsureTable(table.Definition);
379 updatedTable.Rows.Add(updatedRow); 383 updatedTable.Rows.Add(updatedRow);
380 } 384 }
381 } 385 }
@@ -392,38 +396,36 @@ namespace WixToolset.Core.WindowsInstaller.Bind
392 return; 396 return;
393 } 397 }
394 398
395 string transformFileName = Path.GetFileNameWithoutExtension(this.OutputPath); 399 var transformFileName = Path.GetFileNameWithoutExtension(this.OutputPath);
396 string targetDatabaseFile = Path.Combine(this.TempFilesLocation, String.Concat(transformFileName, "_target.msi")); 400 var targetDatabaseFile = Path.Combine(this.IntermediateFolder, String.Concat(transformFileName, "_target.msi"));
397 string updatedDatabaseFile = Path.Combine(this.TempFilesLocation, String.Concat(transformFileName, "_updated.msi")); 401 var updatedDatabaseFile = Path.Combine(this.IntermediateFolder, String.Concat(transformFileName, "_updated.msi"));
398 402
399 try 403 try
400 { 404 {
401 if (!String.IsNullOrEmpty(emptyFile)) 405 if (!String.IsNullOrEmpty(emptyFile))
402 { 406 {
403 using (FileStream fileStream = File.Create(emptyFile)) 407 using (var fileStream = File.Create(emptyFile))
404 { 408 {
405 } 409 }
406 } 410 }
407 411
408 this.GenerateDatabase(targetOutput, targetDatabaseFile, false); 412 this.GenerateDatabase(targetOutput, targetDatabaseFile, keepAddedColumns: false);
409 this.GenerateDatabase(updatedOutput, updatedDatabaseFile, true); 413 this.GenerateDatabase(updatedOutput, updatedDatabaseFile, keepAddedColumns: true);
410 414
411 // make sure the directory exists 415 // make sure the directory exists
412 Directory.CreateDirectory(Path.GetDirectoryName(this.OutputPath)); 416 Directory.CreateDirectory(Path.GetDirectoryName(this.OutputPath));
413 417
414 // create the transform file 418 // create the transform file
415 using (Database targetDatabase = new Database(targetDatabaseFile, OpenDatabase.ReadOnly)) 419 using (var targetDatabase = new Database(targetDatabaseFile, OpenDatabase.ReadOnly))
420 using (var updatedDatabase = new Database(updatedDatabaseFile, OpenDatabase.ReadOnly))
416 { 421 {
417 using (Database updatedDatabase = new Database(updatedDatabaseFile, OpenDatabase.ReadOnly)) 422 if (updatedDatabase.GenerateTransform(targetDatabase, this.OutputPath))
418 { 423 {
419 if (updatedDatabase.GenerateTransform(targetDatabase, this.OutputPath)) 424 updatedDatabase.CreateTransformSummaryInfo(targetDatabase, this.OutputPath, (TransformErrorConditions)(transformFlags & 0xFFFF), (TransformValidations)((transformFlags >> 16) & 0xFFFF));
420 { 425 }
421 updatedDatabase.CreateTransformSummaryInfo(targetDatabase, this.OutputPath, (TransformErrorConditions)(transformFlags & 0xFFFF), (TransformValidations)((transformFlags >> 16) & 0xFFFF)); 426 else
422 } 427 {
423 else 428 this.Messaging.Write(ErrorMessages.NoDifferencesInTransform(this.Transform.SourceLineNumbers));
424 {
425 this.Messaging.Write(ErrorMessages.NoDifferencesInTransform(this.Transform.SourceLineNumbers));
426 }
427 } 429 }
428 } 430 }
429 } 431 }
@@ -458,16 +460,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
458 460
459 private void GenerateDatabase(WindowsInstallerData output, string outputPath, bool keepAddedColumns) 461 private void GenerateDatabase(WindowsInstallerData output, string outputPath, bool keepAddedColumns)
460 { 462 {
461 var command = new GenerateDatabaseCommand(); 463 var command = new GenerateDatabaseCommand(this.Messaging, this.BackendHelper, this.Extensions, output, outputPath, this.TableDefinitions, this.IntermediateFolder, codepage: -1, keepAddedColumns, suppressAddingValidationRows: true, useSubdirectory: true );
462 command.Codepage = output.Codepage;
463 command.Extensions = this.Extensions;
464 command.KeepAddedColumns = keepAddedColumns;
465 command.Output = output;
466 command.OutputPath = outputPath;
467 command.TableDefinitions = this.TableDefinitions;
468 command.IntermediateFolder = this.TempFilesLocation;
469 command.SuppressAddingValidationRows = true;
470 command.UseSubDirectory = true;
471 command.Execute(); 464 command.Execute();
472 } 465 }
473 } 466 }