diff options
| author | Rob Mensching <rob@firegiant.com> | 2020-01-24 15:27:20 -0800 |
|---|---|---|
| committer | Rob Mensching <rob@firegiant.com> | 2020-02-05 16:15:47 -0800 |
| commit | 6ff680e386b1543ad1a58d1b1d465ce8aa20bc7d (patch) | |
| tree | c717333cd10d5592e59dfb898b391275bba1f389 /src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs | |
| parent | 6e2e67ab55c75f4655397588c0dcc64f50d22f92 (diff) | |
| download | wix-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.cs | 197 |
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 | } |
