Skip to content

Commit 676f56e

Browse files
committed
enable updating transitive via top level with solver
1 parent ea2399a commit 676f56e

File tree

4 files changed

+123
-54
lines changed

4 files changed

+123
-54
lines changed

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.Sdk.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2914,6 +2914,45 @@ await TestUpdateForProject("Some.Package", "12.0.1", "13.0.1",
29142914
);
29152915
}
29162916

2917+
[Fact]
2918+
public async Task UpdatingTransitiveDependencyWithNewSolverCanUpdateJustTheTopLevelPackage()
2919+
{
2920+
// we've been asked to explicitly update a transitive dependency, but we can solve it by updating the top-level package instead
2921+
using var _ = new DependencySolverEnvironment();
2922+
await TestUpdateForProject("Transitive.Package", "1.0.0", "2.0.0",
2923+
isTransitive: true,
2924+
packages:
2925+
[
2926+
MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[1.0.0]")])]),
2927+
MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", "net8.0", [("net8.0", [("Transitive.Package", "[2.0.0]")])]),
2928+
MockNuGetPackage.CreateSimplePackage("Transitive.Package", "1.0.0", "net8.0"),
2929+
MockNuGetPackage.CreateSimplePackage("Transitive.Package", "2.0.0", "net8.0"),
2930+
],
2931+
projectContents: """
2932+
<Project Sdk="Microsoft.NET.Sdk">
2933+
<PropertyGroup>
2934+
<TargetFramework>net8.0</TargetFramework>
2935+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
2936+
</PropertyGroup>
2937+
<ItemGroup>
2938+
<PackageReference Include="Some.Package" Version="1.0.0" />
2939+
</ItemGroup>
2940+
</Project>
2941+
""",
2942+
expectedProjectContents: """
2943+
<Project Sdk="Microsoft.NET.Sdk">
2944+
<PropertyGroup>
2945+
<TargetFramework>net8.0</TargetFramework>
2946+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
2947+
</PropertyGroup>
2948+
<ItemGroup>
2949+
<PackageReference Include="Some.Package" Version="2.0.0" />
2950+
</ItemGroup>
2951+
</Project>
2952+
"""
2953+
);
2954+
}
2955+
29172956
[Theory]
29182957
[InlineData(true)]
29192958
[InlineData(false)]

nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,9 @@ [new Dependency("Package.A", "1.0.0", DependencyType.Unknown)]
442442
}
443443

