public void TestUninstallResolverSimpleFail() { // Act Exception exception = null; try { var result = UninstallResolver.GetPackagesToBeUninstalled(E1, PackageDependencyInfo1, InstalledPackages1, new UninstallationContext(removeDependencies: true)).ToList(); } catch (InvalidOperationException ex) { exception = ex; } catch (AggregateException ex) { exception = ExceptionUtility.Unwrap(ex); } // Assert Assert.NotNull(exception); Assert.True(exception is InvalidOperationException); Assert.Equal("Unable to uninstall 'E.1.0.0' because 'C.1.0.0' depends on it.", exception.Message); }
public void DiamondDependencyUninstall() { // Act var result = UninstallResolver.GetPackagesToBeUninstalled(A1, DiamondDependencyInfo, DiamondDependencyInstalledPackages, new UninstallationContext(removeDependencies: true)).ToList(); // Assert Assert.Equal(4, result.Count); Assert.True(result[0].Equals(A1)); Assert.True(result[1].Equals(B1)); Assert.True(result[2].Equals(C1)); Assert.True(result[3].Equals(D1)); }
public void TestUninstallResolverSimplePass() { // Act var result = UninstallResolver.GetPackagesToBeUninstalled(A1, PackageDependencyInfo1, InstalledPackages1, new UninstallationContext(removeDependencies: true)).ToList(); // Assert Assert.Equal(5, result.Count); Assert.True(result[0].Equals(A1)); Assert.True(result[1].Equals(B1)); Assert.True(result[2].Equals(C1)); Assert.True(result[3].Equals(D1)); Assert.True(result[4].Equals(E1)); }
public void TestUninstallResolverDependenciesDict() { IDictionary <PackageIdentity, HashSet <PackageIdentity> > dependenciesDict; var dependentsDict = UninstallResolver.GetPackageDependents(PackageDependencyInfo1, InstalledPackages1, out dependenciesDict); var keysList = dependenciesDict.Keys.ToList(); var valuesList = dependenciesDict.Values.ToList(); Assert.Equal(2, dependenciesDict.Count); Assert.Equal(A1, keysList[0]); Assert.True(valuesList[0].Contains(B1)); Assert.True(valuesList[0].Contains(C1)); Assert.Equal(C1, keysList[1]); Assert.True(valuesList[1].Contains(D1)); Assert.True(valuesList[1].Contains(E1)); }
private async Task <ICollection <PackageIdentity> > GetPackagesCanBeUninstalledAsync( IEnumerable <SourcePackageDependencyInfo> markedForUninstall, IEnumerable <PackageIdentity> installedPackages) { IDictionary <PackageIdentity, HashSet <PackageIdentity> > dependenciesDictionary; var dependentsDictionary = UninstallResolver.GetPackageDependents(markedForUninstall, installedPackages, out dependenciesDictionary); //exclude packages which should not be removed, because of dependent packages HashSet <PackageIdentity> shouldBeExcludedSet = new HashSet <PackageIdentity>(); foreach (var identity in dependenciesDictionary) { var markedOnUninstallDependency = identity.Key; HashSet <PackageIdentity> dependents; if (dependentsDictionary.TryGetValue(markedOnUninstallDependency, out dependents) && dependents is not null) { var externalDependants = dependents.Where(x => !dependenciesDictionary.ContainsKey(x)).ToList(); if (externalDependants.Count > 0) { _nugetLogger.LogInformation($"{identity} package skipped, because one or more installed packages depends on it"); } externalDependants.ForEach(d => shouldBeExcludedSet.Add(d)); } } var markedForUninstallList = markedForUninstall.OfType <PackageIdentity>().ToList(); foreach (var excludedDependency in shouldBeExcludedSet) { markedForUninstallList.Remove(excludedDependency); } return(markedForUninstallList); }