private ObservableCollection <NuGetProjectUpgradeDependencyItem> GetUpgradeDependencyItems() { var upgradeDependencyItems = PackageGraphAnalysisUtilities.GetPackagesWithDependants(PackageDependencyInfos).Select(e => new NuGetProjectUpgradeDependencyItem(e.Identity, e)); var folderNuGetProject = Project.FolderNuGetProject; foreach (var package in upgradeDependencyItems) { InitPackageUpgradeIssues(folderNuGetProject, package); } return(new ObservableCollection <NuGetProjectUpgradeDependencyItem>(upgradeDependencyItems)); }
public static async Task <NuGetProjectUpgradeWindowModel> CreateAsync( IServiceBroker serviceBroker, IProjectContextInfo project, IList <PackageDependencyInfo> packageDependencyInfos, CancellationToken cancellationToken) { Assumes.NotNull(project); Assumes.NotNull(packageDependencyInfos); cancellationToken.ThrowIfCancellationRequested(); string projectName = await project.GetUniqueNameOrNameAsync(serviceBroker, CancellationToken.None); string title = string.Format(CultureInfo.CurrentCulture, Resources.WindowTitle_NuGetMigrator, projectName); var notFoundPackages = new HashSet <PackageIdentity>(); var hasIssues = false; IEnumerable <NuGetProjectUpgradeDependencyItem> dependencyItems = PackageGraphAnalysisUtilities.GetPackagesWithDependants(packageDependencyInfos) .Select(e => new NuGetProjectUpgradeDependencyItem(e.Identity, e)); foreach (NuGetProjectUpgradeDependencyItem dependencyItem in dependencyItems) { (bool _, string packagePath) = await project.TryGetInstalledPackageFilePathAsync( serviceBroker, dependencyItem.Identity, cancellationToken); InitPackageUpgradeIssues(packagePath, dependencyItem, notFoundPackages, ref hasIssues); } var upgradeDependencyItems = new ObservableCollection <NuGetProjectUpgradeDependencyItem>(dependencyItems); return(new NuGetProjectUpgradeWindowModel( title, upgradeDependencyItems, notFoundPackages, hasIssues)); }
public void PackageGraphAnalysisUtilities_GetPackagesWithDependants_Succeeds() { // Set up var packageIdentityA100 = new PackageIdentity("a", NuGetVersion.Parse("1.0.0")); var packageIdentityB100 = new PackageIdentity("b", NuGetVersion.Parse("1.0.0")); var packageIdentityC100 = new PackageIdentity("c", NuGetVersion.Parse("1.0.0")); var packageIdentityC110 = new PackageIdentity("c", NuGetVersion.Parse("1.1.0")); var packageIdentityD100 = new PackageIdentity("d", NuGetVersion.Parse("1.0.0")); var packageDependencyInfos = new List <PackageDependencyInfo>(); var packageDependencyInfoA = new PackageDependencyInfo(packageIdentityA100, new PackageDependency[] { new PackageDependency(packageIdentityB100.Id, VersionRange.Parse(packageIdentityB100.Version.OriginalVersion)), new PackageDependency(packageIdentityC100.Id, VersionRange.Parse(packageIdentityC100.Version.OriginalVersion)), }); var packageDependencyInfoB = new PackageDependencyInfo(packageIdentityB100, new PackageDependency[] { new PackageDependency(packageIdentityD100.Id, VersionRange.Parse(packageIdentityD100.Version.OriginalVersion)), }); var packageDependencyInfoC = new PackageDependencyInfo(packageIdentityC110, Enumerable.Empty <PackageDependency>()); var packageDependencyInfoD = new PackageDependencyInfo(packageIdentityD100, Enumerable.Empty <PackageDependency>()); packageDependencyInfos.Add(packageDependencyInfoA); packageDependencyInfos.Add(packageDependencyInfoB); packageDependencyInfos.Add(packageDependencyInfoC); packageDependencyInfos.Add(packageDependencyInfoD); // Act var packageWithDependants = PackageGraphAnalysisUtilities.GetPackagesWithDependants(packageDependencyInfos); // Assert foreach (var package in packageWithDependants) { switch (package.Identity.Id) { case "a": { Assert.Equal(0, package.DependantPackages.Count); Assert.True(package.IsTopLevelPackage); break; } case "b": { Assert.Equal(1, package.DependantPackages.Count); Assert.Equal(packageIdentityA100.Id, package.DependantPackages.Single().Id); Assert.False(package.IsTopLevelPackage); break; } case "c": { Assert.Equal(0, package.DependantPackages.Count); Assert.True(package.IsTopLevelPackage); break; } case "d": { Assert.Equal(1, package.DependantPackages.Count); Assert.Equal(packageIdentityB100.Id, package.DependantPackages.Single().Id); Assert.False(package.IsTopLevelPackage); break; } default: { Assert.True(false, $"Unexpected package {package.Identity}"); break; } } } }
public async Task PackageGraphAnalysisUtilities_GetDependencyInfoForPackageIdentitiesAsync_SucceedsAsync() { using (var pathContext = new SimpleTestPathContext()) { // Set up packages var packageA100 = new SimpleTestPackageContext("a", "1.0.0"); var packageB100 = new SimpleTestPackageContext("b", "1.0.0"); var packageC100 = new SimpleTestPackageContext("c", "1.0.0"); var packageC110 = new SimpleTestPackageContext("c", "1.1.0"); var packageD100 = new SimpleTestPackageContext("d", "1.0.0"); // Set up dependency relationships packageA100.Dependencies.Add(packageB100); packageA100.Dependencies.Add(packageC100); packageB100.Dependencies.Add(packageD100); // Create the packages await SimpleTestPackageUtility.CreatePackagesAsync(pathContext.PackageSource, packageA100, packageB100, packageC100, packageC110, packageD100); var sourceReposistory = Factory.GetCoreV3(pathContext.PackageSource); var installedList = new PackageIdentity[] { new PackageIdentity("a", NuGetVersion.Parse("1.0.0")), new PackageIdentity("b", NuGetVersion.Parse("1.0.0")), new PackageIdentity("c", NuGetVersion.Parse("1.1.0")), new PackageIdentity("d", NuGetVersion.Parse("1.0.0")), }; // Act var packageDependencyInfos = await PackageGraphAnalysisUtilities.GetDependencyInfoForPackageIdentitiesAsync( packageIdentities : installedList, nuGetFramework : CommonFrameworks.Net45, dependencyInfoResource : await sourceReposistory.GetResourceAsync <DependencyInfoResource>(), sourceCacheContext : new SourceCacheContext(), includeUnresolved : true, logger : NullLogger.Instance, cancellationToken : CancellationToken.None ); // Assert foreach (var package in packageDependencyInfos) { switch (package.Id) { case "a": { Assert.Equal(2, package.Dependencies.Count()); Assert.True(package.Dependencies.Any(e => e.Id == packageB100.Id && e.VersionRange.MinVersion.Equals(NuGetVersion.Parse(packageB100.Version)))); Assert.True(package.Dependencies.Any(e => e.Id == packageC100.Id && e.VersionRange.MinVersion.Equals(NuGetVersion.Parse(packageC100.Version)))); break; } case "b": { Assert.Equal(1, package.Dependencies.Count()); Assert.True(package.Dependencies.Any(e => e.Id == packageD100.Id && e.VersionRange.MinVersion.Equals(NuGetVersion.Parse(packageD100.Version)))); break; } case "c": { Assert.Equal(0, package.Dependencies.Count()); break; } case "d": { Assert.Equal(0, package.Dependencies.Count()); break; } default: { Assert.True(false, $"Unexpected package {package.Id}"); break; } } } } }