private BuildRequestCollection GenerateRequests(string[] serverItems, TriggerCollection triggers) { #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation("Generating build requests."); } #line default #endregion BuildRequestCollection requests = new BuildRequestCollection(); foreach (string serverItem in serverItems) { foreach (Trigger trigger in triggers) { if (trigger.Evaluate(serverItem)) { BuildRequest request = new BuildRequest(); request.TeamProject = trigger.TeamProject; request.BuildType = trigger.BuildType; request.BuildMachine = trigger.BuildMachine; if (!requests.Contains(request)) { requests.Add(request); } } } } #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation( "Generated '{0}' build requests.", requests.Count); } #line default #endregion return(requests); }
private TriggerCollection FetchAllTriggers() { #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation("Fetching trigger files from version control."); } #line default #endregion VersionControlServer versionControl = this.GetService <VersionControlServer>(); TeamProject[] projects = versionControl.GetAllTeamProjects(true); TriggerCollection allTriggers = new TriggerCollection(); foreach (TeamProject project in projects) { TriggerCollection projectTriggers = this.FetchTriggersForTeamProject(project, versionControl); allTriggers.AddRange(projectTriggers); } #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceInfo) { Trace.TraceInformation( "Fetched '{0}' from '{0}' team projects.", allTriggers.Count, projects.Length ); } #line default #endregion return(allTriggers); }
private void RunBuilds(int originalChangesetId, int currentChangesetId) { #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation( "Running builds for server items referenced in changesets '{0}' to '{1}'.", originalChangesetId + 1, currentChangesetId ); } #line default #endregion string[] serverItems = this.EnumerateServerItems(originalChangesetId, currentChangesetId); TriggerCollection triggers = this.FetchAllTriggers(); BuildRequestCollection requests = this.GenerateRequests(serverItems, triggers); foreach (BuildRequest request in requests) { this.ProcessBuildRequest(request); } }
private TriggerCollection FetchTriggersForTeamProject(TeamProject project, VersionControlServer versionControl) { #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation( "Fetching trigger file for team project '{0}'.", project.Name ); } #line default #endregion TriggerCollection triggers = new TriggerCollection(); try { string tempFile = Path.GetTempFileName(); string serverPath = string.Format("{0}/TeamBuildTypes/ContinuousIntegrator.xml", project.ServerItem); versionControl.DownloadFile(serverPath, tempFile); #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation( "Downloaded trigger file from '{0}' to '{1}'.", serverPath, tempFile ); } #line default #endregion using (FileStream stream = new FileStream(tempFile, FileMode.Open)) { XmlSerializer serializer = new XmlSerializer(typeof(TriggerCollection)); triggers = (TriggerCollection)serializer.Deserialize(stream); } foreach (Trigger trigger in triggers) { trigger.TeamProject = project.Name; } File.Delete(tempFile); } catch (Exception ex) { #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceWarning) { Trace.TraceWarning( "Could not download trigger file for the team project '{0}':\n{1}", project.Name, ex ); } #line default #endregion } #region Tracing #line hidden if (ChangesetWatcher.m_TraceSwitch.TraceVerbose) { Trace.TraceInformation( "The '{0}' team project has '{1}' continuous integration triggers defined.", project.Name, triggers.Count ); } #line default #endregion return(triggers); }