|
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.
|