Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }