fix non-transitive for solution
This commit is contained in:
@@ -9,7 +9,7 @@ using SharpIDE.Application.Features.SolutionDiscovery.VsPersistence;
|
||||
|
||||
namespace SharpIDE.Application.Features.Nuget;
|
||||
|
||||
public record InstalledNugetPackageInfo(bool IsTransitive, List<ProjectPackageReference> ProjectPackageReferences);
|
||||
public record InstalledNugetPackageInfo(bool IsPrimarilyTransitive, List<ProjectPackageReference> ProjectPackageReferences);
|
||||
public record IdePackageResult(string PackageId, List<IdePackageFromSourceResult> PackageFromSources, InstalledNugetPackageInfo? InstalledNugetPackageInfo);
|
||||
public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source);
|
||||
public class NugetClientService
|
||||
@@ -118,8 +118,8 @@ public class NugetClientService
|
||||
var packagesResult = new List<IdePackageResult>();
|
||||
foreach (var installedPackage in installedPackages)
|
||||
{
|
||||
var isTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive);
|
||||
var installedNugetPackageInfo = new InstalledNugetPackageInfo(isTransitive, installedPackage.ProjectPackageReferences);
|
||||
var isPrimarilyTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive is false) is false;
|
||||
var installedNugetPackageInfo = new InstalledNugetPackageInfo(isPrimarilyTransitive, installedPackage.ProjectPackageReferences);
|
||||
var idePackageResult = new IdePackageResult(installedPackage.Name, [], installedNugetPackageInfo);
|
||||
|
||||
foreach (var source in packageSources)
|
||||
|
||||
@@ -73,8 +73,8 @@ public partial class NugetPanel : Control
|
||||
if (_solution is null) throw new InvalidOperationException("Solution is null but should not be");
|
||||
_ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject));
|
||||
_ = Task.GodotRun(() => SetDetailsProjects(slnOrProject));
|
||||
_ = Task.GodotRun(() => PopulateInstalledPackages(slnOrProject));
|
||||
_ = Task.GodotRun(PopulateSearchResults);
|
||||
_ = Task.GodotRun(PopulateInstalledPackages);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -130,12 +130,23 @@ public partial class NugetPanel : Control
|
||||
});
|
||||
}
|
||||
|
||||
private async Task PopulateInstalledPackages()
|
||||
private async Task PopulateInstalledPackages(ISolutionOrProject slnOrProject)
|
||||
{
|
||||
var project = _solution!.AllProjects.First(s => s.Name == "ProjectA");
|
||||
await project.MsBuildEvaluationProjectTask;
|
||||
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects([project]);
|
||||
var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages);
|
||||
var msbuildEvalTask = slnOrProject switch
|
||||
{
|
||||
SharpIdeSolutionModel solutionModel => (Task)Task.WhenAll(solutionModel.AllProjects.Select(s => s.MsBuildEvaluationProjectTask)),
|
||||
SharpIdeProjectModel projectModel => (Task)projectModel.MsBuildEvaluationProjectTask,
|
||||
_ => throw new InvalidOperationException("Unknown solution or project type")
|
||||
};
|
||||
await msbuildEvalTask;
|
||||
var projects = slnOrProject switch
|
||||
{
|
||||
SharpIdeSolutionModel solutionModel => solutionModel.AllProjects.ToList(),
|
||||
SharpIdeProjectModel projectModel => [projectModel],
|
||||
_ => throw new InvalidOperationException("Unknown solution or project type")
|
||||
};
|
||||
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects(projects);
|
||||
var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(slnOrProject.DirectoryPath, installedPackages);
|
||||
var scenes = idePackageResult.Select(s =>
|
||||
{
|
||||
var scene = _packageEntryScene.Instantiate<PackageEntry>();
|
||||
@@ -143,7 +154,7 @@ public partial class NugetPanel : Control
|
||||
scene.PackageSelected += OnPackageSelected;
|
||||
return scene;
|
||||
}).ToList();
|
||||
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.ProjectPackageReferences.Any(x => x.IsTransitive)).ToList();
|
||||
var transitiveScenes = scenes.Where(s => s.PackageResult.InstalledNugetPackageInfo!.IsPrimarilyTransitive).ToList();
|
||||
var directScenes = scenes.Except(transitiveScenes).ToList();
|
||||
await this.InvokeAsync(() =>
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ public partial class PackageEntry : MarginContainer
|
||||
if (PackageResult is null) return;
|
||||
_packageNameLabel.Text = PackageResult.PackageId;
|
||||
var installedPackagedInfo = PackageResult.InstalledNugetPackageInfo;
|
||||
if (installedPackagedInfo?.IsTransitive is true && installedPackagedInfo.ProjectPackageReferences.Any(p => p.DependentPackages?.Count is not 0) is true)
|
||||
if (installedPackagedInfo?.IsPrimarilyTransitive is true && installedPackagedInfo.ProjectPackageReferences.Any(p => p.DependentPackages?.Count is not 0) is true)
|
||||
{
|
||||
var transitiveOriginsGroupedByVersion = installedPackagedInfo.ProjectPackageReferences.SelectMany(s => s.DependentPackages ?? [])
|
||||
.GroupBy(t => t.RequestedVersion)
|
||||
@@ -103,7 +103,7 @@ public partial class PackageEntry : MarginContainer
|
||||
.Select(p => p.InstalledVersion.ToNormalizedString())
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var text = packageInfo.IsTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions);
|
||||
var text = packageInfo.IsPrimarilyTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions);
|
||||
return text;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user