From 699644e86bf985178caef685ef2e8c7f02ec3121 Mon Sep 17 00:00:00 2001 From: Jonathan Giannuzzi Date: Tue, 9 Nov 2021 11:18:53 +0000 Subject: [PATCH] Fix unstable MSBuild compilation cache (#3) --- T4.Build/Program.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/T4.Build/Program.cs b/T4.Build/Program.cs index 9f6c263..725cbcf 100644 --- a/T4.Build/Program.cs +++ b/T4.Build/Program.cs @@ -1,5 +1,6 @@ using System; using System.CodeDom.Compiler; +using System.Collections; using System.Collections.Concurrent; using System.CommandLine; using System.CommandLine.Invocation; @@ -44,6 +45,7 @@ static int Transform(FileInfo[] templates, int lockTimeout, bool skipUpToDate, b { using (var locker = new Lock($"Global\\T4.Build.transform.{ComputeHash(templates)}.lock", lockTimeout)) { + var outputQueue = new ConcurrentQueue(); var errorQueue = new ConcurrentQueue(); var didSomeWork = false; var stopwatch = new Stopwatch(); @@ -63,7 +65,7 @@ static int Transform(FileInfo[] templates, int lockTimeout, bool skipUpToDate, b if (generator.Errors.HasErrors) errorQueue.Enqueue(generator.Errors); else - Console.WriteLine(generator.OutputFile); + outputQueue.Enqueue(generator.OutputFile); } catch (Exception e) { @@ -72,6 +74,12 @@ static int Transform(FileInfo[] templates, int lockTimeout, bool skipUpToDate, b }); stopwatch.Stop(); + // Sort the generated file names so that the MSBuild compilation cache hash remains stable + var outputs = outputQueue.ToArray(); + Array.Sort(outputs, new CaseInsensitiveComparer()); + foreach (var output in outputs) + Console.WriteLine(output); + if (didSomeWork && errorQueue.IsEmpty) Console.Error.WriteLine($"Templates transformed for {Path.GetFileName(Directory.GetCurrentDirectory())} (in {stopwatch.ElapsedMilliseconds / 1000.0} sec).");