Browse Source

Adjust ApiDiffHelper

Max Katz 1 year ago
parent
commit
5551a6cc1b
1 changed files with 32 additions and 10 deletions
  1. 32 10
      nukebuild/ApiDiffHelper.cs

+ 32 - 10
nukebuild/ApiDiffHelper.cs

@@ -9,6 +9,7 @@ using System.Net.Http;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using Nuke.Common.Tooling;
+using Serilog;
 using static Serilog.Log;
 
 public static class ApiDiffHelper
@@ -47,13 +48,18 @@ public static class ApiDiffHelper
                 var baselineDllPath = await ExtractDll("baseline", baselineDll, tempFolder);
 
                 var targetTfm = baselineDll.target;
-                if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
+                var targetDll = targetDlls.FirstOrDefault(e =>
+                    e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
+                if (targetDll is null)
                 {
-                    targetTfm = newTfm;
+                    if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
+                    {
+                        targetTfm = newTfm;
+                        targetDll = targetDlls.FirstOrDefault(e =>
+                            e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
+                    }
                 }
 
-                var targetDll = targetDlls.FirstOrDefault(e =>
-                    e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
                 if (targetDll?.entry is null)
                 {
                     throw new InvalidOperationException($"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}");
@@ -144,16 +150,32 @@ public static class ApiDiffHelper
                 var baselineDllPath = await ExtractDll("baseline", baselineDll, tempFolder);
 
                 var targetTfm = baselineDll.target;
-                if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
+                var targetDll = targetDlls.FirstOrDefault(e =>
+                    e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
+                if (targetDll?.entry is null)
                 {
-                    targetTfm = newTfm;
+                    if (s_tfmRedirects.FirstOrDefault(t => baselineDll.target.StartsWith(t.oldTfm)).newTfm is {} newTfm)
+                    {
+                        targetTfm = newTfm;
+                        targetDll = targetDlls.FirstOrDefault(e =>
+                            e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
+                    }
+                }
+                if (targetDll?.entry is null && targetDlls.Count == 1)
+                {
+                    targetDll = targetDlls.First();
+                    Warning(
+                        $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}." +
+                        $"Resolved: {targetDll.target} ({targetDll.entry.Name})");
                 }
 
-                var targetDll = targetDlls.FirstOrDefault(e =>
-                    e.target.StartsWith(targetTfm) && e.entry.Name == baselineDll.entry.Name);
-                if (targetDll.entry is null)
+                if (targetDll?.entry is null)
                 {
-                    throw new InvalidOperationException($"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}");
+                    var actualTargets = string.Join(", ",
+                        targetDlls.Select(d => $"{d.target} ({baselineDll.entry.Name})"));
+                    throw new InvalidOperationException(
+                        $"Some assemblies are missing in the new package {packageId}: {baselineDll.entry.Name} for {baselineDll.target}."
+                        + $"\r\nActual targets: {actualTargets}.");
                 }
 
                 var targetDllPath = await ExtractDll("target", targetDll, tempFolder);