From: <exo...@us...> - 2006-10-04 00:49:02
|
Revision: 2567 http://svn.sourceforge.net/ccnet/?rev=2567&view=rev Author: exortech Date: 2006-10-01 22:45:21 -0700 (Sun, 01 Oct 2006) Log Message: ----------- CCNET-747: all exceptions during build break the build deprecating PublishExceptions attribute Modified Paths: -------------- trunk/project/UnitTests/Core/IntegrationRunnerTest.cs trunk/project/UnitTests/Core/ProjectExceptionHandlingTest.cs trunk/project/UnitTests/Core/ProjectTest.cs trunk/project/UnitTests/Core/Tasks/MergeFileTaskTest.cs trunk/project/core/IIntegrationRunnerTarget.cs trunk/project/core/IntegrationRunner.cs trunk/project/core/Project.cs trunk/project/core/ProjectIntegrator.cs trunk/project/examples/VSSAndDevenvAndNUnitCCNet.config Modified: trunk/project/UnitTests/Core/IntegrationRunnerTest.cs =================================================================== --- trunk/project/UnitTests/Core/IntegrationRunnerTest.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/UnitTests/Core/IntegrationRunnerTest.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -69,10 +69,7 @@ { SetupPreambleExpections(); resultMock.ExpectAndReturn("ShouldRunBuild", false); - resultMock.Expect("MarkEndTime"); targetMock.Expect("Activity", ProjectActivity.Sleeping); - resultMock.ExpectAndReturn("Status", IntegrationStatus.Unknown); - resultMock.ExpectAndReturn("EndTime", endTime); IIntegrationResult returnedResult = runner.Integrate(request); @@ -94,23 +91,6 @@ Assert.AreEqual(result, returnedResult); mockery.Verify(); } - - [Test] - public void ShouldStillPublishResultsIfLabellingThrowsException() - { - SetupPreambleExpections(); - SetupShouldBuildExpectations(); - resultMock.ExpectAndReturn("Status", IntegrationStatus.Success); - resultMock.ExpectAndReturn("Status", IntegrationStatus.Success); - sourceControlMock.ExpectAndThrow("LabelSourceControl", new Exception(), result); - targetMock.Expect("PublishResults", result); - resultManagerMock.Expect("FinishIntegration"); - - IIntegrationResult returnedResult = runner.Integrate(request); - - Assert.AreEqual(result, returnedResult); - mockery.Verify(); - } [Test] public void ShouldStillPublishResultsIfPrebuildThrowsException() @@ -126,7 +106,8 @@ targetMock.Expect("Activity", ProjectActivity.Sleeping); resultMock.ExpectAndReturn("EndTime", endTime); resultMock.ExpectAndReturn("Status", IntegrationStatus.Exception); - targetMock.ExpectAndReturn("PublishExceptions", false); + targetMock.Expect("PublishResults", result); + resultManagerMock.Expect("FinishIntegration"); runner.Integrate(ModificationExistRequest()); mockery.Verify(); @@ -160,7 +141,6 @@ private void SetupBuildPassExpectations() { resultMock.ExpectAndReturn("Status", IntegrationStatus.Success); - resultMock.ExpectAndReturn("Status", IntegrationStatus.Success); sourceControlMock.Expect("LabelSourceControl", result); targetMock.Expect("PublishResults", result); resultManagerMock.Expect("FinishIntegration"); Modified: trunk/project/UnitTests/Core/ProjectExceptionHandlingTest.cs =================================================================== --- trunk/project/UnitTests/Core/ProjectExceptionHandlingTest.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/UnitTests/Core/ProjectExceptionHandlingTest.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -22,14 +22,35 @@ project.Name = "test"; project.SourceControl = (ISourceControl) mockSourceControl.MockInstance; project.StateManager = new StateManagerStub(); - project.Integrate(new IntegrationRequest(BuildCondition.ForceBuild, "test")); - Assert.AreEqual(IntegrationStatus.Exception, project.LatestBuildStatus); - Assert.AreEqual(IntegrationResult.InitialLabel, project.LastIntegrationResult.Label); + try { project.Integrate(new IntegrationRequest(BuildCondition.ForceBuild, "test"));} + catch (Exception) { } project.Integrate(new IntegrationRequest(BuildCondition.ForceBuild, "test")); Assert.AreEqual(IntegrationStatus.Success, project.LatestBuildStatus); Assert.AreEqual("1", project.LastIntegrationResult.Label); } + + [Test] + public void ShouldNotResetLabelIfGetModificationsThrowsException() + { + IMock mockSourceControl = new DynamicMock(typeof (ISourceControl)); + mockSourceControl.ExpectAndThrow("GetModifications", new Exception("doh!"), new IsAnything(), new IsAnything()); + mockSourceControl.ExpectAndReturn("GetModifications", new Modification[] {new Modification()}, new IsAnything(), new IsAnything()); + + StateManagerStub stateManagerStub = new StateManagerStub(); + stateManagerStub.SaveState(IntegrationResultMother.CreateSuccessful("10")); + + Project project = new Project(); + project.Name = "test"; + project.SourceControl = (ISourceControl) mockSourceControl.MockInstance; + project.StateManager = stateManagerStub; + try { project.Integrate(new IntegrationRequest(BuildCondition.ForceBuild, "test"));} + catch (Exception) { } + + project.Integrate(new IntegrationRequest(BuildCondition.ForceBuild, "test")); + Assert.AreEqual(IntegrationStatus.Success, project.LatestBuildStatus); + Assert.AreEqual("11", project.LastIntegrationResult.Label); + } } internal class StateManagerStub : IStateManager Modified: trunk/project/UnitTests/Core/ProjectTest.cs =================================================================== --- trunk/project/UnitTests/Core/ProjectTest.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/UnitTests/Core/ProjectTest.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -86,7 +86,7 @@ public void LoadFullySpecifiedProjectFromConfiguration() { string xml = @" -<project name=""foo"" webURL=""http://localhost/ccnet"" modificationDelaySeconds=""60"" publishExceptions=""true"" category=""category1""> +<project name=""foo"" webURL=""http://localhost/ccnet"" modificationDelaySeconds=""60"" category=""category1""> <workingDirectory>c:\my\working\directory</workingDirectory> <sourcecontrol type=""filesystem""> <repositoryRoot>C:\</repositoryRoot> @@ -117,7 +117,6 @@ Assert.AreEqual("http://localhost/ccnet", project.WebURL); Assert.AreEqual("category1", project.Category); Assert.AreEqual(60, project.ModificationDelaySeconds); - Assert.AreEqual(true, project.PublishExceptions); Assert.IsTrue(project.SourceControl is FileSourceControl); Assert.IsTrue(project.Labeller is DefaultLabeller); Assert.IsTrue(project.StateManager is FileStateManager); @@ -142,7 +141,6 @@ Assert.AreEqual("foo", project.Name); Assert.AreEqual(Project.DefaultUrl(), project.WebURL); Assert.AreEqual(0, project.ModificationDelaySeconds); //TODO: is this the correct default? should quiet period be turned off by default? is this sourcecontrol specific? - Assert.AreEqual(true, project.PublishExceptions); Assert.IsTrue(project.SourceControl is NullSourceControl); Assert.IsTrue(project.Labeller is DefaultLabeller); Assert.AreEqual(typeof(MultipleTrigger), project.Triggers.GetType()); @@ -389,7 +387,7 @@ AssertFalse("unexpected modifications were returned", result.HasModifications()); AssertEqualArrays(new Modification[0], result.Modifications); Assert.AreEqual(string.Empty, result.TaskOutput, "no output is expected as builder is not called"); - Assert.IsTrue(result.EndTime >= result.StartTime); +// Assert.IsTrue(result.EndTime >= result.StartTime); VerifyAll(); } @@ -420,36 +418,6 @@ VerifyAll(); } - [Test] - public void ShouldNotPublishIntegrationResultsIfPublishExceptionsIsFalseAndSourceControlThrowsAnException() - { - mockStateManager.ExpectAndReturn("LoadState", IntegrationResult.CreateInitialIntegrationResult(ProjectName, @"c:\temp"), ProjectName); // running the first integration (no state file) - CruiseControlException expectedException = new CruiseControlException(); - mockSourceControl.ExpectAndThrow("GetModifications", expectedException, new IsAnything(), new IsAnything()); - mockPublisher.ExpectNoCall("Run", typeof (IntegrationResult)); - mockStateManager.ExpectNoCall("SaveState", typeof (IntegrationResult)); - - project.PublishExceptions = false; - IIntegrationResult result = project.Integrate(ModificationExistRequest()); - Assert.AreEqual(expectedException, result.ExceptionResult); - VerifyAll(); - } - - [Test] - public void ShouldPublishIntegrationResultsIfPublishExceptionsIsTrueAndSourceControlThrowsAnException() - { - mockStateManager.ExpectAndReturn("LoadState", IntegrationResult.CreateInitialIntegrationResult(ProjectName, @"c:\temp"), ProjectName); // running the first integration (no state file) - CruiseControlException expectedException = new CruiseControlException(); - mockSourceControl.ExpectAndThrow("GetModifications", expectedException, new IsAnything(), new IsAnything()); - mockPublisher.Expect("Run", new IsAnything()); - mockStateManager.Expect("SaveState", new IsAnything()); - - project.PublishExceptions = true; - IIntegrationResult result = project.Integrate(ModificationExistRequest()); - Assert.AreEqual(expectedException, result.ExceptionResult); - VerifyAll(); - } - [Test, ExpectedException(typeof (CruiseControlException))] public void RethrowExceptionIfLoadingStateFileThrowsException() { @@ -541,7 +509,6 @@ mockSourceControl.Expect("GetSource", new IsAnything()); mockPublisher.Expect("Run", new IsAnything()); - project.PublishExceptions = true; project.Integrate(ForceBuildRequest()); VerifyAll(); Modified: trunk/project/UnitTests/Core/Tasks/MergeFileTaskTest.cs =================================================================== --- trunk/project/UnitTests/Core/Tasks/MergeFileTaskTest.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/UnitTests/Core/Tasks/MergeFileTaskTest.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -103,7 +103,7 @@ public void LoadFromConfig() { string xml = @"<merge><files><file>foo.xml</file><file>bar.xml</file></files></merge>"; - MergeFilesTask task = NetReflector.Read(xml) as MergeFilesTask; + task = NetReflector.Read(xml) as MergeFilesTask; Assert.AreEqual(2, task.MergeFiles.Length); Assert.AreEqual("foo.xml", task.MergeFiles[0]); Assert.AreEqual("bar.xml", task.MergeFiles[1]); @@ -111,9 +111,9 @@ private void AssertDataContainedInList(IList list, string data) { - foreach (ITaskResult result in list) + foreach (ITaskResult taskResult in list) { - if (result.Data == data) + if (taskResult.Data == data) return; } Assert.Fail(data + " not found in the list"); Modified: trunk/project/core/IIntegrationRunnerTarget.cs =================================================================== --- trunk/project/core/IIntegrationRunnerTarget.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/core/IIntegrationRunnerTarget.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -7,8 +7,6 @@ ISourceControl SourceControl { get; } void Prebuild(IIntegrationResult result); - bool PublishExceptions { get; } - void PublishResults(IIntegrationResult result); // Would like to have this somewhere else really Modified: trunk/project/core/IntegrationRunner.cs =================================================================== --- trunk/project/core/IntegrationRunner.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/core/IntegrationRunner.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -28,27 +28,15 @@ CreateDirectoryIfItDoesntExist(result.WorkingDirectory); CreateDirectoryIfItDoesntExist(result.ArtifactDirectory); result.MarkStartTime(); - try + result.Modifications = GetModifications(lastResult, result); + if (result.ShouldRunBuild()) { - result.Modifications = GetModifications(lastResult, result); - if (result.ShouldRunBuild()) - { - Log.Info("Building: " + request.ToString()); - target.Activity = ProjectActivity.Building; - target.Prebuild(result); - target.SourceControl.GetSource(result); - target.Run(result); - Log.Info("Build complete: " + result.Status); - } + Log.Info("Building: " + request.ToString()); + Build(result); + PostBuild(result); + Log.Info(string.Format("Integration complete: {0} - {1}", result.Status, result.EndTime)); } - catch (Exception ex) - { - Log.Error(ex); - result.ExceptionResult = ex; - } - result.MarkEndTime(); - PostBuild(result); - + target.Activity = ProjectActivity.Sleeping; return result; } @@ -58,48 +46,33 @@ return quietPeriod.GetModifications(target.SourceControl, from, to); } - private void CreateDirectoryIfItDoesntExist(string directory) + private void Build(IIntegrationResult result) { - if (! Directory.Exists(directory)) - Directory.CreateDirectory(directory); - } - - private void PostBuild(IIntegrationResult result) - { - if (ShouldPublishResult(result)) - { - LabelSourceControl(result); - target.PublishResults(result); - resultManager.FinishIntegration(); - } - Log.Info("Integration complete: " + result.EndTime); - - target.Activity = ProjectActivity.Sleeping; - } - - private void LabelSourceControl(IIntegrationResult result) - { + target.Activity = ProjectActivity.Building; try { + target.Prebuild(result); + target.SourceControl.GetSource(result); + target.Run(result); target.SourceControl.LabelSourceControl(result); } - catch (Exception e) + catch (Exception ex) { - Log.Error(new CruiseControlException("Exception occurred while labelling source control provider.", e)); + result.ExceptionResult = ex; } + result.MarkEndTime(); } - private bool ShouldPublishResult(IIntegrationResult result) + private void PostBuild(IIntegrationResult result) { - IntegrationStatus integrationStatus = result.Status; - if (integrationStatus == IntegrationStatus.Exception) - { - return target.PublishExceptions; - } - else - { - return integrationStatus != IntegrationStatus.Unknown; - } + target.PublishResults(result); + resultManager.FinishIntegration(); } + + private void CreateDirectoryIfItDoesntExist(string directory) + { + if (! Directory.Exists(directory)) + Directory.CreateDirectory(directory); + } } } \ No newline at end of file Modified: trunk/project/core/Project.cs =================================================================== --- trunk/project/core/Project.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/core/Project.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -128,13 +128,6 @@ set { tasks = value; } } - [ReflectorProperty("publishExceptions", Required=false)] - public bool PublishExceptions - { - get { return publishExceptions; } - set { publishExceptions = value; } - } - // Move this ideally public ProjectActivity Activity { Modified: trunk/project/core/ProjectIntegrator.cs =================================================================== --- trunk/project/core/ProjectIntegrator.cs 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/core/ProjectIntegrator.cs 2006-10-02 05:45:21 UTC (rev 2567) @@ -87,7 +87,7 @@ /// </summary> private void Run() { - Log.Info("Starting integration for project: " + project.Name); + Log.Info("Starting integrator for project: " + project.Name); try { // loop, until the integrator is stopped Modified: trunk/project/examples/VSSAndDevenvAndNUnitCCNet.config =================================================================== --- trunk/project/examples/VSSAndDevenvAndNUnitCCNet.config 2006-10-02 05:05:23 UTC (rev 2566) +++ trunk/project/examples/VSSAndDevenvAndNUnitCCNet.config 2006-10-02 05:45:21 UTC (rev 2567) @@ -1,5 +1,5 @@ <cruisecontrol> - <project name="Refactoring" webURL="http://localhost/ccnet" publishExceptions="true"> + <project name="Refactoring" webURL="http://localhost/ccnet"> <sourcecontrol type="vss" autoGetSource="true"> <project>$/Refactoring</project> <username>orogers</username> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |