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 );


Reply via email to