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;
|
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 IdePackageResult(string PackageId, List<IdePackageFromSourceResult> PackageFromSources, InstalledNugetPackageInfo? InstalledNugetPackageInfo);
|
||||||
public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source);
|
public record struct IdePackageFromSourceResult(IPackageSearchMetadata PackageSearchMetadata, PackageSource Source);
|
||||||
public class NugetClientService
|
public class NugetClientService
|
||||||
@@ -118,8 +118,8 @@ public class NugetClientService
|
|||||||
var packagesResult = new List<IdePackageResult>();
|
var packagesResult = new List<IdePackageResult>();
|
||||||
foreach (var installedPackage in installedPackages)
|
foreach (var installedPackage in installedPackages)
|
||||||
{
|
{
|
||||||
var isTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive);
|
var isPrimarilyTransitive = installedPackage.ProjectPackageReferences.Any(p => p.IsTransitive is false) is false;
|
||||||
var installedNugetPackageInfo = new InstalledNugetPackageInfo(isTransitive, installedPackage.ProjectPackageReferences);
|
var installedNugetPackageInfo = new InstalledNugetPackageInfo(isPrimarilyTransitive, installedPackage.ProjectPackageReferences);
|
||||||
var idePackageResult = new IdePackageResult(installedPackage.Name, [], installedNugetPackageInfo);
|
var idePackageResult = new IdePackageResult(installedPackage.Name, [], installedNugetPackageInfo);
|
||||||
|
|
||||||
foreach (var source in packageSources)
|
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");
|
if (_solution is null) throw new InvalidOperationException("Solution is null but should not be");
|
||||||
_ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject));
|
_ = Task.GodotRun(() => SetSolutionOrProjectNameLabels(slnOrProject));
|
||||||
_ = Task.GodotRun(() => SetDetailsProjects(slnOrProject));
|
_ = Task.GodotRun(() => SetDetailsProjects(slnOrProject));
|
||||||
|
_ = Task.GodotRun(() => PopulateInstalledPackages(slnOrProject));
|
||||||
_ = Task.GodotRun(PopulateSearchResults);
|
_ = 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");
|
var msbuildEvalTask = slnOrProject switch
|
||||||
await project.MsBuildEvaluationProjectTask;
|
{
|
||||||
var installedPackages = await ProjectEvaluation.GetPackageReferencesForProjects([project]);
|
SharpIdeSolutionModel solutionModel => (Task)Task.WhenAll(solutionModel.AllProjects.Select(s => s.MsBuildEvaluationProjectTask)),
|
||||||
var idePackageResult = await _nugetClientService.GetPackagesForInstalledPackages(project.ChildNodeBasePath, installedPackages);
|
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 scenes = idePackageResult.Select(s =>
|
||||||
{
|
{
|
||||||
var scene = _packageEntryScene.Instantiate<PackageEntry>();
|
var scene = _packageEntryScene.Instantiate<PackageEntry>();
|
||||||
@@ -143,7 +154,7 @@ public partial class NugetPanel : Control
|
|||||||
scene.PackageSelected += OnPackageSelected;
|
scene.PackageSelected += OnPackageSelected;
|
||||||
return scene;
|
return scene;
|
||||||
}).ToList();
|
}).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();
|
var directScenes = scenes.Except(transitiveScenes).ToList();
|
||||||
await this.InvokeAsync(() =>
|
await this.InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public partial class PackageEntry : MarginContainer
|
|||||||
if (PackageResult is null) return;
|
if (PackageResult is null) return;
|
||||||
_packageNameLabel.Text = PackageResult.PackageId;
|
_packageNameLabel.Text = PackageResult.PackageId;
|
||||||
var installedPackagedInfo = PackageResult.InstalledNugetPackageInfo;
|
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 ?? [])
|
var transitiveOriginsGroupedByVersion = installedPackagedInfo.ProjectPackageReferences.SelectMany(s => s.DependentPackages ?? [])
|
||||||
.GroupBy(t => t.RequestedVersion)
|
.GroupBy(t => t.RequestedVersion)
|
||||||
@@ -103,7 +103,7 @@ public partial class PackageEntry : MarginContainer
|
|||||||
.Select(p => p.InstalledVersion.ToNormalizedString())
|
.Select(p => p.InstalledVersion.ToNormalizedString())
|
||||||
.Distinct()
|
.Distinct()
|
||||||
.ToList();
|
.ToList();
|
||||||
var text = packageInfo.IsTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions);
|
var text = packageInfo.IsPrimarilyTransitive ? $"({string.Join(", ", versions)})" : string.Join(", ", versions);
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user