You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ev...@apache.org on 2006/11/14 20:17:22 UTC
svn commit: r474925 - in /maven/continuum/trunk:
continuum-api/src/main/java/org/apache/maven/continuum/store/
continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/
continuum-core/src/test/java/org/apache/maven/continuum/buildcontrol...
Author: evenisse
Date: Tue Nov 14 11:17:21 2006
New Revision: 474925
URL: http://svn.apache.org/viewvc?view=rev&rev=474925
Log:
[CONTINUUM-232] Build when a dependency has been changed, only for dependencies that are a continuum project
Added:
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java (with props)
maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml (with props)
Modified:
maven/continuum/trunk/continuum-api/src/main/java/org/apache/maven/continuum/store/ContinuumStore.java
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
maven/continuum/trunk/continuum-model/src/main/mdo/continuum.xml
maven/continuum/trunk/continuum-store/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java
maven/continuum/trunk/continuum-webapp-test/src/test/it/org/apache/continuum/web/test/SchedulesPageTest.java
Modified: maven/continuum/trunk/continuum-api/src/main/java/org/apache/maven/continuum/store/ContinuumStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-api/src/main/java/org/apache/maven/continuum/store/ContinuumStore.java?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-api/src/main/java/org/apache/maven/continuum/store/ContinuumStore.java (original)
+++ maven/continuum/trunk/continuum-api/src/main/java/org/apache/maven/continuum/store/ContinuumStore.java Tue Nov 14 11:17:21 2006
@@ -43,9 +43,6 @@
{
String ROLE = ContinuumStore.class.getName();
- Project getProjectByName( String name )
- throws ContinuumStoreException;
-
void removeNotifier( ProjectNotifier notifier )
throws ContinuumStoreException;
@@ -57,13 +54,14 @@
/**
* returns the default build definition of the project, if the project doesn't have on declared the default
* of the project group will be returned
- *
+ * <p/>
* this should be the most common usage of the default build definition accessing methods
*
* @param projectId
* @return
* @throws ContinuumStoreException
* @throws ContinuumObjectNotFoundException
+ *
*/
BuildDefinition getDefaultBuildDefinition( int projectId )
throws ContinuumStoreException, ContinuumObjectNotFoundException;
@@ -75,17 +73,19 @@
* @return
* @throws ContinuumStoreException
* @throws ContinuumObjectNotFoundException
+ *
*/
BuildDefinition getDefaultBuildDefinitionForProject( int projectId )
throws ContinuumStoreException, ContinuumObjectNotFoundException;
/**
* returns the default build definition for the project group and there should always be one declared
- *
+ *
* @param projectGroupId
* @return
* @throws ContinuumStoreException
* @throws ContinuumObjectNotFoundException
+ *
*/
BuildDefinition getDefaultBuildDefinitionForProjectGroup( int projectGroupId )
throws ContinuumStoreException, ContinuumObjectNotFoundException;
@@ -143,6 +143,12 @@
Project getProject( int projectId )
throws ContinuumStoreException, ContinuumObjectNotFoundException;
+ Project getProject( String groupId, String artifactId, String version )
+ throws ContinuumStoreException;
+
+ Project getProjectByName( String name )
+ throws ContinuumStoreException;
+
Map getProjectIdsAndBuildDefinitionsIdsBySchedule( int scheduleId )
throws ContinuumStoreException;
@@ -201,6 +207,8 @@
throws ContinuumStoreException, ContinuumObjectNotFoundException;
BuildResult getLatestBuildResultForProject( int projectId );
+
+ List getBuildResultsInSuccessForProject( int projectId, long fromDate );
List getBuildResultsForProject( int projectId, long fromDate );
Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java Tue Nov 14 11:17:21 2006
@@ -16,21 +16,20 @@
* limitations under the License.
*/
-import org.apache.maven.continuum.core.action.AbstractContinuumAction;
import org.apache.maven.continuum.model.project.BuildDefinition;
import org.apache.maven.continuum.model.project.BuildResult;
import org.apache.maven.continuum.model.project.Project;
import org.apache.maven.continuum.model.scm.ScmResult;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
- *
* This class holds build context information.
*
* @author <a href="mailto:kenney@apache.org">Kenney Westerhof</a>
- *
*/
public class BuildContext
{
@@ -52,6 +51,8 @@
private BuildResult buildResult;
+ private List modifiedDependencies;
+
public void setStartTime( long startTime )
{
this.startTime = startTime;
@@ -139,5 +140,19 @@
public void setTrigger( int trigger )
{
this.trigger = trigger;
+ }
+
+ public List getModifiedDependencies()
+ {
+ if ( modifiedDependencies == null )
+ {
+ modifiedDependencies = new ArrayList();
+ }
+ return modifiedDependencies;
+ }
+
+ public void setModifiedDependencies( List modifiedDependencies )
+ {
+ this.modifiedDependencies = modifiedDependencies;
}
}
Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java Tue Nov 14 11:17:21 2006
@@ -20,6 +20,7 @@
import org.apache.maven.continuum.model.project.BuildDefinition;
import org.apache.maven.continuum.model.project.BuildResult;
import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectDependency;
import org.apache.maven.continuum.model.scm.ChangeFile;
import org.apache.maven.continuum.model.scm.ChangeSet;
import org.apache.maven.continuum.model.scm.ScmResult;
@@ -37,6 +38,7 @@
import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
import org.codehaus.plexus.util.StringUtils;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -85,13 +87,13 @@
getLogger().info( "Initializing build" );
BuildContext context = initializeBuildContext( projectId, buildDefinitionId, trigger );
- getLogger().info( "Starting build" );
+ getLogger().info( "Starting build of " + context.getProject().getName() );
startBuild( context );
try
{
// check if build definition requires smoking the existing checkout and rechecking out project
- if ( context.getBuildDefinition().isBuildFresh())
+ if ( context.getBuildDefinition().isBuildFresh() )
{
getLogger().info( "Purging exiting working copy" );
cleanWorkingDirectory( context );
@@ -114,6 +116,8 @@
return;
}
+ checkProjectDependencies( context );
+
if ( !shouldBuild( context ) )
{
getLogger().info( "No changes, not building" );
@@ -171,9 +175,10 @@
try
{
- if ( project.getState() != ContinuumProjectState.NEW && project.getState() != ContinuumProjectState.CHECKEDOUT
- && project.getState() != ContinuumProjectState.OK && project.getState() != ContinuumProjectState.FAILED
- && project.getState() != ContinuumProjectState.ERROR )
+ if ( project.getState() != ContinuumProjectState.NEW &&
+ project.getState() != ContinuumProjectState.CHECKEDOUT &&
+ project.getState() != ContinuumProjectState.OK && project.getState() != ContinuumProjectState.FAILED &&
+ project.getState() != ContinuumProjectState.ERROR )
{
try
{
@@ -273,7 +278,7 @@
* @return
* @throws TaskExecutionException
*/
- private BuildContext initializeBuildContext( int projectId, int buildDefinitionId, int trigger )
+ protected BuildContext initializeBuildContext( int projectId, int buildDefinitionId, int trigger )
throws TaskExecutionException
{
BuildContext context = new BuildContext();
@@ -321,32 +326,33 @@
actionContext.put( AbstractContinuumAction.KEY_TRIGGER, new Integer( trigger ) );
- actionContext.put( AbstractContinuumAction.KEY_FIRST_RUN, Boolean.valueOf( context.getOldBuildResult() == null ) );
+ actionContext.put( AbstractContinuumAction.KEY_FIRST_RUN,
+ Boolean.valueOf( context.getOldBuildResult() == null ) );
return context;
}
- private void cleanWorkingDirectory( BuildContext buildContext )
+ private void cleanWorkingDirectory( BuildContext context )
throws TaskExecutionException
{
- performAction( "clean-working-directory", buildContext );
+ performAction( "clean-working-directory", context );
}
- private void updateWorkingDirectory( BuildContext buildContext )
+ private void updateWorkingDirectory( BuildContext context )
throws TaskExecutionException
{
- Map actionContext = buildContext.getActionContext();
+ Map actionContext = context.getActionContext();
- performAction( "check-working-directory", buildContext );
+ performAction( "check-working-directory", context );
- boolean workingDirectoryExists = AbstractContinuumAction.getBoolean( actionContext,
- AbstractContinuumAction.KEY_WORKING_DIRECTORY_EXISTS );
+ boolean workingDirectoryExists =
+ AbstractContinuumAction.getBoolean( actionContext, AbstractContinuumAction.KEY_WORKING_DIRECTORY_EXISTS );
ScmResult scmResult;
if ( workingDirectoryExists )
{
- performAction( "update-working-directory-from-scm", buildContext );
+ performAction( "update-working-directory-from-scm", context );
scmResult = AbstractContinuumAction.getUpdateScmResult( actionContext, null );
}
@@ -357,12 +363,12 @@
actionContext.put( AbstractContinuumAction.KEY_WORKING_DIRECTORY,
workingDirectoryService.getWorkingDirectory( project ).getAbsolutePath() );
- performAction( "checkout-project", buildContext );
+ performAction( "checkout-project", context );
scmResult = AbstractContinuumAction.getCheckoutResult( actionContext, null );
}
- buildContext.setScmResult( scmResult );
+ context.setScmResult( scmResult );
}
private void performAction( String actionName, BuildContext context )
@@ -422,24 +428,22 @@
throw exception;
}
- private boolean shouldBuild( BuildContext context )
+ protected boolean shouldBuild( BuildContext context )
throws TaskExecutionException
{
- // oldBuildResult != null &&
- // List changes, Project project, int trigger )
- // scmResult.getChanges(), project, trigger ) )
-
- boolean allChangesUnknown = checkAllChangesUnknown( context.getScmResult().getChanges() );
+ boolean shouldBuild = true;
Project project = context.getProject();
- if ( allChangesUnknown && project.getOldState() != ContinuumProjectState.NEW
- && project.getOldState() != ContinuumProjectState.CHECKEDOUT
- && context.getTrigger() != ContinuumProjectState.TRIGGER_FORCED
- && project.getState() != ContinuumProjectState.NEW
- && project.getState() != ContinuumProjectState.CHECKEDOUT )
+ // Check SCM changes
+ boolean allChangesUnknown = checkAllChangesUnknown( context.getScmResult().getChanges() );
+
+ if ( allChangesUnknown && project.getOldState() != ContinuumProjectState.NEW &&
+ project.getOldState() != ContinuumProjectState.CHECKEDOUT &&
+ context.getTrigger() != ContinuumProjectState.TRIGGER_FORCED &&
+ project.getState() != ContinuumProjectState.NEW && project.getState() != ContinuumProjectState.CHECKEDOUT )
{
- if ( context.getScmResult().getChanges().size() > 0 )
+ if ( !context.getScmResult().getChanges().isEmpty() )
{
getLogger().info( "The project was not built because all changes are unknown." );
}
@@ -461,10 +465,28 @@
throw new TaskExecutionException( "Error storing project", e );
}
- return false;
+ shouldBuild = false;
+
+ // Check dependencies changes
+ if ( context.getModifiedDependencies() != null && !context.getModifiedDependencies().isEmpty() )
+ {
+ shouldBuild = true;
+ }
+ }
+ else
+ {
+ // Check dependencies changes
+ if ( context.getModifiedDependencies() != null && !context.getModifiedDependencies().isEmpty() )
+ {
+ shouldBuild = true;
+ }
+ else
+ {
+ shouldBuild = false;
+ }
}
- return true;
+ return shouldBuild;
}
private boolean checkAllChangesUnknown( List changes )
@@ -491,6 +513,55 @@
return true;
}
+ protected void checkProjectDependencies( BuildContext context )
+ {
+ if ( context.getOldBuildResult() == null )
+ {
+ return;
+ }
+
+ try
+ {
+ Project project = store.getProjectWithAllDetails( context.getProject().getId() );
+ List dependencies = project.getDependencies();
+
+ if ( dependencies == null )
+ {
+ return;
+ }
+ List modifiedDependencies = new ArrayList();
+
+ for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+ {
+ ProjectDependency dep = (ProjectDependency) i.next();
+ Project dependencyProject = store.getProject( dep.getGroupId(), dep.getArtifactId(), dep.getVersion() );
+
+ if ( dependencyProject != null )
+ {
+ List buildResults = store.getBuildResultsInSuccessForProject( dependencyProject.getId(),
+ context.getOldBuildResult().getEndTime() );
+ if ( buildResults != null && !buildResults.isEmpty() )
+ {
+ getLogger().debug( "Dependency changed: " + dep.getGroupId() + ":" + dep.getArtifactId() + ":" +
+ dep.getVersion() );
+ modifiedDependencies.add( dep );
+ }
+ }
+ else
+ {
+ getLogger().debug( "Skip non Continuum project: " + dep.getGroupId() + ":" + dep.getArtifactId() +
+ ":" + dep.getVersion() );
+ }
+ }
+
+ context.setModifiedDependencies( modifiedDependencies );
+ }
+ catch ( ContinuumStoreException e )
+ {
+ getLogger().warn( "Can't get the project dependencies", e );
+ }
+ }
+
private String convertScmResultToError( ScmResult result )
{
String error = "";
@@ -503,24 +574,24 @@
{
if ( result.getCommandLine() != null )
{
- error = "Command line: " + StringUtils.clean( result.getCommandLine() )
- + System.getProperty( "line.separator" );
+ error = "Command line: " + StringUtils.clean( result.getCommandLine() ) +
+ System.getProperty( "line.separator" );
}
if ( result.getProviderMessage() != null )
{
- error = "Provider message: " + StringUtils.clean( result.getProviderMessage() )
- + System.getProperty( "line.separator" );
+ error = "Provider message: " + StringUtils.clean( result.getProviderMessage() ) +
+ System.getProperty( "line.separator" );
}
if ( result.getCommandOutput() != null )
{
error += "Command output: " + System.getProperty( "line.separator" );
- error += "-------------------------------------------------------------------------------"
- + System.getProperty( "line.separator" );
+ error += "-------------------------------------------------------------------------------" +
+ System.getProperty( "line.separator" );
error += StringUtils.clean( result.getCommandOutput() ) + System.getProperty( "line.separator" );
- error += "-------------------------------------------------------------------------------"
- + System.getProperty( "line.separator" );
+ error += "-------------------------------------------------------------------------------" +
+ System.getProperty( "line.separator" );
}
if ( result.getException() != null )
@@ -555,6 +626,18 @@
build.setScmResult( context.getScmResult() );
+ List dependencies = context.getModifiedDependencies();
+ if ( dependencies != null && !dependencies.isEmpty() )
+ {
+ List modifiedDependencies = new ArrayList();
+ for ( Iterator i = dependencies.iterator(); i.hasNext(); )
+ {
+ ProjectDependency dep = (ProjectDependency) i.next();
+ modifiedDependencies.add( dep.getGroupId() + ":" + dep.getArtifactId() + ":" + dep.getVersion() );
+ }
+ build.setModifiedDependencies( modifiedDependencies );
+ }
+
if ( error != null )
{
build.setError( error );
@@ -649,7 +732,6 @@
}
newScmResult.setChanges( oldChanges );
-
}
}
}
Added: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java?view=auto&rev=474925
==============================================================================
--- maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java (added)
+++ maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java Tue Nov 14 11:17:21 2006
@@ -0,0 +1,132 @@
+package org.apache.maven.continuum.buildcontroller;
+
+import org.apache.maven.continuum.AbstractContinuumTest;
+import org.apache.maven.continuum.model.project.BuildDefinition;
+import org.apache.maven.continuum.model.project.BuildResult;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectDependency;
+import org.apache.maven.continuum.model.scm.ScmResult;
+import org.apache.maven.continuum.project.ContinuumProjectState;
+
+import java.util.Calendar;
+
+/*
+ * Copyright 2004-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class DefaultBuildControllerTest
+ extends AbstractContinuumTest
+{
+ private DefaultBuildController controller;
+
+ int projectId1;
+
+ int projectId2;
+
+ int buildDefinitionId1;
+
+ int buildDefinitionId2;
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ Project project1 = createProject( "project1" );
+ BuildDefinition bd1 = createBuildDefinition();
+ project1.addBuildDefinition( bd1 );
+ projectId1 = addProject( getStore(), project1 ).getId();
+ buildDefinitionId1 = getStore().getDefaultBuildDefinition( projectId1 ).getId();
+ project1 = getStore().getProject( projectId1 );
+ BuildResult buildResult1 = new BuildResult();
+ buildResult1.setStartTime( Calendar.getInstance().getTimeInMillis() );
+ buildResult1.setEndTime( Calendar.getInstance().getTimeInMillis() );
+ buildResult1.setSuccess( true );
+ getStore().addBuildResult( project1, buildResult1 );
+ BuildResult buildResult2 = new BuildResult();
+ buildResult2.setStartTime( Calendar.getInstance().getTimeInMillis() - 7200000 );
+ buildResult2.setEndTime( Calendar.getInstance().getTimeInMillis() - 7200000 );
+ buildResult2.setSuccess( true );
+ getStore().addBuildResult( project1, buildResult2 );
+
+ Project project2 = createProject( "project2" );
+ ProjectDependency dep1 = new ProjectDependency();
+ dep1.setGroupId( "org.apache.maven.testproject" );
+ dep1.setArtifactId( "project1" );
+ dep1.setVersion( "1.0-SNAPSHOT" );
+ project2.addDependency( dep1 );
+ ProjectDependency dep2 = new ProjectDependency();
+ dep2.setGroupId( "junit" );
+ dep2.setArtifactId( "junit" );
+ dep2.setVersion( "3.8.1" );
+ project2.addDependency( dep2 );
+ BuildDefinition bd2 = createBuildDefinition();
+ project2.addBuildDefinition( bd2 );
+ projectId2 = addProject( getStore(), project2 ).getId();
+ buildDefinitionId2 = getStore().getDefaultBuildDefinition( projectId2 ).getId();
+
+ controller = (DefaultBuildController) lookup( BuildController.ROLE );
+ }
+
+ private Project createProject( String artifactId )
+ {
+ Project project = new Project();
+ project.setExecutorId( "maven2" );
+ project.setName( artifactId );
+ project.setGroupId( "org.apache.maven.testproject" );
+ project.setArtifactId( artifactId );
+ project.setVersion( "1.0-SNAPSHOT" );
+ return project;
+ }
+
+ private BuildDefinition createBuildDefinition()
+ {
+ BuildDefinition builddef = new BuildDefinition();
+ builddef.setBuildFile( "pom.xml" );
+ builddef.setGoals( "clean" );
+ builddef.setDefaultForProject( true );
+ return builddef;
+ }
+
+ private BuildContext getContext( int hourOfLastExecution )
+ throws Exception
+ {
+ BuildContext context = controller.initializeBuildContext( projectId2, buildDefinitionId2,
+ ContinuumProjectState.TRIGGER_SCHEDULED );
+ BuildResult oldBuildResult = new BuildResult();
+ oldBuildResult.setEndTime( Calendar.getInstance().getTimeInMillis() + ( hourOfLastExecution * 3600000 ) );
+ context.setOldBuildResult( oldBuildResult );
+ context.setScmResult( new ScmResult() );
+ return context;
+ }
+
+ public void testWithoutDependencyChanges()
+ throws Exception
+ {
+ BuildContext context = getContext( +1 );
+ controller.checkProjectDependencies( context );
+ assertEquals( 0, context.getModifiedDependencies().size() );
+ assertFalse( controller.shouldBuild( context ) );
+ }
+
+ public void testWithDependencyChanges()
+ throws Exception
+ {
+ BuildContext context = getContext( -1 );
+ controller.checkProjectDependencies( context );
+ assertEquals( 1, context.getModifiedDependencies().size() );
+ assertTrue( controller.shouldBuild( context ) );
+ }
+}
\ No newline at end of file
Propchange: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml?view=auto&rev=474925
==============================================================================
--- maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml (added)
+++ maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml Tue Nov 14 11:17:21 2006
@@ -0,0 +1,11 @@
+<plexus>
+ <components>
+ <component>
+ <role>org.codehaus.plexus.notification.RecipientSource</role>
+ <implementation>org.apache.maven.continuum.notification.ContinuumRecipientSource</implementation>
+ <configuration>
+ <toOverride>nobody@localhost</toOverride>
+ </configuration>
+ </component>
+ </components>
+</plexus>
Propchange: maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/trunk/continuum-core/src/test/resources/org/apache/maven/continuum/buildcontroller/DefaultBuildControllerTest.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: maven/continuum/trunk/continuum-model/src/main/mdo/continuum.xml
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-model/src/main/mdo/continuum.xml?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-model/src/main/mdo/continuum.xml (original)
+++ maven/continuum/trunk/continuum-model/src/main/mdo/continuum.xml Tue Nov 14 11:17:21 2006
@@ -449,6 +449,14 @@
<type>TestResult</type>
</association>
</field>
+ <field jpox.fetchGroupNames="build-result-with-details">
+ <name>modifiedDependencies</name>
+ <version>1.0.0+</version>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
</fields>
</class>
Modified: maven/continuum/trunk/continuum-store/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-store/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-store/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java (original)
+++ maven/continuum/trunk/continuum-store/src/main/java/org/apache/maven/continuum/store/JdoContinuumStore.java Tue Nov 14 11:17:21 2006
@@ -153,6 +153,53 @@
}
}
+ public Project getProject( String groupId, String artifactId, String version )
+ throws ContinuumStoreException
+ {
+ PersistenceManager pm = getPersistenceManager();
+
+ Transaction tx = pm.currentTransaction();
+
+ try
+ {
+ tx.begin();
+
+ Extent extent = pm.getExtent( Project.class, true );
+
+ Query query = pm.newQuery( extent );
+
+ query.declareImports( "import java.lang.String" );
+
+ query.declareParameters( "String groupId, String artifactId, String version" );
+
+ query.setFilter( "this.groupId == groupId && this.artifactId == artifactId && this.version == version" );
+
+ Object[] params = new Object[3];
+ params[0] = groupId;
+ params[1]=artifactId;
+ params[2]=version;
+
+ Collection result = (Collection) query.executeWithArray( params );
+
+ if ( result.size() == 0 )
+ {
+ tx.commit();
+
+ return null;
+ }
+
+ Object object = pm.detachCopy( result.iterator().next() );
+
+ tx.commit();
+
+ return (Project) object;
+ }
+ finally
+ {
+ rollback( tx );
+ }
+ }
+
public Map getProjectIdsAndBuildDefinitionsIdsBySchedule( int scheduleId )
throws ContinuumStoreException
{
@@ -510,7 +557,7 @@
for ( Iterator i = projectGroup.getBuildDefinitions().iterator(); i.hasNext(); )
{
- BuildDefinition bd = (BuildDefinition)i.next();
+ BuildDefinition bd = (BuildDefinition) i.next();
// also applies to project group membership
if ( bd.isDefaultForProject() )
@@ -698,11 +745,11 @@
List groupProjects = new ArrayList();
- for (Iterator i = allProjects.iterator(); i.hasNext(); )
+ for ( Iterator i = allProjects.iterator(); i.hasNext(); )
{
- Project project = (Project)i.next();
+ Project project = (Project) i.next();
- if (project.getProjectGroup().getId() == projectGroupId )
+ if ( project.getProjectGroup().getId() == projectGroupId )
{
groupProjects.add( project );
}
@@ -950,6 +997,27 @@
}
}
+ public List getBuildResultsInSuccessForProject( int projectId, long fromDate )
+ {
+ List buildResults = getBuildResultsForProject( projectId, fromDate );
+
+ List results = new ArrayList();
+
+ if ( buildResults != null )
+ {
+ for ( Iterator i = buildResults.iterator(); i.hasNext(); )
+ {
+ BuildResult res = (BuildResult) i.next();
+ if ( res.isSuccess() )
+ {
+ results.add( res );
+ }
+ }
+ }
+
+ return results;
+ }
+
public Map getBuildResultsInSuccess()
{
PersistenceManager pm = getPersistenceManager();
@@ -1152,7 +1220,8 @@
}
}
- throw new ContinuumObjectNotFoundException( "unable to find project group containing project with id: " + projectId );
+ throw new ContinuumObjectNotFoundException(
+ "unable to find project group containing project with id: " + projectId );
}
public SystemConfiguration addSystemConfiguration( SystemConfiguration systemConf )
Modified: maven/continuum/trunk/continuum-webapp-test/src/test/it/org/apache/continuum/web/test/SchedulesPageTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-webapp-test/src/test/it/org/apache/continuum/web/test/SchedulesPageTest.java?view=diff&rev=474925&r1=474924&r2=474925
==============================================================================
--- maven/continuum/trunk/continuum-webapp-test/src/test/it/org/apache/continuum/web/test/SchedulesPageTest.java (original)
+++ maven/continuum/trunk/continuum-webapp-test/src/test/it/org/apache/continuum/web/test/SchedulesPageTest.java Tue Nov 14 11:17:21 2006
@@ -98,6 +98,8 @@
super.setUp();
clickLinkWithText( "Schedules" );
+
+ assertSchedulesPage();
}
public String getUsername()
@@ -110,18 +112,14 @@
return this.adminPassword;
}
- public void testInitialSchedulesPage()
- throws Exception
- {
- assertInitialSchedulesPage();
- }
-
public void testBasicScheduleAddAndDelete()
throws Exception
{
// add schedule
clickButtonWithValue( "Add" );
+ assertEditSchedulePage();
+
inputSchedule( SCHEDULE_NAME, SCHEDULE_DESCRIPTION, SECOND, MINUTE, HOUR, DAYOFMONTH, MONTH, DAYOFWEEK, YEAR,
MAXJOBEXECUTIONTIME, DELAY, true );
@@ -150,6 +148,8 @@
{
clickButtonWithValue( "Add" );
+ assertEditSchedulePage();
+
inputSchedule( SCHEDULE_NAME_EDIT, SCHEDULE_DESCRIPTION, SECOND, MINUTE, HOUR, DAYOFMONTH, MONTH, DAYOFWEEK,
YEAR, MAXJOBEXECUTIONTIME, DELAY, true );
@@ -170,9 +170,6 @@
inputSchedule( SCHEDULE_NAME_EDIT + "modified", SCHEDULE_DESCRIPTION + "updated", "2", "3", "4", "?", "6", "7",
"2021", "8", "9", false );
- // after we save the schedule we should be brought back to the schedules page
- assertInitialSchedulesPage();
-
cronSchedule = "2 3 4 ? 6 7 2021";
String[] editedColumnValues =
@@ -196,6 +193,8 @@
{
clickButtonWithValue( "Add" );
+ assertEditSchedulePage();
+
HashMap fields = new HashMap();
boolean valid = false;
boolean wait = false;
@@ -203,8 +202,6 @@
// test saving without editing anything from the initial edit page
inputSchedule( fields, wait, valid );
- assertEditSchedulePage();
-
assertTrue( "Name field not validated",
getSelenium().isElementPresent( "//tr/td[span='schedule.name.required']" ) );
assertTrue( "Description field not validated",
@@ -237,7 +234,7 @@
}
- public void assertInitialSchedulesPage()
+ public void assertSchedulesPage()
{
assertPage( SCHEDULES_PAGE_TITLE );
@@ -297,7 +294,7 @@
public void deleteSchedule( String scheduleName )
{
// after we save the schedule we should be brought back to the schedules page
- assertInitialSchedulesPage();
+ assertSchedulesPage();
String[] columnValues = {scheduleName};
@@ -312,7 +309,7 @@
clickButtonWithValue( "Delete" );
// after we confirm the deletion we should be brought back to the schedules page
- assertInitialSchedulesPage();
+ assertSchedulesPage();
}
@@ -367,7 +364,7 @@
if ( valid )
{
// after we save the schedule we should be brought back to the schedules page
- assertInitialSchedulesPage();
+ assertSchedulesPage();
}
else
{