private void EmitProject(string eventType, DotNetProjectInfo information) { _emitter.Emit( eventType, new ProjectInformationResponse() { { "DotNetProject", information } }); }
public void Update(string projectDirectory, IEnumerable <ProjectContext> contexts, Action <ProjectId, ProjectContext> addAction, Action <ProjectId> removeAction) { _logger.LogDebug($"Updating project ${projectDirectory}"); var entry = GetOrAddEntry(projectDirectory, out bool added); // remove frameworks which don't exist after update var remove = entry.Frameworks.Except(contexts.Select(c => c.TargetFramework)); foreach (var each in remove) { var toRemove = entry.Get(each); removeAction(toRemove.Id); entry.Remove(each); } foreach (var context in contexts) { _logger.LogDebug($" For context {context.TargetFramework}"); ProjectState currentState = entry.Get(context.TargetFramework); if (currentState != null) { _logger.LogDebug($" Update exsiting {nameof(ProjectState)}."); currentState.ProjectContext = context; } else { _logger.LogDebug($" Add new {nameof(ProjectState)}."); var projectId = ProjectId.CreateNewId(); entry.Set(new ProjectState(projectId, context)); addAction(projectId, context); } } var projectInformation = new DotNetProjectInfo(entry); if (added) { EmitProject(EventTypes.ProjectChanged, projectInformation); } else { EmitProject(EventTypes.ProjectAdded, projectInformation); } }
/// <summary> /// Remove projects not in the give project set and execute the <paramref name="removeAction"/> on the removed project id. /// </summary> /// <param name="perservedProjects">Projects to perserve</param> /// <param name="removeAction"></param> public void RemoveExcept(IEnumerable <string> perservedProjects, Action <ProjectEntry> removeAction) { var removeList = new HashSet <string>(_projects.Keys, StringComparer.OrdinalIgnoreCase); removeList.ExceptWith(perservedProjects); foreach (var key in removeList) { var entry = _projects[key]; var projectInformation = new DotNetProjectInfo(entry); EmitProject(EventTypes.ProjectRemoved, projectInformation); removeAction(entry); _projects.Remove(key); } }
private void FillProjectDependencies(DotNetProjectInfo project) { var projectNode = XElement.Load(project.CsProjPath); var referenceNodes = projectNode.Descendants("ItemGroup").Descendants("ProjectReference"); foreach (var referenceNode in referenceNodes) { if (referenceNode.Attribute("Include") == null) { continue; } var relativePath = referenceNode.Attribute("Include").Value; var file = new FileInfo(project.CsProjPath); var referenceProjectInfo = new FileInfo(Path.Combine(file.Directory.FullName, relativePath)); var referenceProject = new DotNetProjectInfo(project.RepositoryName, referenceProjectInfo.FullName, false); project.Dependencies.Add(referenceProject); } }
private void BuildInternal(DotNetProjectInfo project, string arguments, ConcurrentBag <string> builtProjects) { var buildArguments = arguments.TrimStart('"').TrimEnd('"'); Console.WriteLine("Executing...: dotnet build " + project.CsProjPath + " " + buildArguments); var output = CmdHelper.RunCmdAndGetOutput( "dotnet build " + project.CsProjPath + " " + buildArguments, out int buildStatus ); if (buildStatus == 0) { builtProjects.Add(project.CsProjPath); WriteOutput(output, ConsoleColor.Green); } else { WriteOutput(output, ConsoleColor.Red); Console.WriteLine("Build failed for :" + project.CsProjPath); throw new Exception("Build failed!"); } }
private void SortByDependenciesVisit( List <DotNetProjectInfo> source, DotNetProjectInfo item, List <DotNetProjectInfo> sorted, Dictionary <DotNetProjectInfo, bool> visited) { bool inProcess; var alreadyVisited = visited.TryGetValue(item, out inProcess); if (alreadyVisited) { if (inProcess) { throw new ArgumentException("Cyclic dependency found! Item: " + item); } } else { visited[item] = true; var dependencies = item.Dependencies; if (dependencies != null) { foreach (var dependency in dependencies) { var dependencyItem = source.FirstOrDefault(e => e.CsProjPath == dependency.CsProjPath); if (dependencyItem != null) { SortByDependenciesVisit(source, dependencyItem, sorted, visited); } } } visited[item] = false; sorted.Add(item); } }
public static bool IsMarkedForBuild(this List <DotNetProjectInfo> projects, DotNetProjectInfo project) { return(projects.IsMarkedForBuild(project.RepositoryName, project.CsProjPath)); }
public static void MarkForBuild(this List <DotNetProjectInfo> projects, DotNetProjectInfo project) { projects.MarkForBuild(project.RepositoryName, project.CsProjPath); }