444444
[Fact]
445-
public async Task DependencyConflictsCanBeResolved()
445+
public async Task DependencyConflictsCanBeResolvedWithBruteForce()
446446
{
447-
var repoRoot = Directory.CreateTempSubdirectory($"test_{nameof(DependencyConflictsCanBeResolved)}_");
447+
var repoRoot = Directory.CreateTempSubdirectory($"test_{nameof(DependencyConflictsCanBeResolvedWithBruteForce)}_");
448448
MockNuGetPackage[] testPackages =
449449
[
450450
// some base packages
@@ -483,7 +483,7 @@ await File.WriteAllTextAsync(projectPath, """
483483
{
484484
new Dependency("Some.Other.Package", "1.2.0", DependencyType.PackageReference),
485485
};
486-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
486+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsWithBruteForce(repoRoot.FullName, projectPath, "net8.0", dependencies, new TestLogger());
487487
Assert.NotNull(resolvedDependencies);
488488
Assert.Equal(2, resolvedDependencies.Length);
489489
Assert.Equal("Some.Package", resolvedDependencies[0].Name);
@@ -533,7 +533,7 @@ await File.WriteAllTextAsync(projectPath, """
533533
new Dependency("CS-Script.Core", "2.0.0", DependencyType.PackageReference),
534534
};
535535

536-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
536+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
537537
Assert.NotNull(resolvedDependencies);
538538
Assert.Equal(3, resolvedDependencies.Length);
539539
Assert.Equal("CS-Script.Core", resolvedDependencies[0].Name);
@@ -578,7 +578,7 @@ await File.WriteAllTextAsync(projectPath, """
578578
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.1.1", DependencyType.Unknown)
579579
};
580580

581-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
581+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
582582
Assert.NotNull(resolvedDependencies);
583583
Assert.Single(resolvedDependencies);
584584
Assert.Equal("Azure.Core", resolvedDependencies[0].Name);
@@ -621,7 +621,7 @@ await File.WriteAllTextAsync(projectPath, """
621621
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
622622
};
623623

624-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
624+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
625625
Assert.NotNull(resolvedDependencies);
626626
Assert.Equal(2, resolvedDependencies.Length);
627627
Assert.Equal("Newtonsoft.Json.Bson", resolvedDependencies[0].Name);
@@ -671,7 +671,7 @@ await File.WriteAllTextAsync(projectPath, """
671671
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
672672
};
673673

674-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
674+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
675675
Assert.NotNull(resolvedDependencies);
676676
Assert.Equal(3, resolvedDependencies.Length);
677677
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
@@ -723,7 +723,7 @@ await File.WriteAllTextAsync(projectPath, """
723723
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
724724
};
725725

726-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
726+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
727727
Assert.NotNull(resolvedDependencies);
728728
Assert.Equal(4, resolvedDependencies.Length);
729729
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
@@ -779,7 +779,7 @@ await File.WriteAllTextAsync(projectPath, """
779779
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
780780
};
781781

782-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
782+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
783783
Assert.NotNull(resolvedDependencies);
784784
Assert.Equal(5, resolvedDependencies.Length);
785785
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
@@ -838,7 +838,7 @@ await File.WriteAllTextAsync(projectPath, """
838838
new Dependency("Buildalyzer", "7.0.1", DependencyType.PackageReference),
839839
};
840840

841-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
841+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
842842
Assert.NotNull(resolvedDependencies);
843843
Assert.Equal(4, resolvedDependencies.Length);
844844
Assert.Equal("Buildalyzer", resolvedDependencies[0].Name);
@@ -895,7 +895,7 @@ await File.WriteAllTextAsync(projectPath, """
895895
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
896896
};
897897

898-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
898+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
899899
Assert.NotNull(resolvedDependencies);
900900
Assert.Equal(4, resolvedDependencies.Length);
901901
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
@@ -952,7 +952,7 @@ await File.WriteAllTextAsync(projectPath, """
952952
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
953953
};
954954

955-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
955+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
956956
Assert.NotNull(resolvedDependencies);
957957
Assert.Equal(5, resolvedDependencies.Length);
958958
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
@@ -1007,7 +1007,7 @@ await File.WriteAllTextAsync(projectPath, """
10071007
new Dependency("AutoMapper.Collection", "10.0.0", DependencyType.PackageReference)
10081008
};
10091009

1010-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1010+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
10111011
Assert.NotNull(resolvedDependencies);
10121012
Assert.Equal(3, resolvedDependencies.Length);
10131013
Assert.Equal("AutoMapper.Extensions.Microsoft.DependencyInjection", resolvedDependencies[0].Name);
@@ -1054,7 +1054,7 @@ await File.WriteAllTextAsync(projectPath, """
10541054
new Dependency("Microsoft.Extensions.Caching.Memory", "8.0.0", DependencyType.PackageReference)
10551055
};
10561056

1057-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1057+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
10581058
Assert.NotNull(resolvedDependencies);
10591059
Assert.Equal(2, resolvedDependencies.Length);
10601060
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[0].Name);
@@ -1104,7 +1104,7 @@ await File.WriteAllTextAsync(projectPath, """
11041104
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
11051105
};
11061106

1107-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1107+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
11081108
Assert.NotNull(resolvedDependencies);
11091109
Assert.Equal(4, resolvedDependencies.Length);
11101110
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
@@ -1156,7 +1156,7 @@ await File.WriteAllTextAsync(projectPath, """
11561156
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
11571157
};
11581158

1159-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1159+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
11601160
Assert.NotNull(resolvedDependencies);
11611161
Assert.Equal(3, resolvedDependencies.Length);
11621162
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
@@ -1208,7 +1208,7 @@ await File.WriteAllTextAsync(projectPath, """
12081208
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
12091209
};
12101210

1211-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1211+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
12121212
Assert.NotNull(resolvedDependencies);
12131213
Assert.Equal(4, resolvedDependencies.Length);
12141214
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
@@ -1260,7 +1260,7 @@ await File.WriteAllTextAsync(projectPath, """
12601260
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
12611261
};
12621262

1263-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsNew(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
1263+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
12641264
Assert.NotNull(resolvedDependencies);
12651265
Assert.Equal(3, resolvedDependencies.Length);
12661266
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Workspaces", resolvedDependencies[0].Name);

0 commit comments

Comments
 (0)