Exemple #1
0
        private IEnumerable <PackageOperation> ResolveOperationsToUpdateSolutionLevelPackage(Operation operation)
        {
            var repo         = _virtualPackageRepos[operation.ProjectManager.PackageManager];
            var updateWalker = new UpdateWalker(
                repo,
                operation.ProjectManager.PackageManager.DependencyResolver,
                new DependentsWalker(repo, targetFramework: null)
            {
                DependencyVersion = DependencyVersion
            },
                constraintProvider: NullConstraintProvider.Instance,
                targetFramework: null,
                logger: Logger ?? NullLogger.Instance,
                updateDependencies: !IgnoreDependencies,
                allowPrereleaseVersions: AllowPrereleaseVersions)
            {
                AcceptedTargets   = PackageTargets.All,
                DependencyVersion = DependencyVersion
            };

            var operations = updateWalker.ResolveOperations(operation.Package);

            // we're updating solution level packages, so all target should be
            // set to PackagesFolder.
            foreach (var op in operations)
            {
                op.Target = PackageOperationTarget.PackagesFolder;
            }

            return(operations);
        }
Exemple #2
0
        private IEnumerable <PackageOperation> ResolveOperationsToInstallProjectLevelPackage(Operation operation)
        {
            var projectRepo      = _virtualProjectRepos[operation.ProjectManager];
            var dependentsWalker = new DependentsWalker(
                operation.ProjectManager.PackageManager.LocalRepository,
                operation.ProjectManager.GetTargetFrameworkForPackage(operation.Package.Id))
            {
                DependencyVersion = DependencyVersion
            };
            var updateWalker = new UpdateWalker(
                projectRepo,
                operation.ProjectManager.PackageManager.DependencyResolver,
                dependentsWalker,
                operation.ProjectManager.ConstraintProvider,
                operation.ProjectManager.Project.TargetFramework,
                Logger ?? NullLogger.Instance,
                !IgnoreDependencies,
                AllowPrereleaseVersions)
            {
                AcceptedTargets   = PackageTargets.All,
                DependencyVersion = DependencyVersion
            };

            var operations = updateWalker.ResolveOperations(operation.Package);

            return(operations);
        }
Exemple #3
0
        private IEnumerable <PackageOperation> ResolveOperationsToInstallProjectLevelPackage(Operation operation)
        {
            DependentsWalker walker1 = new DependentsWalker(operation.ProjectManager.PackageManager.LocalRepository, operation.ProjectManager.GetTargetFrameworkForPackage(operation.Package.Id));

            walker1.DependencyVersion = this.DependencyVersion;
            DependentsWalker dependentsResolver = walker1;
            UpdateWalker     walker2            = new UpdateWalker(this._virtualProjectRepos[operation.ProjectManager], operation.ProjectManager.PackageManager.DependencyResolver, dependentsResolver, operation.ProjectManager.ConstraintProvider, operation.ProjectManager.Project.TargetFramework, this.Logger ?? NullLogger.Instance, !this.IgnoreDependencies, this.AllowPrereleaseVersions);

            walker2.AcceptedTargets   = PackageTargets.All;
            walker2.DependencyVersion = this.DependencyVersion;
            return(walker2.ResolveOperations(operation.Package));
        }
        protected void InstallPackage(
            IPackage package,
            FrameworkName targetFramework,
            bool ignoreDependencies,
            bool allowPrereleaseVersions)
        {
            var installerWalker = new UpdateWalker(
                LocalRepository,
                SourceRepository,
                new DependentsWalker(LocalRepository, targetFramework),
                NullConstraintProvider.Instance,
                targetFramework,
                Logger,
                !ignoreDependencies,
                allowPrereleaseVersions);

            Execute(package, installerWalker);
        }
