From 5d102ae37163fc1f22610bb433c3ab9a2fff91f0 Mon Sep 17 00:00:00 2001 From: Meik Tranel Date: Tue, 16 Aug 2022 19:45:33 +0200 Subject: [PATCH] Accept `TaskOutput` when filtering events for EmbedInBinlog (#7869) Co-authored-by: Forgind --- src/Build.UnitTests/BinaryLogger_Tests.cs | 30 ++++++++++++++++++- .../BinaryLogger/BuildEventArgsWriter.cs | 3 +- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Build.UnitTests/BinaryLogger_Tests.cs b/src/Build.UnitTests/BinaryLogger_Tests.cs index 71983787418..3ff983ec264 100644 --- a/src/Build.UnitTests/BinaryLogger_Tests.cs +++ b/src/Build.UnitTests/BinaryLogger_Tests.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Text; using Microsoft.Build.BackEnd.Logging; @@ -178,6 +179,34 @@ public void UnusedEnvironmentVariablesDoNotAppearInBinaryLog() } } + [Fact] + public void BinaryLoggerShouldEmbedFilesViaTaskOutput() + { + using var buildManager = new BuildManager(); + var binaryLogger = new BinaryLogger() + { + Parameters = $"LogFile={_logFile}", + CollectProjectImports = BinaryLogger.ProjectImportsCollectionMode.ZipFile, + }; + var testProject = @" + + + + + + + +"; + ObjectModelHelpers.BuildProjectExpectSuccess(testProject, binaryLogger); + var projectImportsZipPath = Path.ChangeExtension(_logFile, ".ProjectImports.zip"); + using var fileStream = new FileStream(projectImportsZipPath, FileMode.Open); + using var zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Read); + + // Can't just compare `Name` because `ZipArchive` does not handle unix directory separators well + // thus producing garbled fully qualified paths in the actual .ProjectImports.zip entries + zipArchive.Entries.ShouldContain(zE => zE.Name.EndsWith("testtaskoutputfile.txt")); + } + [Fact] public void BinaryLoggerShouldNotThrowWhenMetadataCannotBeExpanded() { @@ -245,7 +274,6 @@ public void MessagesCanBeLoggedWhenProjectsAreCached() .OverallResult.ShouldBe(BuildResultCode.Success); } - public void Dispose() { _env.Dispose(); diff --git a/src/Build/Logging/BinaryLogger/BuildEventArgsWriter.cs b/src/Build/Logging/BinaryLogger/BuildEventArgsWriter.cs index ab54c80a9e7..941cfccfc06 100644 --- a/src/Build/Logging/BinaryLogger/BuildEventArgsWriter.cs +++ b/src/Build/Logging/BinaryLogger/BuildEventArgsWriter.cs @@ -521,7 +521,8 @@ private void Write(TaskParameterEventArgs e) Write((int)e.Kind); WriteDeduplicatedString(e.ItemType); WriteTaskItemList(e.Items, e.LogItemMetadata); - if (e.Kind == TaskParameterMessageKind.AddItem) + if (e.Kind == TaskParameterMessageKind.AddItem + || e.Kind == TaskParameterMessageKind.TaskOutput) { CheckForFilesToEmbed(e.ItemType, e.Items); }