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); } } }
private static IEnumerable <ProjectNugetsGrouping> ImmediateDependents( IEnumerable <ProjectNugetsGrouping> allProjects, ProjectNugetsGrouping currentProject ) => allProjects.Where(project => project.Nugets.Any(nuget => nuget.Name == currentProject.ProjectName ) );
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) )); }
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()); }
public TestData(string name, string packagesConfigContent, ProjectNugetsGrouping expectedProjectNugetsGrouping) { Name = name; PackagesConfigContent = packagesConfigContent; ExpectedProjectNugetsGrouping = expectedProjectNugetsGrouping; }