Exemple #5
0
        private IEnumerable <PackageOperation> ResolveOperationsToUpdateSolutionLevelPackage(Operation operation)
        {
            VirtualRepository repository         = this._virtualPackageRepos[operation.ProjectManager.PackageManager];
            DependentsWalker  dependentsResolver = new DependentsWalker(repository, null);

            dependentsResolver.DependencyVersion = this.DependencyVersion;
            UpdateWalker walker2 = new UpdateWalker(repository, operation.ProjectManager.PackageManager.DependencyResolver, dependentsResolver, NullConstraintProvider.Instance, null, this.Logger ?? NullLogger.Instance, !this.IgnoreDependencies, this.AllowPrereleaseVersions);

            walker2.AcceptedTargets   = PackageTargets.All;
            walker2.DependencyVersion = this.DependencyVersion;
            IEnumerable <PackageOperation> enumerable = walker2.ResolveOperations(operation.Package);

            using (IEnumerator <PackageOperation> enumerator = enumerable.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    enumerator.Current.Target = PackageOperationTarget.PackagesFolder;
                }
            }
            return(enumerable);
        }
Exemple #6
0
        public void ProjectInstallWalkerIgnoresSolutionLevelPackages()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            IPackage projectPackage = PackageUtility.CreatePackage("A", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "[1.5]")
                                                                }, content: new[] { "content" });

            sourceRepository.AddPackage(projectPackage);

            IPackage toolsPackage = PackageUtility.CreatePackage("B", "1.5", tools: new[] { "init.ps1" });
            sourceRepository.AddPackage(toolsPackage);

            IPackageOperationResolver resolver = new UpdateWalker(localRepository,
                                                                   sourceRepository,
                                                                   new DependentsWalker(localRepository),
                                                                   NullConstraintProvider.Instance,
                                                                   NullLogger.Instance,
                                                                   updateDependencies: true,
                                                                   allowPrereleaseVersions: false) { AcceptedTargets = PackageTargets.Project };

            // Act
            var packages = resolver.ResolveOperations(projectPackage)
                                   .ToDictionary(p => p.Package.Id);

            // Assert            
            Assert.Equal(1, packages.Count);
            Assert.NotNull(packages["A"]);
        }
Exemple #7
0
        public void ResolveDependenciesForInstallSameDependencyAtDifferentLevelsInGraphDuringUpdate()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            // A1 -> B1, C1
            IPackage packageA = PackageUtility.CreatePackage("A", "1.0",
                                                            content: new[] { "A1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0"),
                                                                    PackageDependency.CreateDependency("C", "1.0")
                                                                });
            // B1
            IPackage packageB = PackageUtility.CreatePackage("B", "1.0", new[] { "B1" });

            // C1 -> B1, D1
            IPackage packageC = PackageUtility.CreatePackage("C", "1.0",
                                                            content: new[] { "C1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0"),
                                                                    PackageDependency.CreateDependency("D", "1.0")
                                                                });

            // D1 -> B1
            IPackage packageD = PackageUtility.CreatePackage("D", "1.0",
                                                            content: new[] { "A1" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "1.0")
                                                                });

            // A2 -> B2, C2
            IPackage packageA2 = PackageUtility.CreatePackage("A", "2.0",
                                                            content: new[] { "A2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0"),
                                                                    PackageDependency.CreateDependency("C", "2.0")
                                                                });
            // B2
            IPackage packageB2 = PackageUtility.CreatePackage("B", "2.0", new[] { "B2" });

            // C2 -> B2, D2
            IPackage packageC2 = PackageUtility.CreatePackage("C", "2.0",
                                                            content: new[] { "C2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0"),
                                                                    PackageDependency.CreateDependency("D", "2.0")
                                                                });

            // D2 -> B2
            IPackage packageD2 = PackageUtility.CreatePackage("D", "2.0",
                                                            content: new[] { "D2" },
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "2.0")
                                                                });


            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD);
            sourceRepository.AddPackage(packageA2);
            sourceRepository.AddPackage(packageB2);
            sourceRepository.AddPackage(packageC2);
            sourceRepository.AddPackage(packageD2);

            localRepository.AddPackage(packageA);
            localRepository.AddPackage(packageB);
            localRepository.AddPackage(packageC);
            localRepository.AddPackage(packageD);



            IPackageOperationResolver resolver = new UpdateWalker(localRepository,
                                                                          sourceRepository,
                                                                          new DependentsWalker(localRepository),
                                                                          NullConstraintProvider.Instance,
                                                                          NullLogger.Instance,
                                                                          updateDependencies: true,
                                                                          allowPrereleaseVersions: false);

            var operations = resolver.ResolveOperations(packageA2).ToList();
            Assert.Equal(8, operations.Count);
            AssertOperation("A", "1.0", PackageAction.Uninstall, operations[0]);
            AssertOperation("C", "1.0", PackageAction.Uninstall, operations[1]);
            AssertOperation("D", "1.0", PackageAction.Uninstall, operations[2]);
            AssertOperation("B", "1.0", PackageAction.Uninstall, operations[3]);
            AssertOperation("B", "2.0", PackageAction.Install, operations[4]);
            AssertOperation("D", "2.0", PackageAction.Install, operations[5]);
            AssertOperation("C", "2.0", PackageAction.Install, operations[6]);
            AssertOperation("A", "2.0", PackageAction.Install, operations[7]);
        }
Exemple #8
0
        public void ResolvingDependencyForUpdateWithConflictingDependents()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();

            // A 1.0 -> B [1.0]
            IPackage A10 = PackageUtility.CreatePackage("A", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("B", "[1.0]")
                                                                }, content: new[] { "a1" });

            // A 2.0 -> B (any version)
            IPackage A20 = PackageUtility.CreatePackage("A", "2.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    new PackageDependency("B")
                                                                }, content: new[] { "a2" });

            IPackage B10 = PackageUtility.CreatePackage("B", "1.0", content: new[] { "b1" });
            IPackage B101 = PackageUtility.CreatePackage("B", "1.0.1", content: new[] { "b101" });
            IPackage B20 = PackageUtility.CreatePackage("B", "2.0", content: new[] { "a2" });
            localRepository.Add(A10);
            localRepository.Add(B10);
            sourceRepository.AddPackage(A10);
            sourceRepository.AddPackage(A20);
            sourceRepository.AddPackage(B10);
            sourceRepository.AddPackage(B101);
            sourceRepository.AddPackage(B20);

            IPackageOperationResolver resolver = new UpdateWalker(localRepository,
                                                                  sourceRepository,
                                                                  new DependentsWalker(localRepository),
                                                                  NullConstraintProvider.Instance,
                                                                  NullLogger.Instance,
                                                                  updateDependencies: true,
                                                                  allowPrereleaseVersions: false) { AcceptedTargets = PackageTargets.Project };

            // Act
            var packages = resolver.ResolveOperations(B101).ToList();

            // Assert
            Assert.Equal(4, packages.Count);
            AssertOperation("A", "1.0", PackageAction.Uninstall, packages[0]);
            AssertOperation("B", "1.0", PackageAction.Uninstall, packages[1]);
            AssertOperation("A", "2.0", PackageAction.Install, packages[2]);
            AssertOperation("B", "1.0.1", PackageAction.Install, packages[3]);
        }
        public void ResolveDependenciesForInstallDiamondDependencyGraphWithDifferntVersionOfSamePackage()
        {
            // Arrange
            var localRepository = new MockPackageRepository();
            var sourceRepository = new MockPackageRepository();
            // A -> [B, C]
            // B -> [D >= 1, E >= 2]
            // C -> [D >= 2, E >= 1]
            //     A
            //   /   \
            //  B     C
            //  | \   | \
            //  D1 E2 D2 E1

            IPackage packageA = PackageUtility.CreateProjectLevelPackage("A", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    new PackageDependency("B"),
                                                                    new PackageDependency("C")
                                                                });


            IPackage packageB = PackageUtility.CreateProjectLevelPackage("B", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("D", "1.0"),
                                                                    PackageDependency.CreateDependency("E", "2.0")
                                                                });

            IPackage packageC = PackageUtility.CreateProjectLevelPackage("C", "1.0",
                                                            dependencies: new List<PackageDependency> {
                                                                    PackageDependency.CreateDependency("D", "2.0"),
                                                                    PackageDependency.CreateDependency("E", "1.0")
                                                                });

            IPackage packageD10 = PackageUtility.CreateProjectLevelPackage("D", "1.0");
            IPackage packageD20 = PackageUtility.CreateProjectLevelPackage("D", "2.0");
            IPackage packageE10 = PackageUtility.CreateProjectLevelPackage("E", "1.0");
            IPackage packageE20 = PackageUtility.CreateProjectLevelPackage("E", "2.0");

            sourceRepository.AddPackage(packageA);
            sourceRepository.AddPackage(packageB);
            sourceRepository.AddPackage(packageC);
            sourceRepository.AddPackage(packageD20);
            sourceRepository.AddPackage(packageD10);
            sourceRepository.AddPackage(packageE20);
            sourceRepository.AddPackage(packageE10);

            IPackageOperationResolver projectResolver = new UpdateWalker(localRepository,
                                                                                sourceRepository,
                                                                                new DependentsWalker(localRepository),
                                                                                NullConstraintProvider.Instance,
                                                                                NullLogger.Instance,
                                                                                updateDependencies: true,
                                                                                allowPrereleaseVersions: false);

            IPackageOperationResolver resolver = new InstallWalker(localRepository,
                                                                   sourceRepository,
                                                                   NullLogger.Instance,
                                                                   ignoreDependencies: false,
                                                                   allowPrereleaseVersions: false);

            // Act
            var operations = resolver.ResolveOperations(packageA).ToList();
            var projectOperations = resolver.ResolveOperations(packageA).ToList();

            // Assert
            Assert.Equal(5, operations.Count);
            Assert.Equal("E", operations[0].Package.Id);
            Assert.Equal(new SemanticVersion("2.0"), operations[0].Package.Version);
            Assert.Equal("B", operations[1].Package.Id);
            Assert.Equal("D", operations[2].Package.Id);
            Assert.Equal(new SemanticVersion("2.0"), operations[2].Package.Version);
            Assert.Equal("C", operations[3].Package.Id);
            Assert.Equal("A", operations[4].Package.Id);

            Assert.Equal(5, projectOperations.Count);
            Assert.Equal("E", projectOperations[0].Package.Id);
            Assert.Equal(new SemanticVersion("2.0"), projectOperations[0].Package.Version);
            Assert.Equal("B", projectOperations[1].Package.Id);
            Assert.Equal("D", projectOperations[2].Package.Id);
            Assert.Equal(new SemanticVersion("2.0"), projectOperations[2].Package.Version);
            Assert.Equal("C", projectOperations[3].Package.Id);
            Assert.Equal("A", projectOperations[4].Package.Id);
        }
