/// <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; }
/// <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; }
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); } }
/// <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; }
/// <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; }