Include CLI tool references when calculating build dependency graph

This commit is contained in:
Pranav K 2017-04-03 23:06:56 -07:00
parent 71d09dc15c
commit acc454bc36
2 changed files with 23 additions and 17 deletions

View File

@ -14,8 +14,10 @@ namespace BuildGraph
public string Name { get; } public string Name { get; }
public string Path { get; set; }
public Repository Repository { get; set; } public Repository Repository { get; set; }
public IList<string> PackageReferences { get; set; } = Array.Empty<string>(); public ISet<string> PackageReferences { get; } = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
} }
} }

View File

@ -61,37 +61,41 @@ namespace BuildGraph
var srcDirectory = Path.Combine(repositoryPath, "src"); var srcDirectory = Path.Combine(repositoryPath, "src");
var solutionFiles = Directory.EnumerateFiles(repositoryPath, "*.sln"); var solutionFiles = Directory.EnumerateFiles(repositoryPath, "*.sln");
var knownProjects = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var file in solutionFiles) foreach (var file in solutionFiles)
{ {
var spec = provider.GetDependencyGraphSpec(name, file); var spec = provider.GetDependencyGraphSpec(name, file);
foreach (var specProject in spec.Projects) var projects = spec.Projects.OrderBy(p => p.RestoreMetadata.ProjectStyle == ProjectStyle.PackageReference ? 0 : 1);
foreach (var specProject in projects)
{ {
if (!knownProjects.Add(specProject.FilePath) ||
specProject.RestoreMetadata.ProjectStyle != ProjectStyle.PackageReference)
{
continue;
}
var projectPath = Path.GetFullPath(specProject.FilePath); var projectPath = Path.GetFullPath(specProject.FilePath);
var project = new Project(specProject.Name)
{
PackageReferences = GetPackageReferences(specProject),
Repository = repository,
};
var projectGroup = projectPath.StartsWith(srcDirectory, StringComparison.OrdinalIgnoreCase) ? var projectGroup = projectPath.StartsWith(srcDirectory, StringComparison.OrdinalIgnoreCase) ?
repository.Projects : repository.Projects :
repository.SupportProjects; repository.SupportProjects;
projectGroup.Add(project);
var project = projectGroup.FirstOrDefault(f => f.Path == specProject.FilePath);
if (project == null)
{
project = new Project(specProject.Name)
{
Repository = repository,
Path = specProject.FilePath,
};
projectGroup.Add(project);
}
foreach (var package in GetPackageReferences(specProject))
{
project.PackageReferences.Add(package);
}
} }
} }
return repository; return repository;
} }
private static List<string> GetPackageReferences(NuGet.ProjectModel.PackageSpec specProject) private static List<string> GetPackageReferences(PackageSpec specProject)
{ {
var allDependencies = Enumerable.Concat( var allDependencies = Enumerable.Concat(
specProject.Dependencies, specProject.Dependencies,