Author: olamy Date: Sat Dec 4 22:22:50 2010 New Revision: 1042247 URL: http://svn.apache.org/viewvc?rev=1042247&view=rev Log: [SCM-586] AccuRev 4.9 compatibility Submitted by Grant Gardner .
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java (with props) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRev.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevCapability.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevInfo.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProviderRepository.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevVersion.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLine.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevExtractSourceCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/status/AccuRevStatusCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/index.apt maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/tcktests.apt maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/todos.apt maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/AccuRevCapabilityTest.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLineTest.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevCommandTest.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommandTest.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommandTest.java Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRev.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRev.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRev.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRev.java Sat Dec 4 22:22:50 2010 @@ -56,15 +56,20 @@ public interface AccuRev void reset(); /** - * Populate external to a workspace a specific version, to a specific location. + * Populate external to a workspace a (stream) and transactionId/time, to a specific location. + * + * <p> + * You must check {...@link AccuRevCapability#POPULATE_TO_TRANSACTION} before passing a tranid/time + * to this method. If not supported should pass "now","highest" or null for tranSpec * * @param basedir - * @param versionSpec + * @param stream stream to update to + * @param tranSpec transaction to update to or "now" if not supported. * @param elements (must be depot relative. if null "/./" root is used) * @return * @throws AccuRevException */ - List<File> pop( File basedir, String versionSpec, Collection<File> elements ) + List<File> popExternal( File basedir, String stream, String tranSpec, Collection<File> elements ) throws AccuRevException; /** @@ -244,8 +249,8 @@ public interface AccuRev /** * AccuRev annotate an element - * @param file * + * @param file * @return * @throws AccuRevException */ @@ -263,10 +268,10 @@ public interface AccuRev boolean login( String user, String password ) throws AccuRevException; - Map<String, WorkSpace> showWorkSpaces( ) + Map<String, WorkSpace> showWorkSpaces() throws AccuRevException; - Map<String, WorkSpace> showRefTrees( ) + Map<String, WorkSpace> showRefTrees() throws AccuRevException; Stream showStream( String stream ) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevCapability.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevCapability.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevCapability.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevCapability.java Sat Dec 4 22:22:50 2010 @@ -19,30 +19,30 @@ package org.apache.maven.scm.provider.ac * under the License. */ -public enum AccuRevCapability -{ - DIFF_BETWEEN_STREAMS( "4.7.2", null ); - - private String fromVersion; - - private String toVersion; - - private AccuRevCapability( String fromVersion, String toVersion ) - { - this.fromVersion = fromVersion; - this.toVersion = toVersion; - } - - /** - * @todo simple string compare because the version numbers have never used more than one digit. - * @param version - * @return if the capability is available for this version - */ - public boolean isSupported( String version ) - { - return ( fromVersion == null || fromVersion.compareTo( version ) <= 0 ) - && ( toVersion == null || toVersion.compareTo( version ) >= 0 ); +public enum AccuRevCapability { + DIFF_BETWEEN_STREAMS("4.7.2", null), POPULATE_TO_TRANSACTION("4.9.0", "4.9.9"), STAT_ADDED_NOT_PROMOTED_BUG("4.9.0","4.9.9"); - } + public static final String DEFAULT_VERSION_FOR_TESTS = "4.9.0"; + + private String fromVersion; + + private String toVersion; + + private AccuRevCapability(String fromVersion, String toVersion) { + this.fromVersion = fromVersion; + this.toVersion = toVersion; + } + + /** + * @todo simple string compare because the version numbers have never used + * more than one digit. + * @param version + * @return if the capability is available for this version + */ + public boolean isSupported(String version) { + return (fromVersion == null || fromVersion.compareTo(version) <= 0) + && (toVersion == null || toVersion.compareTo(version) >= 0); + + } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevInfo.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevInfo.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevInfo.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevInfo.java Sat Dec 4 22:22:50 2010 @@ -21,6 +21,8 @@ package org.apache.maven.scm.provider.ac import java.io.File; +import org.apache.maven.scm.provider.accurev.util.WorkspaceUtils; + public class AccuRevInfo { @@ -105,6 +107,7 @@ public class AccuRevInfo public AccuRevInfo( File basedir ) { + this.basedir = basedir; } @@ -113,14 +116,16 @@ public class AccuRevInfo return getWorkSpace() != null; } - public boolean isWorkSpaceTop() - { - return ( getTop() != null ) && getBasedir().equals( new File( getTop() ) ); - } public boolean isLoggedIn() { return !( this.user == null || "(not logged in)".equals( this.user ) ); } + public boolean isWorkSpaceTop() + { + return WorkspaceUtils.isSameFile( this.getBasedir(), this.getTop() ); + + } + } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProviderRepository.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProviderRepository.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProviderRepository.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProviderRepository.java Sat Dec 4 22:22:50 2010 @@ -29,6 +29,7 @@ import java.util.regex.Pattern; import org.apache.maven.scm.ScmVersion; import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost; +import org.apache.maven.scm.provider.accurev.util.WorkspaceUtils; import org.codehaus.plexus.util.StringUtils; public class AccuRevScmProviderRepository @@ -107,16 +108,16 @@ public class AccuRevScmProviderRepositor */ public boolean isWorkSpaceRoot( AccuRevInfo info ) { - - return ( ( getProjectPath() != null && info.getBasedir().equals( new File( info.getTop(), getProjectPath() ) ) ) || isWorkSpaceTop( info ) ); + return ( ( getProjectPath() != null && WorkspaceUtils.isSameFile(info.getBasedir(), new File( info.getTop(), getProjectPath() ) ) ) || isWorkSpaceTop( info ) ); } public boolean isWorkSpaceTop( AccuRevInfo info ) { - return info.isWorkSpaceTop(); + return info.isWorkSpaceTop(); } + String tagToStream( String tagName ) { return String.format( getTagFormat(), tagName ); @@ -351,14 +352,14 @@ public class AccuRevScmProviderRepositor public static String formatTimeSpec( Date when ) { - + if ( when == null ) { return "now"; } - + return AccuRev.ACCUREV_TIME_SPEC.format( when ); - + } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevVersion.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevVersion.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevVersion.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevVersion.java Sat Dec 4 22:22:50 2010 @@ -2,6 +2,8 @@ package org.apache.maven.scm.provider.ac import java.util.Date; +import org.codehaus.plexus.util.StringUtils; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -21,48 +23,46 @@ import java.util.Date; * under the License. */ -public class AccuRevVersion -{ +public class AccuRevVersion { + + private String basisStream; + + private String timeSpec; + + public AccuRevVersion(String basisStream, String tran) { + + this.basisStream = basisStream; + this.timeSpec = tran; + } + + public String getBasisStream() { + return basisStream; + } + + public String getTimeSpec() { + return timeSpec; + } + + public AccuRevVersion(String basis, Date startDate) { + this(basis, AccuRev.ACCUREV_TIME_SPEC.format(startDate)); + } + + public AccuRevVersion(String basis, long transactionId) { + this(basis, Long.toString(transactionId)); + } - private String basisStream; + public boolean isNow() { + return isNow(this.timeSpec); + } - private String timeSpec; + @Override + public String toString() { + return String.format("AccuRevVersion: stream = %s, transaction= %s", + basisStream, timeSpec); + } - public AccuRevVersion( String basisStream, String tran ) - { - - this.basisStream = basisStream; - this.timeSpec = tran; - } - - public String getBasisStream() - { - return basisStream; - } - - public String getTimeSpec() - { - return timeSpec; - } - - public AccuRevVersion( String basis, Date startDate ) - { - this( basis, AccuRev.ACCUREV_TIME_SPEC.format( startDate ) ); - } - - public AccuRevVersion( String basis, long transactionId ) - { - this( basis, Long.toString( transactionId ) ); - } - - public boolean isNow() - { - return timeSpec == null || "highest".equalsIgnoreCase( timeSpec ) || "now".equalsIgnoreCase( timeSpec ); - } - - @Override - public String toString() - { - return String.format( "AccuRevVersion: stream = %s, transaction= %s", basisStream, timeSpec ); - } + public static boolean isNow(String timeSpec) { + return StringUtils.isBlank(timeSpec) || "highest".equalsIgnoreCase(timeSpec) + || "now".equalsIgnoreCase(timeSpec); + } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLine.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLine.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLine.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLine.java Sat Dec 4 22:22:50 2010 @@ -36,6 +36,7 @@ import org.apache.maven.scm.provider.acc import org.apache.maven.scm.provider.accurev.AccuRevException; import org.apache.maven.scm.provider.accurev.AccuRevInfo; import org.apache.maven.scm.provider.accurev.AccuRevStat; +import org.apache.maven.scm.provider.accurev.AccuRevVersion; import org.apache.maven.scm.provider.accurev.CategorisedElements; import org.apache.maven.scm.provider.accurev.FileDifference; import org.apache.maven.scm.provider.accurev.Stream; @@ -78,15 +79,12 @@ public class AccuRevCommandLine public AccuRevCommandLine() { - super(); reset(); - } public AccuRevCommandLine( String host, int port ) { - this(); setServer( host, port ); } @@ -251,6 +249,7 @@ public class AccuRevCommandLine errorOutput = new StringBuffer(); cl.getShell().setQuotedArgumentsEnabled( true ); cl.setExecutable( executable ); + try { cl.addSystemEnvironment(); @@ -259,7 +258,7 @@ public class AccuRevCommandLine { if ( getLogger().isDebugEnabled() ) { - getLogger().warn( "Unable to obtain system environment", e ); + getLogger().debug( "Unable to obtain system environment", e ); } else { @@ -279,7 +278,6 @@ public class AccuRevCommandLine String[] mkws = { "mkws", "-b", basisStream, "-w", workspaceName, "-l", basedir.getAbsolutePath() }; return executeCommandLine( mkws ); - } /** @@ -555,7 +553,7 @@ public class AccuRevCommandLine : null; } - public List<File> pop( File basedir, String versionSpec, Collection<File> elements ) + public List<File> popExternal( File basedir, String versionSpec, String tranSpec, Collection<File> elements ) throws AccuRevException { @@ -564,10 +562,24 @@ public class AccuRevCommandLine elements = Collections.singletonList( new File( "/./" ) ); } - String[] pop = { "pop", "-v", versionSpec, "-L", basedir.getAbsolutePath(), "-R" }; + if ( StringUtils.isBlank( tranSpec ) ) + { + tranSpec = "now"; + } + + String[] popArgs; + if ( AccuRevVersion.isNow( tranSpec ) ) + { + popArgs = new String[] { "pop", "-v", versionSpec, "-L", basedir.getAbsolutePath(), "-R" }; + } + else //this will BARF for pre 4.9.0, but clients are expected to check AccuRevCapability before calling. + { + popArgs = new String[] { "pop", "-v", versionSpec, "-L", basedir.getAbsolutePath(), "-t", tranSpec, "-R" }; + } + List<File> poppedFiles = new ArrayList<File>(); - return executeCommandLine( basedir, pop, elements, FileConsumer.POPULATE_PATTERN, poppedFiles ) ? poppedFiles + return executeCommandLine( basedir, popArgs, elements, FileConsumer.POPULATE_PATTERN, poppedFiles ) ? poppedFiles : null; } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevExtractSourceCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevExtractSourceCommand.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevExtractSourceCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevExtractSourceCommand.java Sat Dec 4 22:22:50 2010 @@ -52,10 +52,6 @@ public abstract class AbstractAccuRevExt ScmVersion scmVersion = parameters.getScmVersion( CommandParameter.SCM_VERSION, null ); - AccuRevVersion accuRevVersion = repository.getAccuRevVersion( scmVersion ); - - String basisStream = accuRevVersion.getBasisStream(); - String transactionId = accuRevVersion.getTimeSpec(); File basedir = fileSet.getBasedir(); String outputDirectory = parameters.getString( CommandParameter.OUTPUT_DIRECTORY, null ); @@ -74,17 +70,19 @@ public abstract class AbstractAccuRevExt throw new ScmException( "Checkout directory " + basedir.getAbsolutePath() + " not empty" ); } - List<File> checkedOutFiles = extractSource( repository, basedir, basisStream, transactionId ); + AccuRevVersion accuRevVersion = repository.getAccuRevVersion( scmVersion ); + + List<File> checkedOutFiles = extractSource( repository, basedir, accuRevVersion ); List<ScmFile> scmFiles = checkedOutFiles == null ? null : getScmFiles( checkedOutFiles, ScmFileStatus.CHECKED_OUT ); - return getScmResult( repository, scmFiles ); + return getScmResult( repository, scmFiles, scmVersion ); } - protected abstract ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles ); + protected abstract ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles, ScmVersion scmVersion ); protected abstract List<File> extractSource( AccuRevScmProviderRepository repository, File basedir, - String basisStream, String transactionId ) + AccuRevVersion version ) throws AccuRevException; } \ No newline at end of file Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommand.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommand.java Sat Dec 4 22:22:50 2010 @@ -28,6 +28,7 @@ import org.apache.maven.scm.ScmException import org.apache.maven.scm.ScmFile; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmVersion; import org.apache.maven.scm.command.checkout.CheckOutScmResult; import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.ScmProviderRepository; @@ -35,6 +36,7 @@ import org.apache.maven.scm.provider.acc import org.apache.maven.scm.provider.accurev.AccuRevException; import org.apache.maven.scm.provider.accurev.AccuRevInfo; import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository; +import org.apache.maven.scm.provider.accurev.AccuRevVersion; import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevExtractSourceCommand; public class AccuRevCheckOutCommand @@ -55,8 +57,7 @@ public class AccuRevCheckOutCommand } @Override - protected List<File> extractSource( AccuRevScmProviderRepository repository, File basedir, String basisStream, - String transactionId ) + protected List<File> extractSource( AccuRevScmProviderRepository repository, File basedir, AccuRevVersion version ) throws AccuRevException { AccuRev accuRev = repository.getAccuRev(); @@ -64,6 +65,9 @@ public class AccuRevCheckOutCommand AccuRevInfo info = accuRev.info( basedir ); List<File> extractedFiles = new ArrayList<File>(); + + String basisStream = version.getBasisStream(); + String transactionId = version.getTimeSpec(); boolean success = true; if ( info.isWorkSpace() ) @@ -86,6 +90,9 @@ public class AccuRevCheckOutCommand if ( success ) { // repopulate everything in the workspace. + // note we do NOT want -t here, we just fill in any missing files + // to the current transaction watermark... + // the update later on will get the extra files List<File> poppedFiles = accuRev.pop( basedir, null ); if ( poppedFiles != null ) { @@ -107,6 +114,12 @@ public class AccuRevCheckOutCommand String workSpaceName = getWorkSpaceName( basedir, basisStream ); success = accuRev.mkws( basisStream, workSpaceName, basedir ); + + //Even though a new workspace starts with "0" as the high water mark + //it can't be updated to anything less than its own mkstream transaction + //now is close enough since even if something does sneak inbetween we + //were just lucky that it didn't happen before... + transactionId = "now"; if ( success ) { @@ -130,7 +143,7 @@ public class AccuRevCheckOutCommand } @Override - protected ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles ) + protected ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles , ScmVersion version) { AccuRev accuRev = repository.getAccuRev(); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommand.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommand.java Sat Dec 4 22:22:50 2010 @@ -28,15 +28,18 @@ import org.apache.maven.scm.ScmException import org.apache.maven.scm.ScmFile; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmVersion; import org.apache.maven.scm.command.export.ExportScmResult; +import org.apache.maven.scm.command.export.ExportScmResultWithRevision; import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.accurev.AccuRev; +import org.apache.maven.scm.provider.accurev.AccuRevCapability; import org.apache.maven.scm.provider.accurev.AccuRevException; import org.apache.maven.scm.provider.accurev.AccuRevInfo; import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository; +import org.apache.maven.scm.provider.accurev.AccuRevVersion; import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevExtractSourceCommand; -import org.codehaus.plexus.util.StringUtils; public class AccuRevExportCommand extends AbstractAccuRevExtractSourceCommand @@ -54,14 +57,22 @@ public class AccuRevExportCommand } @Override - protected List<File> extractSource( AccuRevScmProviderRepository repository, File basedir, String basisStream, - String transactionId ) + protected List<File> extractSource( AccuRevScmProviderRepository repository, File basedir, AccuRevVersion version ) throws AccuRevException { AccuRev accuRev = repository.getAccuRev(); AccuRevInfo info = accuRev.info( basedir ); + String basisStream = version.getBasisStream(); + String transactionId = version.getTimeSpec(); - validateTransactionId( transactionId ); + if ( !AccuRevVersion.isNow( transactionId ) + && !AccuRevCapability.POPULATE_TO_TRANSACTION.isSupported( accuRev.getClientVersion() ) ) + { + getLogger().warn( + String.format( "Ignoring transaction id %s, Export can only extract current sources", + transactionId ) ); + transactionId = "now"; + } boolean removedWorkspace = false; @@ -88,8 +99,11 @@ public class AccuRevExportCommand try { - return accuRev.pop( basedir, basisStream, - Collections.singletonList( new File( repository.getDepotRelativeProjectPath() ) ) ); + return accuRev.popExternal( + basedir, + basisStream, + transactionId, + Collections.singletonList( new File( repository.getDepotRelativeProjectPath() ) ) ); } finally @@ -101,31 +115,21 @@ public class AccuRevExportCommand } } - private void validateTransactionId( String transactionId ) - throws AccuRevException - { - if ( StringUtils.isBlank( transactionId ) ) - { - return; - } - - transactionId = transactionId.trim(); - - if ( "highest".equals( transactionId ) || "now".equals( transactionId ) ) - { - return; - } - - getLogger().warn( String.format("Ignoring transaction id %s, Export can only extract current sources",transactionId )); - } - @Override - protected ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles ) + protected ScmResult getScmResult( AccuRevScmProviderRepository repository, List<ScmFile> scmFiles, + ScmVersion scmVersion ) { AccuRev accuRev = repository.getAccuRev(); if ( scmFiles != null ) { - return new ExportScmResult( accuRev.getCommandLines(), scmFiles ); + if ( scmVersion == null ) + { + return new ExportScmResult( accuRev.getCommandLines(), scmFiles ); + } + else + { + return new ExportScmResultWithRevision( accuRev.getCommandLines(), scmFiles, scmVersion.toString() ); + } } else { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/status/AccuRevStatusCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/status/AccuRevStatusCommand.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/status/AccuRevStatusCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/status/AccuRevStatusCommand.java Sat Dec 4 22:22:50 2010 @@ -33,6 +33,7 @@ import org.apache.maven.scm.command.stat import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.accurev.AccuRev; +import org.apache.maven.scm.provider.accurev.AccuRevCapability; import org.apache.maven.scm.provider.accurev.AccuRevException; import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository; import org.apache.maven.scm.provider.accurev.AccuRevStat; @@ -101,9 +102,19 @@ public class AccuRevStatusCommand return error( accuRev, "Failed stat backing stream to split modified and added elements" ); } - List<File> addedElements = catElems.getNonMemberElements(); modifiedElements = catElems.getMemberElements(); + List<File> addedElements; + if ( AccuRevCapability.STAT_ADDED_NOT_PROMOTED_BUG.isSupported( accuRev.getClientVersion() ) ) + { + modOrAddedElements.removeAll( modifiedElements ); + addedElements = modOrAddedElements; + } + else + { + addedElements = catElems.getNonMemberElements(); + } + List<File> missingElements = accuRev.stat( basedir, elements, AccuRevStat.MISSING ); if ( missingElements == null ) Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java?rev=1042247&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java Sat Dec 4 22:22:50 2010 @@ -0,0 +1,48 @@ +package org.apache.maven.scm.provider.accurev.util; + +import java.io.File; +import java.io.IOException; + +public class WorkspaceUtils +{ + public static boolean isSameFile( File file1, String filename2) + { + return isSameFile( file1, filename2 == null ? null : new File( filename2 ) ); + + } + + //We need to canonicalise the files (if we can) before we compare them.. + public static boolean isSameFile( File file1, File file2 ) + { + + if ( file1 == file2 || ( file1 == null && file2 == null ) ) + { + return true; + } + + if ( file1 == null || file2 == null ) + { + return false; + } + + try + { + file1 = file1.getCanonicalFile(); + } + catch ( IOException ioEx ) + { + //Oh well, we'll compare the non-canonicalised file then. + } + + try + { + file2 = file2.getCanonicalFile(); + } + catch ( IOException ioEx ) + { + //Oh well, we'll compare the non-canonicalised file then. + } + return file1.equals( file2 ); + } + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/util/WorkspaceUtils.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/index.apt URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/index.apt?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/index.apt (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/index.apt Sat Dec 4 22:22:50 2010 @@ -12,11 +12,11 @@ Use Cases The provider must handle a number of different use cases: - * DONE Label a source tree and check out that label to a temp directory (the release plugin) - - * DONE: Check out to a directory or update that source regularly as part of a build server (Continuum) + * Label a source tree and check out that label to a temp directory (the release plugin) + + * Provide a changelog between dates/revisions and checkout code to a directory (Continuum et al) - * MOST: Map a number of commands designed for CVS/SVN onto the semantics provided by AccuRev (the scm plugin) + * Map a number of commands designed for CVS/SVN onto the semantics provided by AccuRev (the scm plugin) Details @@ -108,7 +108,8 @@ SCM Commands The final step is to update the workspace to the tranid/timestamp specified in the supplied version (or "highest" if not specified). Note that workspaces cannot go backwards, even when reparented or repopulated and you will get - "transaction out of range" errors if you try. + "transaction out of range" errors if you try. Since you can't update a workspace to a transaction less than one used + to create it, any transaction information supplied for an initial checkout will be silently ignored. * Non persistent checkout @@ -119,6 +120,8 @@ SCM Commands A populate outside of a workspace <<<accurev pop -V -l >>> If the checkout directory exists within a subdirectory of a workspace AccuRev would normally generate an error. To work around this restriction the existing workspace is temporarily deactivated during the export. + + For AccuRev 4.9.x the provider supports export to a specific tranid/timestamp. * Tag @@ -133,7 +136,7 @@ SCM Commands Equivalent to <<<accurev update>>>. The working directory must be in a workspace (or reftree) and that whole workspace is updated. - + here has been the option to populate to a specific transaction id. A version of the form basisStream/timeSpec can be supplied (tag/branch/revision). If the basis stream of this version is different to the current basis of the workspace, then a <<<accurev chws>>> is performed. The timespec component is passed as the <<< -t >>> option to the update command. If not supplied the timespec is set to "highest". @@ -165,7 +168,9 @@ SCM Commands * <<<accurev stat -m>>> modified files * <<<accurev stat -b>>> to find state of kept and modified files in the backing stream to determine - whether their Maven ScmFileStatus is "ADDED" or "MODIFIED" + whether their Maven ScmFileStatus is "ADDED" or "MODIFIED". An unintended change in stat -b output + for AccuRev 4.9.0 breaks this distinction. + * <<<accurev stat -M>>> missing files => "MISSING" status Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/tcktests.apt URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/tcktests.apt?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/tcktests.apt (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/tcktests.apt Sat Dec 4 22:22:50 2010 @@ -6,7 +6,7 @@ January 2009 -------------- -Junit4 + JMock +Junit4 + Mockito This provider requires Java 1.5 and generally uses Junit4 annotations and <<<assertThat>>> syntax with {{{http://hamcrest.org}Hamcrest}} matchers. Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/todos.apt URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/todos.apt?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/todos.apt (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/site/apt/todos.apt Sat Dec 4 22:22:50 2010 @@ -8,7 +8,9 @@ * Handle replicas - * Issue package on checkout - from a special file? + * Issue package on checkin - from a special file? + + * Issues in changelog output * consider using a property to specify workspace name. (or pattern %s replaced with basisStream+baseName) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/AccuRevCapabilityTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/AccuRevCapabilityTest.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/AccuRevCapabilityTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/AccuRevCapabilityTest.java Sat Dec 4 22:22:50 2010 @@ -36,4 +36,13 @@ public class AccuRevCapabilityTest assertThat( AccuRevCapability.DIFF_BETWEEN_STREAMS.isSupported( "4.7.4" ), is( true ) ); assertThat( AccuRevCapability.DIFF_BETWEEN_STREAMS.isSupported( "5.0.1" ), is( true ) ); } + + @Test + public void testPopToTransaction() + throws Exception + { + assertThat( AccuRevCapability.POPULATE_TO_TRANSACTION.isSupported( "4.7.4b" ), is( false ) ); + assertThat( AccuRevCapability.POPULATE_TO_TRANSACTION.isSupported( "4.9.0c" ), is( true ) ); + assertThat( AccuRevCapability.POPULATE_TO_TRANSACTION.isSupported( "5.0.1" ), is( false ) ); + } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLineTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLineTest.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLineTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AccuRevCommandLineTest.java Sat Dec 4 22:22:50 2010 @@ -228,7 +228,7 @@ public class AccuRevCommandLineTest } @Test - public void testPop() + public void testPopExternal() throws Exception { @@ -236,15 +236,47 @@ public class AccuRevCommandLineTest accuRevCL.setExecutable( "accurev.exe" ); File testfile = new File( "/my/export" ); File projectDir = new File( "/./project/dir" ); - accuRevCL.pop( testfile, "stream/12", Collections.singleton( projectDir ) ); + accuRevCL.popExternal( testfile, "stream", "12", Collections.singleton( projectDir ) ); Commandline lastCL = accuRevCL.getCommandline(); assertThat( lastCL.getExecutable(), is( "accurev.exe" ) ); - assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream/12", "-L", - testfile.getAbsolutePath(), "-R", projectDir.getPath() } ) ); + assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L", + testfile.getAbsolutePath(), "-t", "12", "-R", projectDir.getPath() } ) ); + + } + + @Test + public void testPopExternalWithTransactionNow() + throws Exception + { + AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester( "aHost", 5051 ); + accuRevCL.setExecutable( "accurev.exe" ); + File testfile = new File( "/my/export" ); + File projectDir = new File( "/./project/dir" ); + accuRevCL.popExternal( testfile, "stream", "now", Collections.singleton( projectDir ) ); + Commandline lastCL = accuRevCL.getCommandline(); + assertThat( lastCL.getExecutable(), is( "accurev.exe" ) ); + assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L", + testfile.getAbsolutePath(), "-R", projectDir.getPath() } ) ); } + + @Test + public void testPopExternalWithTransactionNull() + throws Exception + { + AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester( "aHost", 5051 ); + accuRevCL.setExecutable( "accurev.exe" ); + File testfile = new File( "/my/export" ); + File projectDir = new File( "/./project/dir" ); + accuRevCL.popExternal( testfile, "stream", null, Collections.singleton( projectDir ) ); + Commandline lastCL = accuRevCL.getCommandline(); + assertThat( lastCL.getExecutable(), is( "accurev.exe" ) ); + assertThat( lastCL.getArguments(), is( new String[] { "pop", "-H", "aHost:5051", "-v", "stream", "-L", + testfile.getAbsolutePath(), "-R", projectDir.getPath() } ) ); + } + @Test public void testPopWorkSpace() throws Exception Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevCommandTest.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevCommandTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/AbstractAccuRevCommandTest.java Sat Dec 4 22:22:50 2010 @@ -78,7 +78,7 @@ public abstract class AbstractAccuRevCom when( accurev.getCommandLines() ).thenReturn( "accurev mock" ); when( accurev.getErrorOutput() ).thenReturn( "accurev mock error output" ); - when( accurev.getClientVersion() ).thenReturn( "4.7.4b" ); + when( accurev.getClientVersion() ).thenReturn( "4.9.0" ); when( accurev.showStream( "myStream" ) ).thenReturn( new Stream( "myStream", 10L, "myDepot", 1L, "myDepot", new Date(), "normal" ) ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommandTest.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommandTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/checkout/AccuRevCheckOutCommandTest.java Sat Dec 4 22:22:50 2010 @@ -35,10 +35,10 @@ import org.apache.maven.scm.CommandParam import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.ScmRevision; import org.apache.maven.scm.ScmTag; import org.apache.maven.scm.command.checkout.CheckOutScmResult; import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommandTest; -import org.junit.Before; import org.junit.Test; /** @@ -54,15 +54,6 @@ public class AccuRevCheckOutCommandTest extends AbstractAccuRevCommandTest { - @Before - public void setUp() - throws Exception - { - super.setUp(); - when( accurev.info( basedir ) ).thenReturn( info ); - - } - @SuppressWarnings( "unchecked" ) @Test public void testCheckout() @@ -73,7 +64,7 @@ public class AccuRevCheckOutCommandTest true ); List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) ); - when( accurev.update( basedir, null ) ).thenReturn( updatedFiles ); + when( accurev.update( basedir, "now" ) ).thenReturn( updatedFiles ); AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() ); @@ -94,7 +85,7 @@ public class AccuRevCheckOutCommandTest when( accurev.mkws( "myStream", AccuRevCheckOutCommand.getWorkSpaceName( basedir, "myStream" ), basedir ) ).thenReturn( true ); - when( accurev.update( basedir, null ) ).thenReturn( null ); + when( accurev.update( basedir, "now" ) ).thenReturn( null ); AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() ); @@ -145,7 +136,7 @@ public class AccuRevCheckOutCommandTest when( accurev.chws( basedir, "someOldStream_someUser", "mySnapShot" ) ).thenReturn( true ); List<File> emptyPop = Collections.emptyList(); - when( accurev.pop( basedir, null ) ).thenReturn( emptyPop ); + when( accurev.popExternal( basedir, null, null, null ) ).thenReturn( emptyPop ); List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) ); when( accurev.update( basedir, null ) ).thenReturn( updatedFiles ); @@ -183,4 +174,57 @@ public class AccuRevCheckOutCommandTest } + @Test + public void testCheckoutToVersionNewWorkspace() + throws Exception + { + + when( accurev.mkws( "anotherStream", AccuRevCheckOutCommand.getWorkSpaceName( basedir, "anotherStream" ), basedir ) ).thenReturn( + true ); + + List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) ); + when( accurev.update( basedir, "now" ) ).thenReturn( updatedFiles ); + + AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() ); + + CommandParameters parameters = new CommandParameters(); + parameters.setScmVersion( CommandParameter.SCM_VERSION, new ScmRevision( "anotherStream/12" ) ); + + CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), parameters ); + + assertThat( result.isSuccess(), is( true ) ); + assertThat( result.getCheckedOutFiles().size(), is( 1 ) ); + + } + + @Test + public void testCheckoutToVersionExistingWorkspace() + throws Exception + { + + // Set the info result to return a workspace that already exists + info.setWorkSpace( "someOldStream_someUser" ); + info.setBasis( "myStream" ); + info.setTop( basedir.getAbsolutePath() ); + + List<File> emptyList = Collections.emptyList(); + + when( accurev.pop( basedir, null ) ).thenReturn( emptyList ); + + List<File> updatedFiles = Collections.singletonList( new File( "updated/file" ) ); + when( accurev.update( basedir, "12" ) ).thenReturn( updatedFiles ); + + AccuRevCheckOutCommand command = new AccuRevCheckOutCommand( getLogger() ); + + CommandParameters parameters = new CommandParameters(); + parameters.setScmVersion( CommandParameter.SCM_VERSION, new ScmRevision( "myStream/12" ) ); + CheckOutScmResult result = command.checkout( repo, new ScmFileSet( basedir ), parameters ); + + verify( accurev ).pop( basedir, null ); + + assertThat( result.isSuccess(), is( true ) ); + assertThat( result.getCheckedOutFiles().size(), is( 1 ) ); + + } + } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommandTest.java?rev=1042247&r1=1042246&r2=1042247&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommandTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/export/AccuRevExportCommandTest.java Sat Dec 4 22:22:50 2010 @@ -53,6 +53,35 @@ public class AccuRevExportCommandTest { @Test + public void testExportToVersionPre490() + throws Exception + { + // info defaults to no workspace... + info.setWorkSpace( null ); + + when( accurev.info( basedir ) ).thenReturn( info ); + + // A version that does not support pop -t + when( accurev.getClientVersion()).thenReturn( "4.7.4b" ); + + List<File> poppedFiles = Collections.singletonList( new File( "exported/file" ) ); + when( + accurev.popExternal( eq( basedir ), eq( "mySnapShot" ), eq( "now" ), + (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( + poppedFiles ); + + AccuRevExportCommand command = new AccuRevExportCommand( getLogger() ); + + CommandParameters params = new CommandParameters(); + params.setScmVersion( CommandParameter.SCM_VERSION, new ScmTag( "mySnapShot/676" ) ); + + ExportScmResult result = command.export( repo, new ScmFileSet( basedir ), params ); + + assertTrue( result.isSuccess() ); + assertHasScmFile( result.getExportedFiles(), "exported/file", ScmFileStatus.CHECKED_OUT ); + + } + @Test public void testExportVersionOutSideWorkspace() throws Exception { @@ -64,9 +93,9 @@ public class AccuRevExportCommandTest List<File> poppedFiles = Collections.singletonList( new File( "exported/file" ) ); when( - accurev.pop( eq( basedir ), eq( "mySnapShot" ), - (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( - poppedFiles ); + accurev.popExternal( eq( basedir ), eq( "mySnapShot" ), eq( (String) null ), + (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( + poppedFiles ); AccuRevExportCommand command = new AccuRevExportCommand( getLogger() ); @@ -88,15 +117,16 @@ public class AccuRevExportCommandTest // info defaults to no workspace... info.setWorkSpace( null ); when( accurev.info( basedir ) ).thenReturn( info ); - + when( accurev.getClientVersion()).thenReturn( "4.9.0" ); when( - accurev.pop( eq( basedir ), eq( "mySnapShot" ), - (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( null ); + accurev.popExternal( eq( basedir ), eq( "mySnapShot" ), eq("544"), + (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( + null ); AccuRevExportCommand command = new AccuRevExportCommand( getLogger() ); CommandParameters params = new CommandParameters(); - params.setScmVersion( CommandParameter.SCM_VERSION, new ScmTag( "mySnapShot" ) ); + params.setScmVersion( CommandParameter.SCM_VERSION, new ScmTag( "mySnapShot/544")); ExportScmResult result = command.export( repo, new ScmFileSet( basedir ), params ); @@ -119,9 +149,9 @@ public class AccuRevExportCommandTest when( accurev.rmws( "myStream_me" ) ).thenReturn( Boolean.TRUE ); List<File> poppedFiles = Collections.singletonList( new File( "exported/file" ) ); when( - accurev.pop( eq( basedir ), eq( "mySnapShot" ), - (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( - poppedFiles ); + accurev.popExternal( eq( basedir ), eq( "mySnapShot" ), eq( "now" ), + (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( + poppedFiles ); when( accurev.reactivate( "myStream_me" ) ).thenReturn( Boolean.TRUE ); repo.setPersistCheckout( true ); @@ -156,9 +186,9 @@ public class AccuRevExportCommandTest when( accurev.rmws( "myStream_me" ) ).thenReturn( Boolean.TRUE ); List<File> poppedFiles = Collections.singletonList( new File( "exported/file" ) ); when( - accurev.pop( eq( basedir ), eq( "mySnapShot" ), - (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( - poppedFiles ); + accurev.popExternal( eq( basedir ), eq( "mySnapShot" ), eq( "now" ), + (Collection<File>) argThat( hasItem( new File( "/./project/dir" ) ) ) ) ).thenReturn( + poppedFiles ); when( accurev.reactivate( "myStream_me" ) ).thenReturn( Boolean.TRUE ); repo.setPersistCheckout( false );