diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-04-18 21:17:51 +1000 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-04-18 21:31:28 +1000 |
| commit | 190135bbe8e941dee1d60d10b03e11a91574c11f (patch) | |
| tree | 381651cfbb157c0b46768fed705e6026ad2d3a2e /src | |
| parent | a6091afa5bd24fe65e7fc20f179ed888301afdf8 (diff) | |
| download | wix-190135bbe8e941dee1d60d10b03e11a91574c11f.tar.gz wix-190135bbe8e941dee1d60d10b03e11a91574c11f.tar.bz2 wix-190135bbe8e941dee1d60d10b03e11a91574c11f.zip | |
Implement Burn pdb.
Diffstat (limited to 'src')
6 files changed, 76 insertions, 74 deletions
diff --git a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs index 989a1b65..af129998 100644 --- a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs +++ b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs | |||
| @@ -74,6 +74,8 @@ namespace WixToolset.Core.Burn | |||
| 74 | 74 | ||
| 75 | public IEnumerable<ITrackedFile> TrackedFiles { get; private set; } | 75 | public IEnumerable<ITrackedFile> TrackedFiles { get; private set; } |
| 76 | 76 | ||
| 77 | public WixOutput Wixout { get; private set; } | ||
| 78 | |||
| 77 | public void Execute() | 79 | public void Execute() |
| 78 | { | 80 | { |
| 79 | var section = this.Output.Sections.Single(); | 81 | var section = this.Output.Sections.Single(); |
| @@ -381,21 +383,25 @@ namespace WixToolset.Core.Burn | |||
| 381 | this.ResolveBundleInstallScope(section, bundleTuple, orderedFacades); | 383 | this.ResolveBundleInstallScope(section, bundleTuple, orderedFacades); |
| 382 | 384 | ||
| 383 | // Generate the core-defined BA manifest tables... | 385 | // Generate the core-defined BA manifest tables... |
| 386 | string baManifestPath; | ||
| 384 | { | 387 | { |
| 385 | var command = new CreateBootstrapperApplicationManifestCommand(section, bundleTuple, orderedFacades, uxPayloadIndex, payloadTuples, this.IntermediateFolder); | 388 | var command = new CreateBootstrapperApplicationManifestCommand(section, bundleTuple, orderedFacades, uxPayloadIndex, payloadTuples, this.IntermediateFolder); |
| 386 | command.Execute(); | 389 | command.Execute(); |
| 387 | 390 | ||
| 388 | var baManifestPayload = command.BootstrapperApplicationManifestPayloadRow; | 391 | var baManifestPayload = command.BootstrapperApplicationManifestPayloadRow; |
| 392 | baManifestPath = command.OutputPath; | ||
| 389 | payloadTuples.Add(baManifestPayload.Id.Id, baManifestPayload); | 393 | payloadTuples.Add(baManifestPayload.Id.Id, baManifestPayload); |
| 390 | ++uxPayloadIndex; | 394 | ++uxPayloadIndex; |
| 391 | } | 395 | } |
| 392 | 396 | ||
| 393 | // Generate the bundle extension manifest... | 397 | // Generate the bundle extension manifest... |
| 398 | string bextManifestPath; | ||
| 394 | { | 399 | { |
| 395 | var command = new CreateBundleExtensionManifestCommand(section, bundleTuple, extensionSearchTuplesById, uxPayloadIndex, this.IntermediateFolder); | 400 | var command = new CreateBundleExtensionManifestCommand(section, bundleTuple, extensionSearchTuplesById, uxPayloadIndex, this.IntermediateFolder); |
| 396 | command.Execute(); | 401 | command.Execute(); |
| 397 | 402 | ||
| 398 | var bextManifestPayload = command.BundleExtensionManifestPayloadRow; | 403 | var bextManifestPayload = command.BundleExtensionManifestPayloadRow; |
| 404 | bextManifestPath = command.OutputPath; | ||
| 399 | payloadTuples.Add(bextManifestPayload.Id.Id, bextManifestPayload); | 405 | payloadTuples.Add(bextManifestPayload.Id.Id, bextManifestPayload); |
| 400 | ++uxPayloadIndex; | 406 | ++uxPayloadIndex; |
| 401 | } | 407 | } |
| @@ -450,29 +456,39 @@ namespace WixToolset.Core.Burn | |||
| 450 | fileTransfers.Add(command.Transfer); | 456 | fileTransfers.Add(command.Transfer); |
| 451 | } | 457 | } |
| 452 | 458 | ||
| 453 | #if TODO | 459 | #if TODO // does this need to come back, or do they only need to be in TrackedFiles? |
| 454 | this.Pdb = new Pdb { Output = output }; | 460 | this.ContentFilePaths = payloadTuples.Values.Where(p => p.ContentFile).Select(p => p.FullFileName).ToList(); |
| 461 | #endif | ||
| 462 | this.FileTransfers = fileTransfers; | ||
| 463 | this.TrackedFiles = trackedFiles; | ||
| 464 | this.Wixout = this.CreateWixout(trackedFiles, this.Output, manifestPath, baManifestPath, bextManifestPath); | ||
| 465 | } | ||
| 466 | |||
| 467 | private WixOutput CreateWixout(List<ITrackedFile> trackedFiles, Intermediate intermediate, string manifestPath, string baDataPath, string bextDataPath) | ||
| 468 | { | ||
| 469 | WixOutput wixout; | ||
| 455 | 470 | ||
| 456 | if (!String.IsNullOrEmpty(this.OutputPdbPath)) | 471 | if (String.IsNullOrEmpty(this.OutputPdbPath)) |
| 472 | { | ||
| 473 | wixout = WixOutput.Create(); | ||
| 474 | } | ||
| 475 | else | ||
| 457 | { | 476 | { |
| 458 | var trackPdb = this.BackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.Final); | 477 | var trackPdb = this.BackendHelper.TrackFile(this.OutputPdbPath, TrackedFileType.Final); |
| 459 | trackedFiles.Add(trackPdb); | 478 | trackedFiles.Add(trackPdb); |
| 460 | 479 | ||
| 461 | this.Pdb.Save(trackPdb.Path); | 480 | wixout = WixOutput.Create(trackPdb.Path); |
| 462 | } | 481 | } |
| 463 | #endif | ||
| 464 | 482 | ||
| 465 | #if TODO // does this need to come back, or do they only need to be in TrackedFiles? | 483 | intermediate.Save(wixout); |
| 466 | this.ContentFilePaths = payloadTuples.Values.Where(p => p.ContentFile).Select(p => p.FullFileName).ToList(); | 484 | |
| 467 | #endif | 485 | wixout.ImportDataStream(BurnConstants.BurnManifestWixOutputStreamName, manifestPath); |
| 468 | this.FileTransfers = fileTransfers; | 486 | wixout.ImportDataStream(BurnConstants.BootstrapperApplicationDataWixOutputStreamName, baDataPath); |
| 469 | this.TrackedFiles = trackedFiles; | 487 | wixout.ImportDataStream(BurnConstants.BundleExtensionDataWixOutputStreamName, bextDataPath); |
| 488 | |||
| 489 | wixout.Reopen(); | ||
| 470 | 490 | ||
| 471 | // TODO: Eventually this gets removed | 491 | return wixout; |
| 472 | var intermediate = new Intermediate(this.Output.Id, new[] { section }, this.Output.Localizations.ToDictionary(l => l.Culture, StringComparer.OrdinalIgnoreCase)); | ||
| 473 | var trackIntermediate = this.BackendHelper.TrackFile(Path.Combine(this.IntermediateFolder, Path.GetFileName(Path.ChangeExtension(this.OutputPath, "wir"))), TrackedFileType.Intermediate); | ||
| 474 | intermediate.Save(trackIntermediate.Path); | ||
| 475 | trackedFiles.Add(trackIntermediate); | ||
| 476 | } | 492 | } |
| 477 | 493 | ||
| 478 | /// <summary> | 494 | /// <summary> |
diff --git a/src/WixToolset.Core.Burn/BundleBackend.cs b/src/WixToolset.Core.Burn/BundleBackend.cs index 99442403..4a2f44b1 100644 --- a/src/WixToolset.Core.Burn/BundleBackend.cs +++ b/src/WixToolset.Core.Burn/BundleBackend.cs | |||
| @@ -30,6 +30,7 @@ namespace WixToolset.Core.Burn | |||
| 30 | var result = context.ServiceProvider.GetService<IBindResult>(); | 30 | var result = context.ServiceProvider.GetService<IBindResult>(); |
| 31 | result.FileTransfers = command.FileTransfers; | 31 | result.FileTransfers = command.FileTransfers; |
| 32 | result.TrackedFiles = command.TrackedFiles; | 32 | result.TrackedFiles = command.TrackedFiles; |
| 33 | result.Wixout = command.Wixout; | ||
| 33 | 34 | ||
| 34 | foreach (var extension in backendExtensions) | 35 | foreach (var extension in backendExtensions) |
| 35 | { | 36 | { |
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs index 231be7a5..cdab21fb 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs | |||
| @@ -40,11 +40,13 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 40 | 40 | ||
| 41 | public WixBundlePayloadTuple BootstrapperApplicationManifestPayloadRow { get; private set; } | 41 | public WixBundlePayloadTuple BootstrapperApplicationManifestPayloadRow { get; private set; } |
| 42 | 42 | ||
| 43 | public string OutputPath { get; private set; } | ||
| 44 | |||
| 43 | public void Execute() | 45 | public void Execute() |
| 44 | { | 46 | { |
| 45 | var baManifestPath = this.CreateBootstrapperApplicationManifest(); | 47 | this.OutputPath = this.CreateBootstrapperApplicationManifest(); |
| 46 | 48 | ||
| 47 | this.BootstrapperApplicationManifestPayloadRow = this.CreateBootstrapperApplicationManifestPayloadRow(baManifestPath); | 49 | this.BootstrapperApplicationManifestPayloadRow = this.CreateBootstrapperApplicationManifestPayloadRow(this.OutputPath); |
| 48 | } | 50 | } |
| 49 | 51 | ||
| 50 | private string CreateBootstrapperApplicationManifest() | 52 | private string CreateBootstrapperApplicationManifest() |
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs index 73ad5174..b4739775 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs | |||
| @@ -37,11 +37,13 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 37 | 37 | ||
| 38 | public WixBundlePayloadTuple BundleExtensionManifestPayloadRow { get; private set; } | 38 | public WixBundlePayloadTuple BundleExtensionManifestPayloadRow { get; private set; } |
| 39 | 39 | ||
| 40 | public string OutputPath { get; private set; } | ||
| 41 | |||
| 40 | public void Execute() | 42 | public void Execute() |
| 41 | { | 43 | { |
| 42 | var bextManifestPath = this.CreateBundleExtensionManifest(); | 44 | this.OutputPath = this.CreateBundleExtensionManifest(); |
| 43 | 45 | ||
| 44 | this.BundleExtensionManifestPayloadRow = this.CreateBundleExtensionManifestPayloadRow(bextManifestPath); | 46 | this.BundleExtensionManifestPayloadRow = this.CreateBundleExtensionManifestPayloadRow(this.OutputPath); |
| 45 | } | 47 | } |
| 46 | 48 | ||
| 47 | private string CreateBundleExtensionManifest() | 49 | private string CreateBundleExtensionManifest() |
diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 58f61ab8..31cfed34 100644 --- a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs | |||
| @@ -5,10 +5,12 @@ namespace WixToolsetTest.CoreIntegration | |||
| 5 | using System; | 5 | using System; |
| 6 | using System.IO; | 6 | using System.IO; |
| 7 | using System.Linq; | 7 | using System.Linq; |
| 8 | using System.Text; | ||
| 8 | using Example.Extension; | 9 | using Example.Extension; |
| 9 | using WixBuildTools.TestSupport; | 10 | using WixBuildTools.TestSupport; |
| 10 | using WixToolset.Core.TestPackage; | 11 | using WixToolset.Core.TestPackage; |
| 11 | using WixToolset.Data; | 12 | using WixToolset.Data; |
| 13 | using WixToolset.Data.Burn; | ||
| 12 | using WixToolset.Data.Tuples; | 14 | using WixToolset.Data.Tuples; |
| 13 | using Xunit; | 15 | using Xunit; |
| 14 | 16 | ||
| @@ -40,21 +42,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 40 | result.AssertSuccess(); | 42 | result.AssertSuccess(); |
| 41 | 43 | ||
| 42 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | 44 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); |
| 43 | #if TODO | ||
| 44 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | 45 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); |
| 45 | #endif | ||
| 46 | |||
| 47 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); | ||
| 48 | var section = intermediate.Sections.Single(); | ||
| 49 | |||
| 50 | var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); | ||
| 51 | Assert.Equal("1.0.0.0", bundleTuple.Version); | ||
| 52 | |||
| 53 | var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; | ||
| 54 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); | ||
| 55 | |||
| 56 | var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); | ||
| 57 | Assert.Equal("test.msi", msiTuple.Id.Id); | ||
| 58 | } | 46 | } |
| 59 | } | 47 | } |
| 60 | 48 | ||
| @@ -68,6 +56,10 @@ namespace WixToolsetTest.CoreIntegration | |||
| 68 | { | 56 | { |
| 69 | var baseFolder = fs.GetFolder(); | 57 | var baseFolder = fs.GetFolder(); |
| 70 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | 58 | var intermediateFolder = Path.Combine(baseFolder, "obj"); |
| 59 | var exePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
| 60 | var pdbPath = Path.Combine(baseFolder, @"bin\test.wixpdb"); | ||
| 61 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 62 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 71 | 63 | ||
| 72 | var result = WixRunner.Execute(new[] | 64 | var result = WixRunner.Execute(new[] |
| 73 | { | 65 | { |
| @@ -77,27 +69,44 @@ namespace WixToolsetTest.CoreIntegration | |||
| 77 | "-bindpath", Path.Combine(folder, "data"), | 69 | "-bindpath", Path.Combine(folder, "data"), |
| 78 | "-intermediateFolder", intermediateFolder, | 70 | "-intermediateFolder", intermediateFolder, |
| 79 | "-burnStub", burnStubPath, | 71 | "-burnStub", burnStubPath, |
| 80 | "-o", Path.Combine(baseFolder, @"bin\test.exe") | 72 | "-o", exePath, |
| 81 | }); | 73 | }); |
| 82 | 74 | ||
| 83 | result.AssertSuccess(); | 75 | result.AssertSuccess(); |
| 84 | 76 | ||
| 85 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | 77 | Assert.True(File.Exists(exePath)); |
| 86 | #if TODO | 78 | Assert.True(File.Exists(pdbPath)); |
| 87 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | 79 | |
| 88 | #endif | 80 | using (var wixOutput = WixOutput.Read(pdbPath)) |
| 81 | { | ||
| 89 | 82 | ||
| 90 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); | 83 | var intermediate = Intermediate.Load(wixOutput); |
| 91 | var section = intermediate.Sections.Single(); | 84 | var section = intermediate.Sections.Single(); |
| 92 | 85 | ||
| 93 | var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); | 86 | var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); |
| 94 | Assert.Equal("1.0.0.0", bundleTuple.Version); | 87 | Assert.Equal("1.0.0.0", bundleTuple.Version); |
| 95 | 88 | ||
| 96 | var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; | 89 | var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; |
| 97 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); | 90 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); |
| 98 | 91 | ||
| 99 | var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); | 92 | var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); |
| 100 | Assert.Equal("test.msi", msiTuple.Id.Id); | 93 | Assert.Equal("test.msi", msiTuple.Id.Id); |
| 94 | |||
| 95 | var extractResult = BundleExtractor.ExtractBAContainer(null, exePath, baFolderPath, extractFolderPath); | ||
| 96 | extractResult.AssertSuccess(); | ||
| 97 | |||
| 98 | var burnManifestData = wixOutput.GetData(BurnConstants.BurnManifestWixOutputStreamName); | ||
| 99 | var extractedBurnManifestData = File.ReadAllText(Path.Combine(baFolderPath, "manifest.xml"), Encoding.UTF8); | ||
| 100 | Assert.Equal(extractedBurnManifestData, burnManifestData); | ||
| 101 | |||
| 102 | var baManifestData = wixOutput.GetData(BurnConstants.BootstrapperApplicationDataWixOutputStreamName); | ||
| 103 | var extractedBaManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BootstrapperApplicationData.xml"), Encoding.UTF8); | ||
| 104 | Assert.Equal(extractedBaManifestData, baManifestData); | ||
| 105 | |||
| 106 | var bextManifestData = wixOutput.GetData(BurnConstants.BundleExtensionDataWixOutputStreamName); | ||
| 107 | var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8); | ||
| 108 | Assert.Equal(extractedBextManifestData, bextManifestData); | ||
| 109 | } | ||
| 101 | } | 110 | } |
| 102 | } | 111 | } |
| 103 | 112 | ||
| @@ -128,21 +137,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 128 | result.AssertSuccess(); | 137 | result.AssertSuccess(); |
| 129 | 138 | ||
| 130 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | 139 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); |
| 131 | #if TODO | ||
| 132 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | 140 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); |
| 133 | #endif | ||
| 134 | |||
| 135 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); | ||
| 136 | var section = intermediate.Sections.Single(); | ||
| 137 | |||
| 138 | var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); | ||
| 139 | Assert.Equal("1.0.0.0", bundleTuple.Version); | ||
| 140 | |||
| 141 | var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; | ||
| 142 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); | ||
| 143 | |||
| 144 | var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); | ||
| 145 | Assert.Equal("test.msi", msiTuple.Id.Id); | ||
| 146 | } | 141 | } |
| 147 | } | 142 | } |
| 148 | } | 143 | } |
diff --git a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs index 0e740554..44a0e283 100644 --- a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs | |||
| @@ -50,21 +50,7 @@ namespace WixToolsetTest.CoreIntegration | |||
| 50 | result.AssertSuccess(); | 50 | result.AssertSuccess(); |
| 51 | 51 | ||
| 52 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); | 52 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.exe"))); |
| 53 | #if TODO | ||
| 54 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); | 53 | Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.wixpdb"))); |
| 55 | #endif | ||
| 56 | |||
| 57 | var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"test.wir")); | ||
| 58 | var section = intermediate.Sections.Single(); | ||
| 59 | |||
| 60 | var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); | ||
| 61 | Assert.Equal("1.0.0.0", bundleTuple.Version); | ||
| 62 | |||
| 63 | var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; | ||
| 64 | Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); | ||
| 65 | |||
| 66 | var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); | ||
| 67 | Assert.Equal("test.msi", msiTuple.Id.Id); | ||
| 68 | } | 54 | } |
| 69 | } | 55 | } |
| 70 | 56 | ||
