Exemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BuildSummary"/> class.
 /// </summary>
 /// <param name="original">The original.</param>
 public BuildSummary(BuildSummary original)
 {
     this.Duration = original.Duration;
     this.Label = original.Label;
     this.StartTime = original.StartTime;
     this.Status = original.Status;
     this.LogName = original.LogName;
 }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BuildSummary"/> class.
 /// </summary>
 /// <param name="original">The original.</param>
 public BuildSummary(BuildSummary original)
 {
     this.Duration  = original.Duration;
     this.Label     = original.Label;
     this.StartTime = original.StartTime;
     this.Status    = original.Status;
     this.LogName   = original.LogName;
 }
Exemplo n.º 3
0
        private void writeSummary(IIntegrationResult r, string logDir, BuildSummary summary, Stopwatch timer, SystemIoFileSystem fileSystem, XmlSerializer serialiser)
        {
            if (r == null) return;

            var path = Path.ChangeExtension(Path.Combine(logDir, new LogFile(r).Filename), "summary");
            timer.Stop();
            summary.Duration = timer.ElapsedMilliseconds;
            summary.Status = r.Status;
            summary.LogName = new LogFile(r).Filename;
            fileSystem.EnsureFolderExists(path);
            using (var output = fileSystem.OpenOutputStream(path))
            {
                serialiser.Serialize(output, summary);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Integrates the specified request.	
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        /// <remarks></remarks>
        public IIntegrationResult Integrate(IntegrationRequest request)
        {
            Log.Trace("Integrating {0}", Name);
            IIntegrationResult result = null;

            lock (currentProjectStatus)
            {
                // Build up all the child items
                // Note: this will only build up the direct children, it doesn't handle below the initial layer
                currentProjectItems.Clear();
                sourceControlOperations.Clear();
                currentProjectStatus.Status = ItemBuildStatus.Running;
                currentProjectStatus.ChildItems.Clear();
                currentProjectStatus.TimeCompleted = null;
                currentProjectStatus.TimeOfEstimatedCompletion = null;
                currentProjectStatus.TimeStarted = DateTime.Now;
                GenerateSourceControlOperation(SourceControlOperation.CheckForModifications);
                GenerateTaskStatuses("Pre-build tasks", PrebuildTasks);
                GenerateSourceControlOperation(SourceControlOperation.GetSource);
                GenerateTaskStatuses("Build tasks", Tasks);
                GenerateTaskStatuses("Publisher tasks", Publishers);
            }

            // Start the integration
            IDisposable impersonation = null;
            var hasError = false;
            var timer = new Stopwatch();
            timer.Start();
            var summary = new BuildSummary
                              {
                                  StartTime = DateTime.Now
                              };
            var logDirectory = this.GetLogDirectory();
            var fileSystem = new SystemIoFileSystem();
            var serialiser = new XmlSerializer(typeof(BuildSummary));
            //Action<IIntegrationResult> writeSummary =
            //    r =>
            //    {
            //        var path = Path.ChangeExtension(Path.Combine(logDirectory, new LogFile(r).Filename), "summary");
            //        timer.Stop();
            //        summary.Duration = timer.ElapsedMilliseconds;
            //        summary.Status = r.Status;
            //        summary.LogName = new LogFile(r).Filename;
            //        fileSystem.EnsureFolderExists(path);
            //        using (var output = fileSystem.OpenOutputStream(path))
            //        {
            //            serialiser.Serialize(output, summary);
            //        }
            //    };
            try
            {
                if (Impersonation != null) impersonation = Impersonation.Impersonate();
                var dynamicSourceControl = sourceControl as IParamatisedItem;
                if (dynamicSourceControl != null)
                {
                    dynamicSourceControl.ApplyParameters(request.BuildValues, parameters);
                }
                result = integratable.Integrate(request);
                summary.Label = result.Label;
                //writeSummary(result);
                writeSummary(result, logDirectory, summary, timer, fileSystem, serialiser);
            }
            catch (Exception error)
            {
                //writeSummary(result);
                writeSummary(result, logDirectory, summary, timer, fileSystem, serialiser);
                Log.Error(error);
                hasError = true;
                throw;
            }
            finally
            {
                if (impersonation != null) impersonation.Dispose();

                // Tidy up the status
                lock (currentProjectStatus)
                {
                    CancelAllOutstandingItems(currentProjectStatus);
                    currentProjectStatus.TimeCompleted = DateTime.Now;
                    IntegrationStatus resultStatus = result == null ?
                        (hasError ? IntegrationStatus.Exception : IntegrationStatus.Unknown) :
                        result.Status;
                    switch (resultStatus)
                    {
                        case IntegrationStatus.Success:
                            currentProjectStatus.Status = ItemBuildStatus.CompletedSuccess;
                            break;
                        case IntegrationStatus.Unknown:
                            // This probably means the build was cancelled (i.e. no changes detected)
                            currentProjectStatus.Status = ItemBuildStatus.Cancelled;
                            break;
                        default:
                            currentProjectStatus.Status = ItemBuildStatus.CompletedFailed;
                            break;
                    }
                }
            }

            // Store the project status so it can be used by other parts of the system
            if (this.DataStore != null)
            {
                this.DataStore.StoreProjectSnapshot(result, this.GenerateSnapshot());
            }

            // Finally, return the actual result
            return result;
        }
Exemplo n.º 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CCBuild"/> class.
 /// </summary>
 /// <param name="client">The client.</param>
 /// <param name="summary">The summary.</param>
 /// <param name="project">The project.</param>
 public CCBuild(CruiseServerClientBase client, BuildSummary summary, CCProject project)
     : base(summary)
 {
     this.client = client;
     this.Project = project;
 }