Exemple #10
0
        private IEnumerable<PackageOperation> ResolveOperationsToUpdateSolutionLevelPackage(Operation operation)
        {
            var repo = _virtualPackageRepos[operation.ProjectManager.PackageManager];            
            var updateWalker = new UpdateWalker(
                repo,
                operation.ProjectManager.PackageManager.DependencyResolver,
                new DependentsWalker(repo, targetFramework: null)
                {
                    DependencyVersion = DependencyVersion
                },
                constraintProvider: NullConstraintProvider.Instance,
                targetFramework: null,
                logger: Logger ?? NullLogger.Instance,
                updateDependencies: !IgnoreDependencies,
                allowPrereleaseVersions: AllowPrereleaseVersions)
                {
                    AcceptedTargets = PackageTargets.All,
                    DependencyVersion = DependencyVersion
                };

            var operations = updateWalker.ResolveOperations(operation.Package);

            // we're updating solution level packages, so all target should be
            // set to PackagesFolder.
            foreach (var op in operations)
            {
                op.Target = PackageOperationTarget.PackagesFolder;
            }

            return operations;
        }
Exemple #11
0
        private IEnumerable<PackageOperation> ResolveOperationsToInstallProjectLevelPackage(Operation operation)
        {
            var projectRepo = _virtualProjectRepos[operation.ProjectManager];
            var dependentsWalker = new DependentsWalker(
                operation.ProjectManager.PackageManager.LocalRepository,
                operation.ProjectManager.GetTargetFrameworkForPackage(operation.Package.Id))
            {
                DependencyVersion = DependencyVersion
            };
            var updateWalker = new UpdateWalker(
                projectRepo,
                operation.ProjectManager.PackageManager.DependencyResolver,
                dependentsWalker,
                operation.ProjectManager.ConstraintProvider,
                operation.ProjectManager.Project.TargetFramework,
                Logger ?? NullLogger.Instance,
                !IgnoreDependencies,
                AllowPrereleaseVersions)
            {
                AcceptedTargets = PackageTargets.All,
                DependencyVersion = DependencyVersion
            };

            var operations = updateWalker.ResolveOperations(operation.Package);
            return operations;
        }