Beispiel #1
0
        private static IEnumerable <ProjectNugetsGrouping> ProjectUpgradeOrderFromDependency(
            IReadOnlyCollection <ProjectNugetsGrouping> allProjects,
            ProjectNugetsGrouping targetProject,
            ProjectNugetsGrouping currentProject,
            HashSet <string> doneProjects)
        {
            var allDependenciesAreDone = AllDependenciesAreDone(allProjects, targetProject, currentProject, doneProjects);

            if (allDependenciesAreDone && !doneProjects.Contains(currentProject.ProjectName))
            {
                doneProjects.Add(currentProject.ProjectName);

                yield return(currentProject);

                var dependents = ImmediateDependents(allProjects, currentProject);

                var dependentsOrder = dependents.SelectMany(dependent =>
                                                            ProjectUpgradeOrderFromDependency(allProjects, targetProject, dependent, doneProjects)
                                                            );

                foreach (var dependentProject in dependentsOrder)
                {
                    yield return(dependentProject);
                }
            }
        }
Beispiel #2
0
 private static IEnumerable <ProjectNugetsGrouping> ImmediateDependents(
     IEnumerable <ProjectNugetsGrouping> allProjects, ProjectNugetsGrouping currentProject
     ) =>
 allProjects.Where(project =>
                   project.Nugets.Any(nuget =>
                                      nuget.Name == currentProject.ProjectName
                                      )
                   );
Beispiel #3
0
        private static bool DependsOnTargetProject(
            IReadOnlyCollection <ProjectNugetsGrouping> allProjects,
            ProjectNugetsGrouping targetProject,
            ProjectNugetsGrouping currentProject)
        {
            var dependencies = ImmediateDependencies(allProjects, currentProject);

            return(dependencies.Any(dependency =>
                                    dependency.ProjectName == targetProject.ProjectName ||
                                    DependsOnTargetProject(allProjects, targetProject, dependency)
                                    ));
        }
Beispiel #4
0
        private static bool AllDependenciesAreDone(
            IReadOnlyCollection <ProjectNugetsGrouping> allProjects,
            ProjectNugetsGrouping targetProject,
            ProjectNugetsGrouping currentProject,
            IReadOnlyCollection <string> doneProjects)
        {
            var dependencies          = ImmediateDependencies(allProjects, currentProject);
            var remainingDependencies = dependencies.Where(dependency =>
                                                           !doneProjects.Contains(dependency.ProjectName) &&
                                                           DependsOnTargetProject(allProjects, targetProject, dependency)
                                                           );

            return(!remainingDependencies.Any());
        }
Beispiel #5
0
 public TestData(string name, string packagesConfigContent, ProjectNugetsGrouping expectedProjectNugetsGrouping)
 {
     Name = name;
     PackagesConfigContent         = packagesConfigContent;
     ExpectedProjectNugetsGrouping = expectedProjectNugetsGrouping;
 }