Author: olamy Date: Sat Feb 5 23:13:10 2011 New Revision: 1067549 URL: http://svn.apache.org/viewvc?rev=1067549&view=rev Log: [SCM-553] release:prepare not working with synergy scm-provider Submitted by Jan Malcomess
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumer.java - copied, changed from r1067545, maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt (with props) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/SynergyScmProvider.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/add/SynergyAddCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/changelog/SynergyChangeLogCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkin/SynergyCheckInCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkout/SynergyCheckOutCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/edit/SynergyEditCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/remove/SynergyRemoveCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/tag/SynergyTagCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/unedit/SynergyUnEditCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyCCM.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyUtil.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/util/SynergyCCMTest.java Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/SynergyScmProvider.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/SynergyScmProvider.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/SynergyScmProvider.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/SynergyScmProvider.java Sat Feb 5 23:13:10 2011 @@ -58,6 +58,10 @@ public class SynergyScmProvider public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter ) throws ScmRepositoryException { + if (getLogger().isDebugEnabled()) + { + getLogger().debug("Creating SynergyScmProviderRepository..."); + } return new SynergyScmProviderRepository( scmSpecificUrl ); } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/add/SynergyAddCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/add/SynergyAddCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/add/SynergyAddCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/add/SynergyAddCommand.java Sat Feb 5 23:13:10 2011 @@ -76,7 +76,7 @@ public class SynergyAddCommand SynergyUtil.getWorkingProject( getLogger(), repo.getProjectSpec(), repo.getUser(), ccmAddr ); if ( projectSpec == null ) { - throw new ScmException( "You should checkout project first" ); + throw new ScmException( "You should checkout a working project first" ); } File waPath = SynergyUtil.getWorkArea( getLogger(), projectSpec, ccmAddr ); File destPath = new File( waPath, repo.getProjectName() ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/changelog/SynergyChangeLogCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/changelog/SynergyChangeLogCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/changelog/SynergyChangeLogCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/changelog/SynergyChangeLogCommand.java Sat Feb 5 23:13:10 2011 @@ -74,7 +74,7 @@ public class SynergyChangeLogCommand SynergyUtil.getWorkingProject( getLogger(), repo.getProjectSpec(), repo.getUser(), ccmAddr ); if ( projectSpec == null ) { - throw new ScmException( "You should checkout project first" ); + throw new ScmException( "You should checkout a working project first" ); } List<SynergyTask> tasks = SynergyUtil.getCompletedTasks( getLogger(), projectSpec, startDate, endDate, ccmAddr ); for (SynergyTask t : tasks ) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkin/SynergyCheckInCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkin/SynergyCheckInCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkin/SynergyCheckInCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkin/SynergyCheckInCommand.java Sat Feb 5 23:13:10 2011 @@ -33,6 +33,7 @@ import org.apache.maven.scm.command.chec import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.synergy.command.SynergyCommand; import org.apache.maven.scm.provider.synergy.repository.SynergyScmProviderRepository; +import org.apache.maven.scm.provider.synergy.util.SynergyTaskManager; import org.apache.maven.scm.provider.synergy.util.SynergyUtil; /** @@ -52,21 +53,21 @@ public class SynergyCheckInCommand { if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "executing update command..." ); + getLogger().debug( "executing checkin command..." ); } SynergyScmProviderRepository repo = (SynergyScmProviderRepository) repository; if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "basedir: " + fileSet.getBasedir() ); + getLogger().debug( fileSet.toString() ); } String ccmAddr = SynergyUtil.start( getLogger(), repo.getUser(), repo.getPassword(), null ); try { - SynergyUtil.checkinDefaultTask( getLogger(), message, ccmAddr ); + SynergyTaskManager.getInstance().checkinDefaultTask( getLogger(), message, ccmAddr ); } finally { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkout/SynergyCheckOutCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkout/SynergyCheckOutCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkout/SynergyCheckOutCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/checkout/SynergyCheckOutCommand.java Sat Feb 5 23:13:10 2011 @@ -66,7 +66,7 @@ public class SynergyCheckOutCommand if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "basedir: " + fileSet.getBasedir() ); + getLogger().debug( fileSet.toString() ); } String ccmAddr = SynergyUtil.start( getLogger(), repo.getUser(), repo.getPassword(), null ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/edit/SynergyEditCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/edit/SynergyEditCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/edit/SynergyEditCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/edit/SynergyEditCommand.java Sat Feb 5 23:13:10 2011 @@ -36,6 +36,7 @@ import org.apache.maven.scm.command.edit import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.synergy.command.SynergyCommand; import org.apache.maven.scm.provider.synergy.repository.SynergyScmProviderRepository; +import org.apache.maven.scm.provider.synergy.util.SynergyTaskManager; import org.apache.maven.scm.provider.synergy.util.SynergyUtil; import org.codehaus.plexus.util.FileUtils; @@ -60,7 +61,7 @@ public class SynergyEditCommand if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "basedir: " + fileSet.getBasedir() ); + getLogger().debug( fileSet.toString() ); } String ccmAddr = SynergyUtil.start( getLogger(), repo.getUser(), repo.getPassword(), null ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/remove/SynergyRemoveCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/remove/SynergyRemoveCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/remove/SynergyRemoveCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/remove/SynergyRemoveCommand.java Sat Feb 5 23:13:10 2011 @@ -67,7 +67,7 @@ public class SynergyRemoveCommand SynergyUtil.getWorkingProject( getLogger(), repo.getProjectSpec(), repo.getUser(), ccmAddr ); if ( projectSpec == null ) { - throw new ScmException( "You should checkout project first" ); + throw new ScmException( "You should checkout a working project first" ); } File waPath = SynergyUtil.getWorkArea( getLogger(), projectSpec, ccmAddr ); File destPath = new File( waPath, repo.getProjectName() ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/tag/SynergyTagCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/tag/SynergyTagCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/tag/SynergyTagCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/tag/SynergyTagCommand.java Sat Feb 5 23:13:10 2011 @@ -75,6 +75,11 @@ public class SynergyTagCommand try { + // Make sure, that all changes made until now are reflected in the prep project + // this is especially true for all changes made by maven (ie versions in the poms). + SynergyUtil.reconfigureProperties( getLogger(), repo.getProjectSpec(), ccmAddr ); + SynergyUtil.reconfigure( getLogger(), repo.getProjectSpec(), ccmAddr); + SynergyUtil.createBaseline( getLogger(), repo.getProjectSpec(), tag, repo.getProjectRelease(), repo .getProjectPurpose(), ccmAddr ); } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/unedit/SynergyUnEditCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/unedit/SynergyUnEditCommand.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/unedit/SynergyUnEditCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/command/unedit/SynergyUnEditCommand.java Sat Feb 5 23:13:10 2011 @@ -70,7 +70,7 @@ public class SynergyUnEditCommand SynergyUtil.getWorkingProject( getLogger(), repo.getProjectSpec(), repo.getUser(), ccmAddr ); if ( projectSpec == null ) { - throw new ScmException( "You should checkout project first" ); + throw new ScmException( "You should checkout a working project first" ); } File waPath = SynergyUtil.getWorkArea( getLogger(), projectSpec, ccmAddr ); File destPath = new File( waPath, repo.getProjectName() ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java Sat Feb 5 23:13:10 2011 @@ -49,7 +49,7 @@ public class SynergyGetWorkingProjectCon { if ( logger.isDebugEnabled() ) { - logger.debug( line ); + logger.debug( "Consume: " + line ); } if ( !line.trim().equals( "" ) ) { Copied: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumer.java (from r1067545, maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java) URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumer.java?p2=maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumer.java&p1=maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java&r1=1067545&r2=1067549&rev=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyGetWorkingProjectConsumer.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumer.java Sat Feb 5 23:13:10 2011 @@ -20,45 +20,50 @@ package org.apache.maven.scm.provider.sy */ import org.apache.maven.scm.log.ScmLogger; -import org.codehaus.plexus.util.cli.StreamConsumer; +import org.apache.maven.scm.util.AbstractConsumer; /** - * Parse output of - * <p/> - * <pre> - * ccm wa -show -p <project_spec> - * </pre> - * - * @author <a href="mailto:julien.he...@capgemini.com">Julien Henry</a> - * @version $Id$ + * @author <a href="jan.malcom...@steria-mummert.de">Jan Malcomess</a> + * @since 1.5 */ -public class SynergyGetWorkingProjectConsumer - implements StreamConsumer +public class SynergyShowDefaultTaskConsumer + extends AbstractConsumer { - private ScmLogger logger; - private String projectSpec; + private int task; - public SynergyGetWorkingProjectConsumer( ScmLogger logger ) + /** + * @return the number of the current (ie default) task. 0 if current task + * is not set. + */ + public int getTask() { - this.logger = logger; + return task; } - /** {@inheritDoc} */ + public SynergyShowDefaultTaskConsumer( ScmLogger logger ) + { + super( logger ); + } + + /** + * Either <br> + * <code>taskNumber: taskSynopsis</code><br> + * or <br> + * <code>The current task is not set.</code><br> + * + * {@inheritDoc} + */ public void consumeLine( String line ) { - if ( logger.isDebugEnabled() ) + if ( getLogger().isDebugEnabled() ) { - logger.debug( line ); + getLogger().debug( "Consume: " + line ); } - if ( !line.trim().equals( "" ) ) + if ( !line.contains( "not set" ) ) { - projectSpec = line.trim(); + task = Integer.parseInt( line.substring( 0, line.indexOf( ':' ) ) ); } } - public String getProjectSpec() - { - return projectSpec; - } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyCCM.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyCCM.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyCCM.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyCCM.java Sat Feb 5 23:13:10 2011 @@ -852,5 +852,45 @@ public class SynergyCCM return cl; } + + /** + * Create commandline to get current (i.e. default) task + * + * @param ccmAddr current Synergy session ID + * @return + * @throws ScmException + */ + public static Commandline showDefaultTask( String ccmAddr ) + throws ScmException + { + Commandline cl = new Commandline(); + configureEnvironment( cl, ccmAddr ); + cl.setExecutable( CCM ); + cl.createArg().setValue( TASK ); + cl.createArg().setValue( "-default" ); + + return cl; + } + + /** + * Create commandline to set current (i.e. default) task + * + * @param task the number of the task to set as current task + * @param ccmAddr current Synergy session ID + * @return + * @throws ScmException + */ + public static Commandline setDefaultTask( int task, String ccmAddr ) + throws ScmException + { + Commandline cl = new Commandline(); + + configureEnvironment( cl, ccmAddr ); + cl.setExecutable( CCM ); + cl.createArg().setValue( TASK ); + cl.createArg().setValue( "-default" ); + cl.createArg().setValue( String.valueOf( task ) ); + return cl; + } } Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java?rev=1067549&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java Sat Feb 5 23:13:10 2011 @@ -0,0 +1,182 @@ +package org.apache.maven.scm.provider.synergy.util; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.log.ScmLogger; + +/** + * In some Synergy versions (ie. 6.5) closing a session results in de-selecting + * the current (default) task. Therefore, the maven release-plugin fails, as the + * Synergy commands, as implemented in the Synergy-SCM-Provider, always close + * their session after being executed.<br> + * This manager circumvents this problem by storing the last created task which + * causes all check outs to be associated with it. Then, when this task gets + * checked in, all associated files get checked in as well. + * + * @author <a href="jan.malcom...@steria-mummert.de">Jan Malcomess</a> + * @since 1.5 + */ +public class SynergyTaskManager +{ + /** + * No Synergy-Task was created yet. + */ + private final static short TASK_STATE_NONE = 0; + + /** + * The current Synergy-Task is created but not yet completed. + */ + private final static short TASK_STATE_CREATED = 1; + + /** + * The current Synergy-Task is completed. + */ + private final static short TASK_STATE_COMPLETED = 2; + + /** + * singleton instance. + */ + private final static SynergyTaskManager INSTANCE = new SynergyTaskManager(); + + /** + * The number of the current Synergy-Task. + */ + private int currentTaskNumber; + + /** + * The state of the current Synergy-Task. + */ + private short currentTaskState = TASK_STATE_NONE; + + /** + * @return singleton instance. + */ + public static SynergyTaskManager getInstance() + { + return INSTANCE; + } + + /** + * If necessary create a new task. Otherwise return the current task. + * + * @param logger a logger. + * @param synopsis short description of task. + * @param release release. + * @param defaultTask should this task become the default task? + * @param ccmAddr current Synergy session ID. Used to run in multi-session. + * @return Task number + * @throws ScmException + */ + public int createTask( ScmLogger logger, String synopsis, String release, boolean defaultTask, String ccmAddr ) + throws ScmException + { + if ( logger.isDebugEnabled() ) + { + logger.debug( "Synergy : Entering createTask method of SynergyTaskManager" ); + } + switch ( currentTaskState ) + { + case TASK_STATE_CREATED: + if ( defaultTask ) + { + // make sure the current task is the default task + if ( SynergyUtil.getDefaultTask( logger, ccmAddr ) != currentTaskNumber ) + { + SynergyUtil.setDefaultTask( logger, currentTaskNumber, ccmAddr ); + } + } + break; + case TASK_STATE_NONE: // fall through + case TASK_STATE_COMPLETED: + currentTaskNumber = SynergyUtil.createTask( logger, synopsis, release, defaultTask, ccmAddr ); + currentTaskState = TASK_STATE_CREATED; + break; + default: + throw new IllegalStateException( "Programming error: SynergyTaskManager is in unkown state." ); + } + if ( logger.isDebugEnabled() ) + { + logger.debug( "createTask returns " + currentTaskNumber ); + } + return currentTaskNumber; + } + + /** + * Check in (that is: complete) the default task. This is either the current task managed by + * <code>SynergyTaskManager</code> or, if none is managed, the default task.<br> + * In case no task has yet been created by <code>SynergyTaskManager</code> AND no default task is set, then this is + * an error.<br> + * However, if the task that was created by <code>SynergyTaskManager</code> has already been checked in AND no + * default task is set, then it is assumed that all files that were checked out are already checked in because + * checking in a task checks in all files associated with it. + * + * @param logger a logger. + * @param comment a comment for checkin. + * @param ccmAddr current Synergy session ID. Used to run in multi-session. + * @throws ScmException + */ + public void checkinDefaultTask( ScmLogger logger, String comment, String ccmAddr ) + throws ScmException + { + if ( logger.isDebugEnabled() ) + { + logger.debug( "Synergy : Entering checkinDefaultTask method of SynergyTaskManager" ); + } + switch ( currentTaskState ) + { + case TASK_STATE_NONE: + // if a default task is set, then check in that + // otherwise we have an error + if ( SynergyUtil.getDefaultTask( logger, ccmAddr ) != 0 ) + { + SynergyUtil.checkinDefaultTask( logger, comment, ccmAddr ); + } + else + { + throw new ScmException( + "Check in not possible: no default task is set and no task has been created with SynergyTaskManager." ); + } + break; + case TASK_STATE_CREATED: + SynergyUtil.checkinTask( logger, currentTaskNumber, comment, ccmAddr ); + currentTaskState = TASK_STATE_COMPLETED; + break; + case TASK_STATE_COMPLETED: + // if a default task is set, then check in that + // otherwise do nothing, as all tasks and all files with them have + // been checked in + if ( SynergyUtil.getDefaultTask( logger, ccmAddr ) != 0 ) + { + SynergyUtil.checkinDefaultTask( logger, comment, ccmAddr ); + } + else + { + if ( logger.isDebugEnabled() ) + { + logger.debug( "Synergy : No check in necessary as default task and all tasks created with SynergyTaskManager have already been checked in." ); + } + } + break; + default: + throw new IllegalStateException( "Programming error: SynergyTaskManager is in unkown state." ); + } + } +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyTaskManager.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyUtil.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyUtil.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyUtil.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/main/java/org/apache/maven/scm/provider/synergy/util/SynergyUtil.java Sat Feb 5 23:13:10 2011 @@ -36,6 +36,7 @@ import org.apache.maven.scm.provider.syn import org.apache.maven.scm.provider.synergy.consumer.SynergyGetTaskObjectsConsumer; import org.apache.maven.scm.provider.synergy.consumer.SynergyGetWorkingFilesConsumer; import org.apache.maven.scm.provider.synergy.consumer.SynergyGetWorkingProjectConsumer; +import org.apache.maven.scm.provider.synergy.consumer.SynergyShowDefaultTaskConsumer; import org.apache.maven.scm.provider.synergy.consumer.SynergyWorkareaConsumer; import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.CommandLineUtils; @@ -315,7 +316,7 @@ public class SynergyUtil { if ( logger.isDebugEnabled() ) { - logger.debug( "Synergy : Entering createTask method" ); + logger.debug( "Synergy : Entering createTask method of SynergyUtil" ); } if ( synopsis == null || synopsis.equals( "" ) ) @@ -609,6 +610,62 @@ public class SynergyUtil executeSynergyCommand( logger, cl, stderr, stdout, true ); } + + /** + * Get the number of the current (ie default) task. + * + * @param logger a logger. + * @param ccmAddr current Synergy session id. + * @return the number of the current (ie default) task. 0 if current task + * is not set. + * @throws ScmException + */ + public static int getDefaultTask( ScmLogger logger, String ccmAddr ) + throws ScmException + { + if ( logger.isDebugEnabled() ) + { + logger.debug( "Synergy : Entering getDefaultTask method" ); + } + + Commandline cl = SynergyCCM.showDefaultTask( ccmAddr ); + + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + SynergyShowDefaultTaskConsumer stdout = new SynergyShowDefaultTaskConsumer(logger); + + int errorCode = executeSynergyCommand( logger, cl, stderr, stdout, false ); + + if ( logger.isDebugEnabled() ) + { + logger.debug( "getDefaultTask returns " + stdout.getTask() + " with error code " + errorCode ); + } + + return stdout.getTask(); + } + + /** + * Set the current (ie default) task. + * + * @param logger a logger. + * @param task the number of the task to set as current task. + * @param ccmAddr current Synergy session id. + * @throws ScmException + */ + public static void setDefaultTask( ScmLogger logger, int task, String ccmAddr ) + throws ScmException + { + if ( logger.isDebugEnabled() ) + { + logger.debug( "Synergy : Entering setDefaultTask method" ); + } + + Commandline cl = SynergyCCM.setDefaultTask( task, ccmAddr ); + + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer(); + + executeSynergyCommand( logger, cl, stderr, stdout, true ); + } /** * Synchronize a given project. Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java?rev=1067549&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java Sat Feb 5 23:13:10 2011 @@ -0,0 +1,89 @@ +package org.apache.maven.scm.provider.synergy.consumer; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +import org.apache.maven.scm.ScmTestCase; +import org.apache.maven.scm.log.DefaultLog; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * @author <a href="mailto:jan.malcom...@steria-mummert.de">Jan Malcomess</a> + */ +public class SynergyShowDefaultTaskConsumerTest + extends ScmTestCase +{ + public void testShowDefaultTaskSet() + throws IOException + { + InputStream inputStream = getResourceAsStream( "/synergy/consumer/showDefaultTaskSet.txt" ); + + try + { + BufferedReader in = new BufferedReader( new InputStreamReader( inputStream ) ); + + String s = in.readLine(); + + SynergyShowDefaultTaskConsumer consumer = new SynergyShowDefaultTaskConsumer( new DefaultLog() ); + + while ( s != null ) + { + consumer.consumeLine( s ); + + s = in.readLine(); + } + assertEquals( 52885, consumer.getTask() ); + } + finally + { + inputStream.close(); + } + } + + public void testShowDefaultTaskNotSet() + throws IOException + { + InputStream inputStream = getResourceAsStream( "/synergy/consumer/showDefaultTaskNotSet.txt" ); + + try + { + BufferedReader in = new BufferedReader( new InputStreamReader( inputStream ) ); + + String s = in.readLine(); + + SynergyShowDefaultTaskConsumer consumer = new SynergyShowDefaultTaskConsumer( new DefaultLog() ); + + while ( s != null ) + { + consumer.consumeLine( s ); + + s = in.readLine(); + } + assertEquals( 0, consumer.getTask() ); + } + finally + { + inputStream.close(); + } + } +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/consumer/SynergyShowDefaultTaskConsumerTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/util/SynergyCCMTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/util/SynergyCCMTest.java?rev=1067549&r1=1067548&r2=1067549&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/util/SynergyCCMTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/java/org/apache/maven/scm/provider/synergy/util/SynergyCCMTest.java Sat Feb 5 23:13:10 2011 @@ -416,6 +416,23 @@ public class SynergyCCMTest assertTrue( "CCM_ADDR is not set.", assertContains( cl.getEnvironmentVariables(), "CCM_ADDR=CCM_ADDR" ) ); assertCommandLine( "ccm delimiter", null, cl ); } + + public void testShowDefaultTask() + throws Exception + { + Commandline cl = SynergyCCM.showDefaultTask( "CCM_ADDR" ); + assertTrue( "CCM_ADDR is not set.", assertContains( cl.getEnvironmentVariables(), "CCM_ADDR=CCM_ADDR" ) ); + assertCommandLine( "ccm task -default", null, cl ); + } + + public void testSetDefaultTask() + throws Exception + { + Commandline cl = SynergyCCM.setDefaultTask( 4711, "CCM_ADDR" ); + assertTrue( "CCM_ADDR is not set.", assertContains( cl.getEnvironmentVariables(), "CCM_ADDR=CCM_ADDR" ) ); + assertCommandLine( "ccm task -default 4711", null, cl ); + } + public boolean assertContains( String[] array, String value ) { Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt?rev=1067549&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt Sat Feb 5 23:13:10 2011 @@ -0,0 +1 @@ +The current task is not set. \ No newline at end of file Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskNotSet.txt ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt?rev=1067549&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt Sat Feb 5 23:13:10 2011 @@ -0,0 +1 @@ +52885: New Task for dummy \ No newline at end of file Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-synergy/src/test/resources/synergy/consumer/showDefaultTaskSet.txt ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision