public void AddAll(ProjectConfigSet configs) { foreach (var config in configs) { GetOrAdd(config, configs); } }
private static async Task Build( string packagePath, bool verbose, bool allowParallel, int?maxConcurrency) { var configs = new ProjectConfigSet(); configs.Load(packagePath); var projectSet = new ProjectSet(); projectSet.AddAll(configs); var taskScheduler = NewTaskScheduler( allowParallel, maxConcurrency); await projectSet.Build(taskScheduler, verbose); }
private Project GetOrAdd(ProjectConfig config, ProjectConfigSet configs) { var projectDir = Path.GetDirectoryName(config.FullPath); if (projects.TryGetValue(projectDir, out var existingProject)) { return(existingProject); } // Add a placeholder to prevent cycles projects.Add(projectDir, null); var dependencies = config.Dependencies.Select(d => { var dependencyConfig = configs.AtPath(d.Value.Path); var dependencyProject = GetOrAdd(dependencyConfig, configs); return(new ProjectReference(d.Key, dependencyProject, d.Value.Trusted)); }).ToList(); var project = new Project(config, dependencies); projects[projectDir] = project; return(project); }
private Project GetOrAdd(ProjectConfig config, ProjectConfigSet configs) { var projectDir = Path.GetDirectoryName(config.FullPath) ?? throw new InvalidOperationException("Null directory name"); if (projects.TryGetValue(projectDir, out var existingProject)) { return(existingProject); } // Add a placeholder to prevent cycles (safe because we will replace it below projects.Add(projectDir, null !); var dependencies = config.Dependencies.Select(d => { var(name, config) = d; var dependencyConfig = configs[name]; var dependencyProject = GetOrAdd(dependencyConfig, configs); return(new ProjectReference(name, dependencyProject, config?.Trusted ?? throw new InvalidOperationException())); }).ToList(); var project = new Project(config, dependencies); projects[projectDir] = project; return(project); }