Return-Path: Delivered-To: apmail-continuum-commits-archive@www.apache.org Received: (qmail 42207 invoked from network); 4 Nov 2008 07:08:42 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Nov 2008 07:08:42 -0000 Received: (qmail 75399 invoked by uid 500); 4 Nov 2008 07:08:48 -0000 Delivered-To: apmail-continuum-commits-archive@continuum.apache.org Received: (qmail 75391 invoked by uid 500); 4 Nov 2008 07:08:48 -0000 Mailing-List: contact commits-help@continuum.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@continuum.apache.org Delivered-To: mailing list commits@continuum.apache.org Received: (qmail 75382 invoked by uid 99); 4 Nov 2008 07:08:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Nov 2008 23:08:48 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 04 Nov 2008 07:07:38 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 1F258238889D; Mon, 3 Nov 2008 23:08:20 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r711195 [1/3] - in /continuum/branches/continuum-struts2: ./ continuum-api/src/main/java/org/apache/continuum/dao/ continuum-api/src/main/java/org/apache/continuum/purge/ continuum-api/src/main/java/org/apache/continuum/taskqueue/ continuum... Date: Tue, 04 Nov 2008 07:08:08 -0000 To: commits@continuum.apache.org From: evenisse@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20081104070820.1F258238889D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: evenisse Date: Mon Nov 3 23:07:54 2008 New Revision: 711195 URL: http://svn.apache.org/viewvc?rev=711195&view=rev Log: Merge from trunk Added: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectScmRootDao.java - copied unchanged from r709300, continuum/trunk/continuum-api/src/main/java/org/apache/continuum/dao/ProjectScmRootDao.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/taskqueue/ - copied from r709300, continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/ - copied from r709300, continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java - copied unchanged from r709300, continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManager.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManagerException.java - copied unchanged from r709300, continuum/trunk/continuum-api/src/main/java/org/apache/continuum/taskqueue/manager/TaskQueueManagerException.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/taskqueue/ - copied from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/ - copied from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java - copied unchanged from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/continuum/taskqueue/manager/DefaultTaskQueueManager.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateBuildProjectTaskAction.java - copied unchanged from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateBuildProjectTaskAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java - copied unchanged from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTask.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java - copied unchanged from r709300, continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/scm/queue/PrepareBuildProjectsTaskExecutor.java continuum/branches/continuum-struts2/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm - copied unchanged from r709300, continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/PrepareBuildComplete.vm continuum/branches/continuum-struts2/continuum-store/src/main/java/org/apache/continuum/dao/ProjectScmRootDaoImpl.java - copied unchanged from r709300, continuum/trunk/continuum-store/src/main/java/org/apache/continuum/dao/ProjectScmRootDaoImpl.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/continuum/web/action/ScmResultAction.java - copied, changed from r709300, continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ScmResultAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/scmResult.jsp - copied, changed from r709300, continuum/trunk/continuum-webapp/src/main/webapp/WEB-INF/jsp/scmResult.jsp Modified: continuum/branches/continuum-struts2/ (props changed) continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectDao.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/purge/ContinuumPurgeManager.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/release/ContinuumReleaseManager.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/purge/DefaultContinuumPurgeManager.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/repository/DefaultRepositoryService.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/AbstractContinuumAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/AddProjectToCheckOutQueueAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CheckoutProjectContinuumAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/CreateProjectsFromMetadataAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/ExecuteBuilderContinuumAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/core/action/UpdateWorkingDirectoryFromScmContinuumAction.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/execution/maven/m2/DefaultMavenBuilderHelper.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/notification/DefaultContinuumNotificationDispatcher.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/notification/console/ConsoleNotifier.java continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java continuum/branches/continuum-struts2/continuum-core/src/main/resources/META-INF/plexus/components.xml continuum/branches/continuum-struts2/continuum-core/src/test/java/org/apache/continuum/purge/DefaultContinuumPurgeManagerTest.java continuum/branches/continuum-struts2/continuum-core/src/test/java/org/apache/maven/continuum/DefaultContinuumTest.java continuum/branches/continuum-struts2/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java continuum/branches/continuum-struts2/continuum-data-management/data-management-jdo/src/main/java/org/apache/maven/continuum/management/JdoDataManagementTool.java continuum/branches/continuum-struts2/continuum-data-management/data-management-jdo/src/test/resources/expected.xml continuum/branches/continuum-struts2/continuum-docs/src/site/xdoc/ (props changed) continuum/branches/continuum-struts2/continuum-model/pom.xml continuum/branches/continuum-struts2/continuum-model/src/main/mdo/continuum.xml continuum/branches/continuum-struts2/continuum-model/src/main/resources/package-mssql.orm continuum/branches/continuum-struts2/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/AbstractContinuumNotifier.java continuum/branches/continuum-struts2/continuum-notifiers/continuum-notifier-api/src/main/java/org/apache/maven/continuum/notification/MessageContext.java continuum/branches/continuum-struts2/continuum-notifiers/continuum-notifier-irc/src/main/java/org/apache/maven/continuum/notification/irc/IrcContinuumNotifier.java continuum/branches/continuum-struts2/continuum-notifiers/continuum-notifier-jabber/src/main/java/org/apache/maven/continuum/notification/jabber/JabberContinuumNotifier.java continuum/branches/continuum-struts2/continuum-notifiers/continuum-notifier-msn/src/main/java/org/apache/maven/continuum/notification/msn/MsnContinuumNotifier.java continuum/branches/continuum-struts2/continuum-store/src/main/java/org/apache/continuum/dao/AbstractDao.java continuum/branches/continuum-struts2/continuum-store/src/main/java/org/apache/continuum/dao/DaoUtilsImpl.java continuum/branches/continuum-struts2/continuum-store/src/main/java/org/apache/continuum/dao/ProjectDaoImpl.java continuum/branches/continuum-struts2/continuum-store/src/test/java/org/apache/maven/continuum/store/AbstractContinuumStoreTestCase.java continuum/branches/continuum-struts2/continuum-store/src/test/java/org/apache/maven/continuum/store/ContinuumStoreTest.java continuum/branches/continuum-struts2/continuum-test/src/main/java/org/apache/maven/continuum/AbstractContinuumTest.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/LocalRepositoryAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/PurgeConfigurationAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/continuum/web/startup/ContinuumStartup.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/BuildResultAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/CancelBuildAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectGroupAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ProjectsListAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/SummaryAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/admin/QueuesAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/util/StateGenerator.java continuum/branches/continuum-struts2/continuum-webapp/src/main/java/org/apache/maven/continuum/web/view/StateCell.java continuum/branches/continuum-struts2/continuum-webapp/src/main/resources/localization/Continuum.properties continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/components/projectSummaryComponent.jsp continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierIrc.jsp continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierJabber.jsp continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMail.jsp continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/notifier/notifierMsn.jsp continuum/branches/continuum-struts2/continuum-webapp/src/main/webapp/WEB-INF/jsp/projectGroupSummary.jsp continuum/branches/continuum-struts2/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java Propchange: continuum/branches/continuum-struts2/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Nov 3 23:07:54 2008 @@ -1 +1 @@ -/continuum/branches/continuum-1.2.x:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894 +/continuum/branches/continuum-1.2.x:690684,690689-690799,698449-698533,698817-698819,699529,700250,700273,700936,705894,705910,708339 Modified: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectDao.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectDao.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectDao.java (original) +++ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/dao/ProjectDao.java Mon Nov 3 23:07:54 2008 @@ -57,6 +57,9 @@ Project getProjectWithCheckoutResult( int projectId ) throws ContinuumStoreException; + Project getProjectWithScmDetails( int projectId ) + throws ContinuumStoreException; + List getProjectsInGroup( int projectGroupId ) throws ContinuumStoreException; Modified: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/purge/ContinuumPurgeManager.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/purge/ContinuumPurgeManager.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/purge/ContinuumPurgeManager.java (original) +++ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/continuum/purge/ContinuumPurgeManager.java Mon Nov 3 23:07:54 2008 @@ -55,53 +55,4 @@ */ void purgeDirectory( DirectoryPurgeConfiguration dirPurgeConfig ) throws ContinuumPurgeManagerException; - - /** - * Check if the repository is already in the purging queue - * - * @param repositoryId the id of the repository purge configuration - * @return true if the repository is in the purging queue, otherwise false - * @throws ContinuumPurgeManagerException - */ - boolean isRepositoryInPurgeQueue( int repositoryId ) - throws ContinuumPurgeManagerException; - - /** - * Check if the repository is being used by a project that is currently building - * - * @param repositoryId the id of the local repository - * @return true if the repository is in use, otherwise false - * @throws ContinuumPurgeManagerException - */ - boolean isRepositoryInUse( int repositoryId ) - throws ContinuumPurgeManagerException; - - /** - * Remove local repository from the purge queue - * - * @param repositoryId the id of the local repository - * @throws ContinuumPurgeManagerException - */ - void removeRepositoryFromPurgeQueue( int repositoryId ) - throws ContinuumPurgeManagerException; - - /** - * Remove local repository from the purge queue - * - * @param purgeConfigId the id of the purge configuration - * @return true if the purge configuration was successfully removed from the purge queue, otherwise false - * @throws ContinuumPurgeManagerException - */ - boolean removeFromPurgeQueue( int purgeConfigId ) - throws ContinuumPurgeManagerException; - - /** - * Remove local repositories from the purge queue - * - * @param purgeConfigIds the ids of the purge configuration - * @return true if the purge configurations were successfully removed from the purge queue, otherwise false - * @throws ContinuumPurgeManagerException - */ - boolean removeFromPurgeQueue( int[] purgeConfigIds ) - throws ContinuumPurgeManagerException; } Modified: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java (original) +++ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/Continuum.java Mon Nov 3 23:07:54 2008 @@ -25,9 +25,11 @@ import java.util.Map; import org.apache.continuum.model.release.ContinuumReleaseResult; +import org.apache.continuum.model.project.ProjectScmRoot; import org.apache.continuum.purge.ContinuumPurgeManager; import org.apache.continuum.purge.PurgeConfigurationService; import org.apache.continuum.repository.RepositoryService; +import org.apache.continuum.taskqueue.manager.TaskQueueManager; import org.apache.maven.continuum.builddefinition.BuildDefinitionService; import org.apache.maven.continuum.buildqueue.BuildProjectTask; import org.apache.maven.continuum.configuration.ConfigurationService; @@ -42,6 +44,7 @@ import org.apache.maven.continuum.profile.ProfileService; import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult; import org.apache.maven.continuum.release.ContinuumReleaseManager; +import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor; import org.codehaus.plexus.util.dag.CycleDetectedException; /** @@ -146,54 +149,6 @@ Map getBuildResultsInSuccess(); // ---------------------------------------------------------------------- - // Queues - // ---------------------------------------------------------------------- - - public List getProjectsInBuildQueue() - throws ContinuumException; - - boolean isInBuildingQueue( int projectId ) - throws ContinuumException; - - boolean isInBuildingQueue( int projectId, int buildDefinitionId ) - throws ContinuumException; - - boolean removeProjectsFromBuildingQueue( int[] projectsId ) - throws ContinuumException; - - /** - * @param hashCodes BuildProjectTask hashCodes - * @throws ContinuumException - */ - void removeProjectsFromBuildingQueueWithHashCodes( int[] hashCodes ) - throws ContinuumException; - - boolean removeFromBuildingQueue( int projectId, int buildDefinitionId, int trigger, String projectName ) - throws ContinuumException; - - boolean isInCheckoutQueue( int projectId ) - throws ContinuumException; - - boolean removeProjectFromCheckoutQueue( int projectId ) - throws ContinuumException; - - List /* CheckOutTask */getCheckOutTasksInQueue() - throws ContinuumException; - - boolean removeProjectsFromCheckoutQueue( int[] projectId ) - throws ContinuumException; - - /** - * @param hashCodes CheckOutTask hashCodes - * @throws ContinuumException - */ - void removeTasksFromCheckoutQueueWithHashCodes( int[] hashCodes ) - throws ContinuumException; - - boolean cancelCurrentBuild() - throws ContinuumException; - - // ---------------------------------------------------------------------- // Building // ---------------------------------------------------------------------- @@ -267,6 +222,9 @@ void removeBuildResult( int buildId ) throws ContinuumException; + List getChangesSinceLastUpdate( int projectId ) + throws ContinuumException; + // ---------------------------------------------------------------------- // Projects // ---------------------------------------------------------------------- @@ -637,7 +595,7 @@ ProfileService getProfileService(); BuildDefinitionService getBuildDefinitionService(); - + // ---------------------------------------------------------------------- // Continuum Purge // ---------------------------------------------------------------------- @@ -649,7 +607,38 @@ // Repository Service // ---------------------------------------------------------------------- RepositoryService getRepositoryService(); - + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + List getProjectScmRootByProjectGroup( int projectGroupId ); + + ProjectScmRoot getProjectScmRoot( int projectScmRootId ) + throws ContinuumException; + + ProjectScmRoot getProjectScmRootByProject( int projectId ) + throws ContinuumException; + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + Collection> getProjectsAndBuildDefinitions( Collection projects, + List bds, + boolean checkDefaultBuildDefinitionForProject ) + throws ContinuumException; + + Collection> getProjectsAndBuildDefinitions( Collection projects, + int buildDefinitionId ) + throws ContinuumException; + + void prepareBuildProjects( Collection> projectsAndBuildDefinitions, int trigger ) + throws ContinuumException; + + // ---------------------------------------------------------------------- + // Task Queue Manager + // ---------------------------------------------------------------------- + TaskQueueManager getTaskQueueManager(); + public void startup() throws ContinuumException; Modified: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java (original) +++ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/notification/ContinuumNotificationDispatcher.java Mon Nov 3 23:07:54 2008 @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.continuum.model.project.ProjectScmRoot; import org.apache.maven.continuum.model.project.BuildDefinition; import org.apache.maven.continuum.model.project.BuildResult; import org.apache.maven.continuum.model.project.Project; @@ -48,6 +49,8 @@ String MESSAGE_ID_BUILD_COMPLETE = "BuildComplete"; + String MESSAGE_ID_PREPARE_BUILD_COMPLETE = "PrepareBuildComplete"; + String CONTEXT_BUILD = "build"; String CONTEXT_BUILD_OUTPUT = "build-output"; @@ -77,4 +80,6 @@ void goalsCompleted( Project project, BuildDefinition buildDefinition, BuildResult buildResult ); void buildComplete( Project project, BuildDefinition buildDefinition, BuildResult buildResult ); + + void prepareBuildComplete( ProjectScmRoot projectScmRoot ); } Modified: continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/release/ContinuumReleaseManager.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/release/ContinuumReleaseManager.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/release/ContinuumReleaseManager.java (original) +++ continuum/branches/continuum-struts2/continuum-api/src/main/java/org/apache/maven/continuum/release/ContinuumReleaseManager.java Mon Nov 3 23:07:54 2008 @@ -116,6 +116,6 @@ void perform( String releaseId, File buildDirectory, String goals, boolean useReleaseProfile, ContinuumReleaseManagerListener listener, LocalRepository repository ) throws ContinuumReleaseException; - + Map getEnvironments( Profile profile ); } Modified: continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/purge/DefaultContinuumPurgeManager.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/purge/DefaultContinuumPurgeManager.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/purge/DefaultContinuumPurgeManager.java (original) +++ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/purge/DefaultContinuumPurgeManager.java Mon Nov 3 23:07:54 2008 @@ -19,29 +19,21 @@ * under the License. */ -import org.apache.commons.lang.ArrayUtils; import org.apache.continuum.dao.ProjectDao; import org.apache.continuum.model.repository.DirectoryPurgeConfiguration; import org.apache.continuum.model.repository.LocalRepository; import org.apache.continuum.model.repository.RepositoryPurgeConfiguration; import org.apache.continuum.purge.task.PurgeTask; -import org.apache.maven.continuum.buildqueue.BuildProjectTask; -import org.apache.maven.continuum.model.project.Project; +import org.apache.continuum.taskqueue.manager.TaskQueueManager; +import org.apache.continuum.taskqueue.manager.TaskQueueManagerException; import org.apache.maven.continuum.model.project.Schedule; -import org.apache.maven.continuum.release.tasks.PerformReleaseProjectTask; -import org.apache.maven.continuum.store.ContinuumStoreException; import org.codehaus.plexus.PlexusConstants; import org.codehaus.plexus.PlexusContainer; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; -import org.codehaus.plexus.taskqueue.Task; -import org.codehaus.plexus.taskqueue.TaskQueue; import org.codehaus.plexus.taskqueue.TaskQueueException; -import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor; -import java.util.ArrayList; import java.util.List; /** @@ -53,7 +45,7 @@ * @since 25 jul 07 */ public class DefaultContinuumPurgeManager - implements ContinuumPurgeManager, Contextualizable + implements ContinuumPurgeManager { /** * @plexus.requirement @@ -61,17 +53,15 @@ private ProjectDao projectDao; /** - * @plexus.requirement role-hint="purge" + * @plexus.requirement */ - private TaskQueue purgeQueue; + private PurgeConfigurationService purgeConfigurationService; /** * @plexus.requirement */ - private PurgeConfigurationService purgeConfigurationService; - - private PlexusContainer container; - + private TaskQueueManager taskQueueManager; + public void purge( Schedule schedule ) throws ContinuumPurgeManagerException { @@ -98,112 +88,6 @@ } } - public boolean isRepositoryInPurgeQueue( int repositoryId ) - throws ContinuumPurgeManagerException - { - List repoPurgeConfigs = - purgeConfigurationService.getRepositoryPurgeConfigurationsByRepository( repositoryId ); - - for ( RepositoryPurgeConfiguration repoPurge : repoPurgeConfigs ) - { - if ( isInPurgeQueue( repoPurge.getId() ) ) - { - return true; - } - } - return false; - } - - public boolean isRepositoryInUse( int repositoryId ) - throws ContinuumPurgeManagerException - { - try - { - Task task = getCurrentTask( "build-project" ); - - if ( task != null && task instanceof BuildProjectTask ) - { - int projectId = ( (BuildProjectTask) task ).getProjectId(); - - Project project = projectDao.getProject( projectId ); - LocalRepository repository = project.getProjectGroup().getLocalRepository(); - - if ( repository != null && repository.getId() == repositoryId ) - { - return true; - } - } - return false; - } - catch ( ContinuumStoreException e ) - { - throw new ContinuumPurgeManagerException( e.getMessage(), e ); - } - } - - public void removeRepositoryFromPurgeQueue( int repositoryId ) - throws ContinuumPurgeManagerException - { - List repoPurgeConfigs = - purgeConfigurationService.getRepositoryPurgeConfigurationsByRepository( repositoryId ); - - for ( RepositoryPurgeConfiguration repoPurge : repoPurgeConfigs ) - { - removeFromPurgeQueue( repoPurge.getId() ); - } - } - - public boolean removeFromPurgeQueue( int[] purgeConfigIds ) - throws ContinuumPurgeManagerException - { - if ( purgeConfigIds == null ) - { - return false; - } - - if ( purgeConfigIds.length < 1 ) - { - return false; - } - - List queue = getAllPurgeConfigurationsInPurgeQueue(); - - List tasks = new ArrayList(); - - for ( PurgeTask task : queue ) - { - if ( task != null ) - { - if ( ArrayUtils.contains( purgeConfigIds, task.getPurgeConfigurationId() ) ) - { - tasks.add( task ); - } - } - } - - if ( !tasks.isEmpty() ) - { - return purgeQueue.removeAll( tasks ); - } - - return false; - } - - public boolean removeFromPurgeQueue( int purgeConfigId ) - throws ContinuumPurgeManagerException - { - List queue = getAllPurgeConfigurationsInPurgeQueue(); - - for ( PurgeTask task : queue ) - { - if ( task != null && task.getPurgeConfigurationId() == purgeConfigId ) - { - return purgeQueue.remove( task ); - } - } - return false; - } - public void purgeRepository( RepositoryPurgeConfiguration repoPurge ) throws ContinuumPurgeManagerException { @@ -212,15 +96,20 @@ LocalRepository repository = repoPurge.getRepository(); // do not purge if repository is in use and if repository is already in purge queue - if ( !isRepositoryInUse( repository.getId() ) && !isInPurgeQueue( repoPurge.getId() ) ) + if ( !taskQueueManager.isRepositoryInUse( repository.getId() ) && + !taskQueueManager.isInPurgeQueue( repoPurge.getId() ) ) { - purgeQueue.put( new PurgeTask( repoPurge.getId() ) ); + taskQueueManager.getPurgeQueue().put( new PurgeTask( repoPurge.getId() ) ); } } catch ( TaskQueueException e ) { throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e ); } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumPurgeManagerException( e.getMessage(), e ); + } } public void purgeDirectory( DirectoryPurgeConfiguration dirPurge ) @@ -231,17 +120,19 @@ if ( "releases".equals( dirPurge.getDirectoryType() ) ) { // do not purge if release in progress - if ( !releaseInProgress() && !isInPurgeQueue( dirPurge.getId() ) ) + if ( !taskQueueManager.releaseInProgress() && + !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) ) { - purgeQueue.put( new PurgeTask( dirPurge.getId() ) ); + taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) ); } } else if ( "buildOutput".equals( dirPurge.getDirectoryType() ) ) { // do not purge if build in progress - if ( !buildInProgress() && !isInPurgeQueue( dirPurge.getId() ) ) + if ( !taskQueueManager.buildInProgress() && + !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) ) { - purgeQueue.put( new PurgeTask( dirPurge.getId() ) ); + taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) ); } } @@ -250,79 +141,10 @@ { throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e ); } - } - - public void contextualize( Context context ) - throws ContextException - { - container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); - } - - private boolean isInPurgeQueue( int purgeConfigId ) - throws ContinuumPurgeManagerException - { - List queue = getAllPurgeConfigurationsInPurgeQueue(); - - for ( PurgeTask task : queue ) - { - if ( task != null && task.getPurgeConfigurationId() == purgeConfigId ) - { - return true; - } - } - return false; - } - - private List getAllPurgeConfigurationsInPurgeQueue() - throws ContinuumPurgeManagerException - { - try - { - return purgeQueue.getQueueSnapshot(); - } - catch ( TaskQueueException e ) + catch ( TaskQueueManagerException e ) { - throw new ContinuumPurgeManagerException( "Error while getting the purge configs in purge queue", e ); - } - } - - private Task getCurrentTask( String task ) - throws ContinuumPurgeManagerException - { - try - { - TaskQueueExecutor executor = (TaskQueueExecutor) container.lookup( TaskQueueExecutor.class, task ); - return executor.getCurrentTask(); - } - catch ( ComponentLookupException e ) - { - throw new ContinuumPurgeManagerException( "Unable to lookup current task", e ); - } - } - - private boolean buildInProgress() - throws ContinuumPurgeManagerException - { - Task task = getCurrentTask( "build-project" ); - - if ( task != null && task instanceof BuildProjectTask ) - { - return true; + throw new ContinuumPurgeManagerException( e.getMessage(), e ); } - - return false; } - private boolean releaseInProgress() - throws ContinuumPurgeManagerException - { - Task task = getCurrentTask( "perform-release" ); - - if ( task != null && task instanceof PerformReleaseProjectTask ) - { - return true; - } - - return false; - } } \ No newline at end of file Modified: continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/repository/DefaultRepositoryService.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/repository/DefaultRepositoryService.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/repository/DefaultRepositoryService.java (original) +++ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/continuum/repository/DefaultRepositoryService.java Mon Nov 3 23:07:54 2008 @@ -24,8 +24,8 @@ import org.apache.continuum.dao.RepositoryPurgeConfigurationDao; import org.apache.continuum.model.repository.LocalRepository; import org.apache.continuum.model.repository.RepositoryPurgeConfiguration; -import org.apache.continuum.purge.ContinuumPurgeManager; -import org.apache.continuum.purge.ContinuumPurgeManagerException; +import org.apache.continuum.taskqueue.manager.TaskQueueManager; +import org.apache.continuum.taskqueue.manager.TaskQueueManagerException; import org.apache.maven.continuum.model.project.ProjectGroup; import org.apache.maven.continuum.store.ContinuumObjectNotFoundException; import org.apache.maven.continuum.store.ContinuumStoreException; @@ -63,7 +63,7 @@ /** * @plexus.requirement */ - private ContinuumPurgeManager purgeManager; + private TaskQueueManager taskQueueManager; public LocalRepository addLocalRepository( LocalRepository localRepository ) throws RepositoryServiceException @@ -108,14 +108,14 @@ { LocalRepository repository = getLocalRepository( repositoryId ); - if ( purgeManager.isRepositoryInUse( repositoryId ) ) + if ( taskQueueManager.isRepositoryInUse( repositoryId ) ) { return; } - if ( purgeManager.isRepositoryInPurgeQueue( repositoryId ) ) + if ( taskQueueManager.isRepositoryInPurgeQueue( repositoryId ) ) { - purgeManager.removeRepositoryFromPurgeQueue( repositoryId ); + taskQueueManager.removeRepositoryFromPurgeQueue( repositoryId ); } getLogger().info( "Remove purge configurations of " + repository.getName() ); @@ -133,7 +133,7 @@ getLogger().info( "Removed local repository: " + repository.getName() ); } - catch ( ContinuumPurgeManagerException e ) + catch ( TaskQueueManagerException e ) { // swallow? } @@ -151,7 +151,7 @@ try { - if ( purgeManager.isRepositoryInUse( localRepository.getId() ) ) + if ( taskQueueManager.isRepositoryInUse( localRepository.getId() ) ) { return; } @@ -160,7 +160,7 @@ getLogger().info( "Updated local repository: " + localRepository.getName() ); } - catch ( ContinuumPurgeManagerException e ) + catch ( TaskQueueManagerException e ) { // swallow? } Modified: continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java (original) +++ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/DefaultContinuum.java Mon Nov 3 23:07:54 2008 @@ -33,7 +33,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang.ArrayUtils; import org.apache.continuum.configuration.ContinuumConfigurationException; import org.apache.continuum.dao.BuildDefinitionDao; import org.apache.continuum.dao.BuildResultDao; @@ -42,22 +41,24 @@ import org.apache.continuum.dao.NotifierDao; import org.apache.continuum.dao.ProjectDao; import org.apache.continuum.dao.ProjectGroupDao; +import org.apache.continuum.dao.ProjectScmRootDao; import org.apache.continuum.dao.ScheduleDao; +import org.apache.continuum.model.project.ProjectScmRoot; import org.apache.continuum.model.release.ContinuumReleaseResult; import org.apache.continuum.purge.ContinuumPurgeManager; import org.apache.continuum.purge.PurgeConfigurationService; import org.apache.continuum.repository.RepositoryService; +import org.apache.continuum.taskqueue.manager.TaskQueueManager; +import org.apache.continuum.taskqueue.manager.TaskQueueManagerException; import org.apache.maven.continuum.build.settings.SchedulesActivationException; import org.apache.maven.continuum.build.settings.SchedulesActivator; import org.apache.maven.continuum.builddefinition.BuildDefinitionService; import org.apache.maven.continuum.builddefinition.BuildDefinitionServiceException; -import org.apache.maven.continuum.buildqueue.BuildProjectTask; import org.apache.maven.continuum.configuration.ConfigurationException; import org.apache.maven.continuum.configuration.ConfigurationLoadingException; import org.apache.maven.continuum.configuration.ConfigurationService; import org.apache.maven.continuum.core.action.AbstractContinuumAction; import org.apache.maven.continuum.core.action.CreateProjectsFromMetadataAction; -import org.apache.maven.continuum.execution.ContinuumBuildExecutor; import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants; import org.apache.maven.continuum.execution.manager.BuildExecutorManager; import org.apache.maven.continuum.initialization.ContinuumInitializationException; @@ -78,7 +79,7 @@ import org.apache.maven.continuum.project.builder.maven.MavenOneContinuumProjectBuilder; import org.apache.maven.continuum.project.builder.maven.MavenTwoContinuumProjectBuilder; import org.apache.maven.continuum.release.ContinuumReleaseManager; -import org.apache.maven.continuum.scm.queue.CheckOutTask; +import org.apache.maven.continuum.scm.queue.PrepareBuildProjectsTask; import org.apache.maven.continuum.store.ContinuumObjectNotFoundException; import org.apache.maven.continuum.store.ContinuumStoreException; import org.apache.maven.continuum.utils.ContinuumUrlValidator; @@ -89,7 +90,6 @@ import org.codehaus.plexus.action.Action; import org.codehaus.plexus.action.ActionManager; import org.codehaus.plexus.action.ActionNotFoundException; -import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.context.Context; import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; @@ -99,10 +99,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable; import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException; import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException; -import org.codehaus.plexus.taskqueue.Task; -import org.codehaus.plexus.taskqueue.TaskQueue; import org.codehaus.plexus.taskqueue.TaskQueueException; -import org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.dag.CycleDetectedException; @@ -170,6 +167,11 @@ /** * @plexus.requirement */ + private ProjectScmRootDao projectScmRootDao; + + /** + * @plexus.requirement + */ private ContinuumInitializer initializer; /** @@ -197,16 +199,6 @@ // ---------------------------------------------------------------------- /** - * @plexus.requirement role-hint="build-project" - */ - private TaskQueue buildQueue; - - /** - * @plexus.requirement role-hint="check-out-project" - */ - private TaskQueue checkoutQueue; - - /** * @plexus.requirement */ private ContinuumReleaseManager releaseManager; @@ -251,6 +243,11 @@ */ private PurgeConfigurationService purgeConfigurationService; + /** + * @plexus.requirement + */ + private TaskQueueManager taskQueueManager; + public DefaultContinuum() { Runtime.getRuntime().addShutdownHook( new Thread() @@ -293,6 +290,11 @@ { return repositoryService; } + + public TaskQueueManager getTaskQueueManager() + { + return taskQueueManager; + } public PurgeConfigurationService getPurgeConfigurationService() { @@ -356,6 +358,20 @@ { removeProject( ( (Project) o ).getId() ); } + + List projectScmRoots = getProjectScmRootByProjectGroup( projectGroupId ); + + for ( ProjectScmRoot projectScmRoot : projectScmRoots ) + { + try + { + projectScmRootDao.removeProjectScmRoot( projectScmRoot ); + } + catch ( ContinuumStoreException e ) + { + throw new ContinuumException( "unable to delete project scm root: " + projectScmRoot.getScmRootAddress() ); + } + } } getLogger().info( "Remove project group " + projectGroup.getName() + "(" + projectGroup.getId() + ")" ); @@ -549,286 +565,9 @@ } // ---------------------------------------------------------------------- - // Queues - // ---------------------------------------------------------------------- - - public List getProjectsInBuildQueue() - throws ContinuumException - { - try - { - return buildQueue.getQueueSnapshot(); - } - catch ( TaskQueueException e ) - { - throw new ContinuumException( "Error while getting the building queue.", e ); - } - } - - public boolean isInBuildingQueue( int projectId ) - throws ContinuumException - { - return isInBuildingQueue( projectId, -1 ); - } - - public boolean isInBuildingQueue( int projectId, int buildDefinitionId ) - throws ContinuumException - { - List queue = getProjectsInBuildQueue(); - - for ( BuildProjectTask task : queue ) - { - if ( task != null ) - { - if ( buildDefinitionId < 0 ) - { - if ( task.getProjectId() == projectId ) - { - return true; - } - } - else - { - if ( task.getProjectId() == projectId && task.getBuildDefinitionId() == buildDefinitionId ) - { - return true; - } - } - } - } - - return false; - } - - public boolean isInCheckoutQueue( int projectId ) - throws ContinuumException - { - List queue = getCheckOutTasksInQueue(); - - for ( CheckOutTask task : queue ) - { - if ( task != null && task.getProjectId() == projectId ) - { - return true; - } - } - - return false; - } - - public List getCheckOutTasksInQueue() - throws ContinuumException - { - try - { - return checkoutQueue.getQueueSnapshot(); - } - catch ( TaskQueueException e ) - { - throw new ContinuumException( "Error while getting the checkout queue.", e ); - } - } - - public TaskQueueExecutor getBuildTaskQueueExecutor() - throws ContinuumException - { - try - { - return (TaskQueueExecutor) container.lookup( TaskQueueExecutor.class, "build-project" ); - } - catch ( ComponentLookupException e ) - { - throw new ContinuumException( e.getMessage(), e ); - } - } - - public int getCurrentProjectIdBuilding() - throws ContinuumException - { - Task task = getBuildTaskQueueExecutor().getCurrentTask(); - if ( task != null ) - { - if ( task instanceof BuildProjectTask ) - { - return ( (BuildProjectTask) task ).getProjectId(); - } - } - return -1; - } - - public boolean removeFromBuildingQueue( int projectId, int buildDefinitionId, int trigger, String projectName ) - throws ContinuumException - { - BuildDefinition buildDefinition = getBuildDefinition( buildDefinitionId ); - String buildDefinitionLabel = buildDefinition.getDescription(); - if ( StringUtils.isEmpty( buildDefinitionLabel ) ) - { - buildDefinitionLabel = buildDefinition.getGoals(); - } - BuildProjectTask buildProjectTask = - new BuildProjectTask( projectId, buildDefinitionId, trigger, projectName, buildDefinitionLabel ); - return this.buildQueue.remove( buildProjectTask ); - } - - public boolean removeProjectsFromBuildingQueue( int[] projectsId ) - throws ContinuumException - { - if ( projectsId == null ) - { - return false; - } - if ( projectsId.length < 1 ) - { - return false; - } - List queue = getProjectsInBuildQueue(); - - List tasks = new ArrayList(); - - for ( BuildProjectTask task : queue ) - { - if ( task != null ) - { - if ( ArrayUtils.contains( projectsId, task.getProjectId() ) ) - { - tasks.add( task ); - } - } - } - - for ( BuildProjectTask buildProjectTask : tasks ) - { - getLogger().info( "cancel build for project " + buildProjectTask.getProjectId() ); - } - if ( !tasks.isEmpty() ) - { - return buildQueue.removeAll( tasks ); - } - - return false; - } - - public boolean removeProjectsFromCheckoutQueue( int[] projectsId ) - throws ContinuumException - { - if ( projectsId == null ) - { - return false; - } - if ( projectsId.length < 1 ) - { - return false; - } - List queue = getCheckOutTasksInQueue(); - - List tasks = new ArrayList(); - - for ( CheckOutTask task : queue ) - { - if ( task != null ) - { - if ( ArrayUtils.contains( projectsId, task.getProjectId() ) ) - { - tasks.add( task ); - } - } - } - if ( !tasks.isEmpty() ) - { - return checkoutQueue.removeAll( tasks ); - } - return false; - } - - public boolean removeProjectFromBuildingQueue( int projectId ) - throws ContinuumException - { - List queue = getProjectsInBuildQueue(); - - for ( BuildProjectTask task : queue ) - { - if ( task != null && task.getProjectId() == projectId ) - { - return buildQueue.remove( task ); - } - } - - return false; - } - - public void removeProjectsFromBuildingQueueWithHashCodes( int[] hashCodes ) - throws ContinuumException - { - List queue = getProjectsInBuildQueue(); - - for ( BuildProjectTask task : queue ) - { - if ( ArrayUtils.contains( hashCodes, task.hashCode() ) ) - { - buildQueue.remove( task ); - } - } - } - - public boolean removeProjectFromCheckoutQueue( int projectId ) - throws ContinuumException - { - List queue = getCheckOutTasksInQueue(); - - for ( CheckOutTask task : queue ) - { - if ( task != null && task.getProjectId() == projectId ) - { - return checkoutQueue.remove( task ); - } - } - - return false; - } - - public void removeTasksFromCheckoutQueueWithHashCodes( int[] hashCodes ) - throws ContinuumException - { - List queue = getCheckOutTasksInQueue(); - - for ( CheckOutTask task : queue ) - { - if ( ArrayUtils.contains( hashCodes, task.hashCode() ) ) - { - checkoutQueue.remove( task ); - } - } - } - - public boolean cancelCurrentBuild() - throws ContinuumException - { - Task task = getBuildTaskQueueExecutor().getCurrentTask(); - - if ( task != null ) - { - if ( task instanceof BuildProjectTask ) - { - getLogger().info( "Cancelling current build task" ); - return getBuildTaskQueueExecutor().cancelTask( task ); - } - else - { - getLogger().warn( "Current task not a BuildProjectTask - not cancelling" ); - } - } - else - { - getLogger().warn( "No task running - not cancelling" ); - } - return false; - } - - // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- - public void removeProject( int projectId ) throws ContinuumException { @@ -863,32 +602,28 @@ getLogger().info( "Remove project " + project.getName() + "(" + projectId + ")" ); - if ( isInCheckoutQueue( projectId ) ) - { - removeProjectFromCheckoutQueue( projectId ); - } - - if ( isInBuildingQueue( projectId ) ) - { - removeProjectFromBuildingQueue( projectId ); - } - - // cancel it if currently building - - if ( getCurrentProjectIdBuilding() == projectId ) + try { - Task currentTask = getBuildTaskQueueExecutor().getCurrentTask(); + if ( taskQueueManager.isInCheckoutQueue( projectId ) ) { - if ( currentTask instanceof BuildProjectTask ) - { - if ( ( (BuildProjectTask) currentTask ).getProjectId() == projectId ) - { - getLogger().info( "Cancelling task for project " + projectId ); - getBuildTaskQueueExecutor().cancelTask( currentTask ); - } - } + taskQueueManager.removeProjectFromCheckoutQueue( projectId ); + } + + if ( taskQueueManager.isInBuildingQueue( projectId ) ) + { + taskQueueManager.removeProjectFromBuildingQueue( projectId ); + } + + // cancel if currently building + if ( taskQueueManager.getCurrentProjectIdBuilding() == projectId ) + { + taskQueueManager.cancelBuildTask( projectId ); } } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); + } for ( Object o : project.getBuildResults() ) { @@ -1002,22 +737,9 @@ projectsList = getProjects(); } - for ( Project project : projectsList ) - { - Integer buildDefId = null; - - try - { - buildDefId = new Integer( buildDefinitionDao.getDefaultBuildDefinition( project.getId() ).getId() ); - } - catch ( ContinuumStoreException e ) - { - throw new ContinuumException( "Project (id=" + project.getId() + - " doens't have a default build definition, this should be impossible, parent should have default definition set." ); - } + Collection> projectsAndBuildDefinitions = getProjectsAndBuildDefinitions( projectsList, null, true ); - buildProject( project, buildDefId.intValue(), trigger ); - } + prepareBuildProjects( projectsAndBuildDefinitions, trigger ); } /** @@ -1043,10 +765,9 @@ projectsList = getProjects(); } - for ( Project project : projectsList ) - { - buildProject( project, buildDefinitionId, trigger ); - } + Collection> projectsAndBuildDefinitions = getProjectsAndBuildDefinitions( projectsList, buildDefinitionId ); + + prepareBuildProjects( projectsAndBuildDefinitions, trigger ); } /** @@ -1107,55 +828,11 @@ projectsList = getProjects(); } - //Map buildDefinitionsIds = store.getDefaultBuildDefinitions(); - - for ( Project project : projectsList ) - { - int buildDefId = -1; + Collection> projectsAndBuildDefinitions = getProjectsAndBuildDefinitions( projectsList, + bds, + checkDefaultBuildDefinitionForProject ); - for ( BuildDefinition bd : bds ) - { - if ( project.getExecutorId().equals( bd.getType() ) || ( StringUtils.isEmpty( bd.getType() ) && - ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR.equals( project.getExecutorId() ) ) ) - { - buildDefId = bd.getId(); - break; - } - } - - if ( checkDefaultBuildDefinitionForProject ) - { - BuildDefinition projectDefaultBD = null; - try - { - projectDefaultBD = buildDefinitionDao.getDefaultBuildDefinitionForProject( project.getId() ); - } - catch ( ContinuumObjectNotFoundException e ) - { - getLogger().debug( e.getMessage() ); - } - catch ( ContinuumStoreException e ) - { - getLogger().debug( e.getMessage() ); - } - - if ( projectDefaultBD != null ) - { - buildDefId = projectDefaultBD.getId(); - getLogger().debug( "Project " + project.getId() + - " has own default build definition, will use it instead of group's." ); - } - } - - if ( buildDefId == -1 ) - { - getLogger().info( "Project " + project.getId() + - " don't have a default build definition defined in the project or project group, will not be included in group build." ); - continue; - } - - buildProject( project, buildDefId, ContinuumProjectState.TRIGGER_FORCED ); - } + prepareBuildProjects( projectsAndBuildDefinitions, ContinuumProjectState.TRIGGER_FORCED ); } /** @@ -1197,6 +874,8 @@ projectsList = getProjects(); } + Map> map = new HashMap>(); + for ( Project project : projectsList ) { List buildDefIds = (List) projectsMap.get( new Integer( project.getId() ) ); @@ -1205,14 +884,41 @@ { for ( Integer buildDefId : buildDefIds ) { - if ( buildDefId != null && !isInBuildingQueue( project.getId(), buildDefId.intValue() ) && - !isInCheckoutQueue( project.getId() ) ) + try { - buildProject( project, buildDefId.intValue(), ContinuumProjectState.TRIGGER_SCHEDULED, false ); + if ( buildDefId != null && !taskQueueManager.isInBuildingQueue( project.getId(), buildDefId.intValue() ) && + !taskQueueManager.isInCheckoutQueue( project.getId() ) && !taskQueueManager.isInPrepareBuildQueue( project.getId() ) ) + { + ProjectScmRoot scmRoot = getProjectScmRootByProject( project.getId() ); + + String scmRootAddress = ""; + + if ( scmRoot != null ) + { + scmRootAddress = scmRoot.getScmRootAddress(); + } + + Map projectsAndBuildDefinitionsMap = map.get( scmRootAddress ); + + if ( projectsAndBuildDefinitionsMap == null ) + { + projectsAndBuildDefinitionsMap = new HashMap(); + } + + projectsAndBuildDefinitionsMap.put( project.getId(), buildDefId ); + + map.put( scmRootAddress, projectsAndBuildDefinitionsMap ); + } + } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); } } } } + + prepareBuildProjects( map.values(), ContinuumProjectState.TRIGGER_SCHEDULED ); } public void buildProject( int projectId ) @@ -1224,133 +930,77 @@ public void buildProjectWithBuildDefinition( int projectId, int buildDefinitionId ) throws ContinuumException { - buildProject( projectId, buildDefinitionId, ContinuumProjectState.TRIGGER_FORCED ); - } - - public void buildProject( int projectId, int trigger ) - throws ContinuumException - { - BuildDefinition buildDef = getDefaultBuildDefinition( projectId ); - - if ( buildDef == null ) - { - throw new ContinuumException( "Project (id=" + projectId + " doens't have a default build definition." ); - } - - if ( isInBuildingQueue( projectId, buildDef.getId() ) || isInCheckoutQueue( projectId ) ) - { - return; - } - - buildProject( projectId, buildDef.getId(), trigger, false ); - } - - public void buildProject( int projectId, int buildDefinitionId, int trigger ) - throws ContinuumException - { - buildProject( projectId, buildDefinitionId, trigger, true ); - } - - public void buildProject( Project project, int buildDefinitionId, int trigger ) - throws ContinuumException - { - buildProject( project, buildDefinitionId, trigger, true ); - } - - private void buildProject( int projectId, int buildDefinitionId, int trigger, boolean checkQueues ) - throws ContinuumException - { - Project project; - try { - project = projectDao.getProject( projectId ); - } - catch ( ContinuumStoreException e ) - { - throw logAndCreateException( "Error while getting project " + projectId + ".", e ); - } - - buildProject( project, buildDefinitionId, trigger, checkQueues ); - } - - private synchronized void buildProject( Project project, int buildDefinitionId, int trigger, boolean checkQueues ) - throws ContinuumException - { - if ( checkQueues ) - { - if ( isInBuildingQueue( project.getId(), buildDefinitionId ) ) + if ( taskQueueManager.isInBuildingQueue( projectId ) || taskQueueManager.isInPrepareBuildQueue( projectId ) ) { return; } - if ( isInCheckoutQueue( project.getId() ) ) - { - removeProjectFromCheckoutQueue( project.getId() ); - } - } - - try - { - if ( project.getState() != ContinuumProjectState.NEW && - project.getState() != ContinuumProjectState.CHECKEDOUT && - project.getState() != ContinuumProjectState.OK && project.getState() != ContinuumProjectState.FAILED && - project.getState() != ContinuumProjectState.ERROR ) - { - ContinuumBuildExecutor executor = executorManager.getBuildExecutor( project.getExecutorId() ); - - if ( executor.isBuilding( project ) || project.getState() == ContinuumProjectState.UPDATING ) - { - // project is building - getLogger().info( "Project '" + project.getName() + "' already being built." ); - - return; - } - else - { - project.setOldState( project.getState() ); - - project.setState( ContinuumProjectState.ERROR ); - - projectDao.updateProject( project ); - - project = projectDao.getProject( project.getId() ); - } - } - else + + if ( taskQueueManager.isInCheckoutQueue( projectId ) ) { - project.setOldState( project.getState() ); + taskQueueManager.removeProjectFromCheckoutQueue( projectId ); + } + } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); + } - projectDao.updateProject( project ); + Map projectsAndBuildDefinitionsMap = new HashMap( projectId, buildDefinitionId ); - project = projectDao.getProject( project.getId() ); - } + prepareBuildProjects( projectsAndBuildDefinitionsMap, ContinuumProjectState.TRIGGER_FORCED ); + } + + public void buildProject( int projectId, int trigger ) + throws ContinuumException + { + BuildDefinition buildDef = getDefaultBuildDefinition( projectId ); + + if ( buildDef == null ) + { + throw new ContinuumException( "Project (id=" + projectId + " doens't have a default build definition." ); + } - BuildDefinition buildDefinition = getBuildDefinition( buildDefinitionId ); - String buildDefinitionLabel = buildDefinition.getDescription(); - if ( StringUtils.isEmpty( buildDefinitionLabel ) ) + try + { + if ( taskQueueManager.isInBuildingQueue( projectId, buildDef.getId() ) || + taskQueueManager.isInCheckoutQueue( projectId ) || + taskQueueManager.isInPrepareBuildQueue( projectId )) { - buildDefinitionLabel = buildDefinition.getGoals(); + return; } + } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); + } - getLogger().info( "Enqueuing '" + project.getName() + "' with build definition '" + buildDefinitionLabel + - "' - id=" + buildDefinitionId + ")." ); + Map projectsBuildDefinitionsMap = new HashMap( projectId, buildDef.getId() ); - BuildProjectTask task = new BuildProjectTask( project.getId(), buildDefinitionId, trigger, project - .getName(), buildDefinitionLabel ); + prepareBuildProjects( projectsBuildDefinitionsMap, trigger ); + } - task.setMaxExecutionTime( buildDefinitionDao.getBuildDefinition( buildDefinitionId ).getSchedule() - .getMaxJobExecutionTime() * 1000 ); + public void buildProject( int projectId, int buildDefinitionId, int trigger ) + throws ContinuumException + { + Project project; - buildQueue.put( task ); - } - catch ( ContinuumStoreException e ) + try { - throw logAndCreateException( "Error while creating build object.", e ); + project = projectDao.getProject( projectId ); } - catch ( TaskQueueException e ) + catch ( ContinuumStoreException e ) { - throw logAndCreateException( "Error while creating enqueuing object.", e ); + throw logAndCreateException( "Error while getting project " + projectId + ".", e ); } + + Map context = new HashMap(); + context.put( AbstractContinuumAction.KEY_PROJECT, project ); + context.put( AbstractContinuumAction.KEY_BUILD_DEFINITION_ID, buildDefinitionId ); + context.put( AbstractContinuumAction.KEY_TRIGGER, trigger ); + + executeAction( "create-build-project-task", context ); } public BuildResult getBuildResult( int buildId ) @@ -1488,6 +1138,32 @@ return changes; } + public List getChangesSinceLastUpdate( int projectId ) + throws ContinuumException + { + List changes = new ArrayList(); + + Project project; + + try + { + project = projectDao.getProjectWithScmDetails( projectId ); + } + catch ( ContinuumStoreException e ) + { + throw new ContinuumException( "", e ); + } + + ScmResult scmResult = project.getScmResult(); + + if ( scmResult != null ) + { + changes.addAll( scmResult.getChanges() ); + } + + return changes; + } + // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- @@ -1877,6 +1553,8 @@ ProjectGroup projectGroup = (ProjectGroup) result.getProjectGroups().iterator().next(); + ProjectScmRoot projectScmRoot; + try { if ( projectGroupId == -1 ) @@ -1911,6 +1589,15 @@ projectGroup = projectGroupDao.getProjectGroupWithBuildDetailsByProjectGroupId( projectGroupId ); + String url = (String) context.get( CreateProjectsFromMetadataAction.KEY_URL ); + + projectScmRoot = projectScmRootDao.getProjectScmRootByProjectGroupAndScmRootAddress( projectGroup.getId(), url ); + + if ( projectScmRoot == null ) + { + projectScmRoot = createProjectScmRoot( projectGroup, url ); + } + /* add the project group loaded from database, which has more info, like id */ result.getProjectGroups().remove( 0 ); result.getProjectGroups().add( projectGroup ); @@ -2155,6 +1842,8 @@ notif.setSendOnWarning( notifier.isSendOnWarning() ); + notif.setSendOnScmFailure( notifier.isSendOnScmFailure() ); + notif.setConfiguration( notifier.getConfiguration() ); notif.setType( notifier.getType() ); @@ -2183,6 +1872,8 @@ notif.setSendOnWarning( notifier.isSendOnWarning() ); + notif.setSendOnScmFailure( notifier.isSendOnScmFailure() ); + notif.setConfiguration( notifier.getConfiguration() ); notif.setType( notifier.getType() ); @@ -2810,6 +2501,19 @@ } } + getLogger().info( "Showing all groups:" ); + try + { + for ( ProjectGroup group : projectGroupDao.getAllProjectGroups() ) + { + createProjectScmRootForProjectGroup( group ); + } + } + catch ( ContinuumException e ) + { + throw new InitializationException( "Error while creating project scm root for the project group", e ); + } + getLogger().info( "Showing all projects: " ); for ( Project project : projectDao.getAllProjectsByNameWithBuildDetails() ) @@ -2863,6 +2567,27 @@ getLogger().info( " " + project.getId() + ":" + project.getName() + ":" + project.getVersion() + ":" + project.getExecutorId() ); } + + for ( ProjectScmRoot projectScmRoot : projectScmRootDao.getAllProjectScmRoots() ) + { + if ( projectScmRoot.getState() == ContinuumProjectState.UPDATING ) + { + projectScmRoot.setState( projectScmRoot.getOldState() ); + + projectScmRoot.setOldState( 0 ); + + try + { + getLogger().info( "Fix state for projectScmRoot " + projectScmRoot.getScmRootAddress() ); + + projectScmRootDao.updateProjectScmRoot( projectScmRoot ); + } + catch ( ContinuumStoreException e ) + { + throw new InitializationException( "Database is corrupted.", e ); + } + } + } } // -------------------------------- @@ -3442,4 +3167,271 @@ throw new ContinuumException( "Error while retrieving release output for release: " + releaseResultId ); } } + + public List getProjectScmRootByProjectGroup( int projectGroupId ) + { + return projectScmRootDao.getProjectScmRootByProjectGroup( projectGroupId ); + } + + public ProjectScmRoot getProjectScmRoot( int projectScmRootId ) + throws ContinuumException + { + try + { + return projectScmRootDao.getProjectScmRoot( projectScmRootId ); + } + catch ( ContinuumObjectNotFoundException e ) + { + throw new ContinuumException( "No projectScmRoot found with the given id: " + projectScmRootId ); + } + catch ( ContinuumStoreException e ) + { + throw new ContinuumException( "Error while retrieving projectScmRoot ", e ); + } + } + + public ProjectScmRoot getProjectScmRootByProject( int projectId ) + throws ContinuumException + { + Project project = getProject( projectId ); + ProjectGroup group = getProjectGroupByProjectId( projectId ); + + List scmRoots = getProjectScmRootByProjectGroup( group.getId() ); + + for ( ProjectScmRoot scmRoot : scmRoots ) + { + if( project.getScmUrl() != null && project.getScmUrl().startsWith( scmRoot.getScmRootAddress() ) ) + { + return scmRoot; + } + } + return null; + } + + public Collection> getProjectsAndBuildDefinitions( Collection projects, + List bds, + boolean checkDefaultBuildDefinitionForProject ) + throws ContinuumException + { + Map> map = new HashMap>(); + + for ( Project project : projects ) + { + int projectId = project.getId(); + + try + { + // check if project already in queue + if ( taskQueueManager.isInBuildingQueue( projectId ) || taskQueueManager.getCurrentProjectIdBuilding() == projectId ) + { + continue; + } + + if ( taskQueueManager.isInCheckoutQueue( projectId ) ) + { + taskQueueManager.removeProjectFromCheckoutQueue( projectId ); + } + } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); + } + + int buildDefId = -1; + + if ( bds != null ) + { + for ( BuildDefinition bd : bds ) + { + if ( project.getExecutorId().equals( bd.getType() ) || ( StringUtils.isEmpty( bd.getType() ) && + ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR.equals( project.getExecutorId() ) ) ) + { + buildDefId = bd.getId(); + break; + } + } + } + + if ( checkDefaultBuildDefinitionForProject ) + { + BuildDefinition projectDefaultBD = null; + try + { + projectDefaultBD = buildDefinitionDao.getDefaultBuildDefinitionForProject( projectId ); + } + catch ( ContinuumObjectNotFoundException e ) + { + getLogger().debug( e.getMessage() ); + } + catch ( ContinuumStoreException e ) + { + getLogger().debug( e.getMessage() ); + } + + if ( projectDefaultBD != null ) + { + buildDefId = projectDefaultBD.getId(); + getLogger().debug( "Project " + project.getId() + + " has own default build definition, will use it instead of group's." ); + } + } + + if ( buildDefId == -1 ) + { + getLogger().info( "Project " + projectId + + " don't have a default build definition defined in the project or project group, will not be included in group prepare." ); + continue; + } + + ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId ); + + String scmRootAddress = ""; + if ( scmRoot != null ) + { + scmRootAddress = scmRoot.getScmRootAddress(); + } + + Map projectsAndBuildDefinitionsMap = map.get( scmRootAddress ); + + if ( projectsAndBuildDefinitionsMap == null ) + { + projectsAndBuildDefinitionsMap = new HashMap(); + } + + projectsAndBuildDefinitionsMap.put( projectId, buildDefId ); + + map.put( scmRootAddress, projectsAndBuildDefinitionsMap ); + } + + return map.values(); + } + + public Collection> getProjectsAndBuildDefinitions( Collection projects, + int buildDefinitionId ) + throws ContinuumException + { + Map> map = new HashMap>(); + + for ( Project project : projects ) + { + int projectId = project.getId(); + + try + { + // check if project already in queue + if ( taskQueueManager.isInBuildingQueue( projectId ) || taskQueueManager.getCurrentProjectIdBuilding() == projectId ) + { + continue; + } + + if ( taskQueueManager.isInCheckoutQueue( projectId ) ) + { + taskQueueManager.removeProjectFromCheckoutQueue( projectId ); + } + + ProjectScmRoot scmRoot = getProjectScmRootByProject( projectId ); + + String scmRootAddress = ""; + if ( scmRoot != null ) + { + scmRootAddress = scmRoot.getScmRootAddress(); + } + + Map projectsAndBuildDefinitionsMap = map.get( scmRootAddress ); + + if ( projectsAndBuildDefinitionsMap == null ) + { + projectsAndBuildDefinitionsMap = new HashMap(); + } + + projectsAndBuildDefinitionsMap.put( projectId, buildDefinitionId ); + + map.put( scmRootAddress, projectsAndBuildDefinitionsMap ); + } + catch ( TaskQueueManagerException e ) + { + throw new ContinuumException( e.getMessage(), e ); + } + } + + return map.values(); + } + + public void prepareBuildProjects( Collection> projectsBuildDefinitions, int trigger ) + throws ContinuumException + { + for ( Map map : projectsBuildDefinitions ) + { + prepareBuildProjects( map, trigger ); + } + } + + public void prepareBuildProjects( Map projectsBuildDefinitionsMap, int trigger ) + throws ContinuumException + { + try + { + PrepareBuildProjectsTask task = new PrepareBuildProjectsTask( projectsBuildDefinitionsMap, trigger ); + taskQueueManager.getPrepareBuildQueue().put( task ); + } + catch ( TaskQueueException e ) + { + throw logAndCreateException( "Error while creating enqueuing object.", e ); + } + } + + private void createProjectScmRootForProjectGroup( ProjectGroup projectGroup ) + throws ContinuumException + { + List projectsList; + + try + { + projectsList = getProjectsInBuildOrder( projectDao.getProjectsWithDependenciesByGroupId( projectGroup.getId() ) ); + } + catch ( CycleDetectedException e ) + { + throw new ContinuumException( "Error while retrieving projects", e ); + } + + int counter = 0; + String url = ""; + + for ( Project project : projectsList ) + { + if ( counter == 0 || !project.getScmUrl().startsWith( url ) ) + { + // this is a root + url = project.getScmUrl(); + createProjectScmRoot( projectGroup, url ); + } + counter++; + } + } + + private ProjectScmRoot createProjectScmRoot( ProjectGroup projectGroup, String url ) + throws ContinuumException + { + try + { + ProjectScmRoot scmRoot = projectScmRootDao.getProjectScmRootByProjectGroupAndScmRootAddress( projectGroup.getId(), url ); + + if ( scmRoot != null ) + { + return null; + } + + ProjectScmRoot projectScmRoot = new ProjectScmRoot(); + + projectScmRoot.setProjectGroup( projectGroup ); + + projectScmRoot.setScmRootAddress( url ); + + return projectScmRootDao.addProjectScmRoot( projectScmRoot ); + } + catch ( ContinuumStoreException e ) + { + throw new ContinuumException( "Error while creating project scm root with scm root address:" + url ); + } + } } Modified: continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java URL: http://svn.apache.org/viewvc/continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java?rev=711195&r1=711194&r2=711195&view=diff ============================================================================== --- continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java (original) +++ continuum/branches/continuum-struts2/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/BuildContext.java Mon Nov 3 23:07:54 2008 @@ -57,6 +57,8 @@ private List modifiedDependencies; + private boolean cancelled; + public void setStartTime( long startTime ) { this.startTime = startTime; @@ -159,4 +161,14 @@ { this.modifiedDependencies = modifiedDependencies; } + + public boolean isCancelled() + { + return cancelled; + } + + public void setCancelled( boolean cancelled ) + { + this.cancelled = cancelled; + } }