Author: olamy
Date: Sun May 23 19:02:24 2010
New Revision: 947469

URL: http://svn.apache.org/viewvc?rev=947469&view=rev
Log:
[SCM-544] Add blame command to AccuRev provider
Submitted by Grant Gardner 

Added:
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
   (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/AccuRevScmProvider.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/blame/AccuRevBlameCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameConsumer.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/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/commands/blame/AccuRevBlameConsumerTest.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/accurev/annotatelog.txt

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=947469&r1=947468&r2=947469&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
 Sun May 23 19:02:24 2010
@@ -25,6 +25,8 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.maven.scm.command.blame.BlameLine;
+
 /**
  * Represents the AccuRev CLI interface
  * 
@@ -33,6 +35,8 @@ import java.util.Map;
 public interface AccuRev
 {
 
+    public static final String ACCUREV_TIME_FORMAT_STRING = "yyyy/MM/dd 
HH:mm:ss";
+
     public static final SimpleDateFormat ACCUREV_TIME_SPEC = new 
SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
 
     public static final String DEFAULT_REMOVE_MESSAGE = "removed (maven-scm)";
@@ -232,6 +236,17 @@ public interface AccuRev
         throws AccuRevException;
 
     /**
+     * AccuRev annotate an element
+     * 
+     * @param file
+     * @param lines - array which will be filled with annotated lines for the 
associated file
+     * @return
+     * @throws AccuRevException
+     */
+    boolean annotate( File baseDir, File file, List<BlameLine> lines )
+        throws AccuRevException;
+    
+    /**
      * Logins in as the given user, retains authtoken for use with subsequent 
commands.
      * 
      * @param user

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProvider.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/AccuRevScmProvider.java?rev=947469&r1=947468&r2=947469&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProvider.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/AccuRevScmProvider.java
 Sun May 23 19:02:24 2010
@@ -347,12 +347,12 @@ public class AccuRevScmProvider
     }
 
     /** {...@inheritdoc} */
+    @Override
     protected BlameScmResult blame( ScmProviderRepository repository, 
ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
-        AccuRevScmProviderRepository accuRevRepository = 
(AccuRevScmProviderRepository) repository;
-        AccuRevBlameCommand blameCommand = new AccuRevBlameCommand( 
accuRevRepository.getAccuRev().getExecutable() );
-        blameCommand.setLogger( getLogger() );
-        return (BlameScmResult) blameCommand.execute( repository, fileSet, 
parameters );
+
+        AccuRevBlameCommand blameCommand = new AccuRevBlameCommand( 
getLogger() );
+        return blameCommand.blame( repository, fileSet, parameters );
     }
 }

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=947469&r1=947468&r2=947469&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
 Sun May 23 19:02:24 2010
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Pattern;
 
+import org.apache.maven.scm.command.blame.BlameLine;
 import org.apache.maven.scm.log.DefaultLog;
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.accurev.AccuRev;
@@ -585,6 +586,16 @@ public class AccuRevCommandLine
 
     }
 
+    public boolean annotate( File basedir, File file, List<BlameLine> lines )
+        throws AccuRevException
+    {
+
+        String[] annotate = { "annotate", "-ftud" };
+        AnnotateConsumer stdout = new AnnotateConsumer( lines, getLogger() );
+
+        return executeCommandLine( basedir, annotate, 
Collections.singletonList( file ), stdout );
+    }
+    
     public boolean showRefTrees( Map<String, WorkSpace> workSpaces )
         throws AccuRevException
     {

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.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/AnnotateConsumer.java?rev=947469&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.java
 Sun May 23 19:02:24 2010
@@ -0,0 +1,78 @@
+package org.apache.maven.scm.provider.accurev.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.maven.scm.command.blame.BlameLine;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.accurev.AccuRev;
+import org.apache.maven.scm.util.AbstractConsumer;
+
+/**
+ * @author Evgeny Mandrikov
+ * @author Grant Gardner
+ * @since 1.4
+ */
+public class AnnotateConsumer
+    extends AbstractConsumer
+{
+
+    /* 3 godin 2009/11/18 16:26:33 */
+    private static final Pattern LINE_PATTERN = Pattern.compile( 
"^\\s+(\\d+)\\s+(\\w+)\\s+([0-9/]+ [0-9:]+).*" );
+
+    private List<BlameLine> lines;
+
+    public AnnotateConsumer( List<BlameLine> lines, ScmLogger scmLogger )
+    {
+
+        super( scmLogger );
+        this.lines = lines;
+    }
+
+    public void consumeLine( String line )
+    {
+
+        final Matcher matcher = LINE_PATTERN.matcher( line );
+        if ( matcher.matches() )
+        {
+            String revision = matcher.group( 1 ).trim();
+            String author = matcher.group( 2 ).trim();
+            String dateStr = matcher.group( 3 ).trim();
+
+            Date date = parseDate( dateStr, null, 
AccuRev.ACCUREV_TIME_FORMAT_STRING );
+
+            lines.add( new BlameLine( date, revision, author ) );
+        }
+        else
+        {
+            throw new RuntimeException( "Unable to parse annotation from line: 
" + line );
+        }
+    }
+
+    public List<BlameLine> getLines()
+    {
+
+        return lines;
+    }
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.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/cli/AnnotateConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommand.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/blame/AccuRevBlameCommand.java?rev=947469&r1=947468&r2=947469&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommand.java
 Sun May 23 19:02:24 2010
@@ -19,65 +19,66 @@ package org.apache.maven.scm.provider.ac
  * under the License.
  */
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.command.blame.AbstractBlameCommand;
 import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
-import org.codehaus.plexus.util.cli.CommandLineException;
-import org.codehaus.plexus.util.cli.CommandLineUtils;
-import org.codehaus.plexus.util.cli.Commandline;
-
-import java.io.File;
+import org.apache.maven.scm.provider.accurev.AccuRev;
+import org.apache.maven.scm.provider.accurev.AccuRevException;
+import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
+import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommand;
 
 /**
  * @author Evgeny Mandrikov
+ * @author Grant Gardner
  * @since 1.4
  */
 public class AccuRevBlameCommand
-    extends AbstractBlameCommand
+    extends AbstractAccuRevCommand
 {
-    private final String accurevExecutable;
 
-    public AccuRevBlameCommand( String accurevExec )
+    public AccuRevBlameCommand( ScmLogger logger )
     {
-        accurevExecutable = accurevExec;
+
+        super( logger );
     }
 
-    public BlameScmResult executeBlameCommand( ScmProviderRepository repo, 
ScmFileSet workingDirectory, String filename )
-        throws ScmException
+    @SuppressWarnings( "unchecked" )
+    @Override
+    protected BlameScmResult executeAccurevCommand( 
AccuRevScmProviderRepository repository, ScmFileSet fileSet,
+                                                    CommandParameters 
parameters )
+        throws ScmException, AccuRevException
     {
-        Commandline cl = createCommandLine( accurevExecutable, 
workingDirectory.getBasedir(), filename );
 
-        AccuRevBlameConsumer consumer = new AccuRevBlameConsumer( getLogger() 
);
+        AccuRev accuRev = repository.getAccuRev();
+        List/* <BlameLine> */lines = new ArrayList();
 
-        CommandLineUtils.StringStreamConsumer stderr = new 
CommandLineUtils.StringStreamConsumer();
+        File file = new File( parameters.getString( CommandParameter.FILE ) );
 
-        int exitCode;
+        boolean success = accuRev.annotate( fileSet.getBasedir(), file, lines 
);
 
-        try
-        {
-            exitCode = CommandLineUtils.executeCommandLine( cl, consumer, 
stderr );
-        }
-        catch ( CommandLineException ex )
+        if ( success )
         {
-            throw new ScmException( "Error while executing command.", ex );
+            return new BlameScmResult( accuRev.getCommandLines(), lines );
         }
-        if ( exitCode != 0 )
+        else
         {
-            return new BlameScmResult( cl.toString(), "The accurev command 
failed.", stderr.getOutput(), false );
+            return new BlameScmResult( accuRev.getCommandLines(), "AccuRev 
Error", accuRev.getErrorOutput(), false );
         }
 
-        return new BlameScmResult( cl.toString(), consumer.getLines() );
     }
 
-    public static Commandline createCommandLine( String accurevExecutable, 
File workingDirectory, String filename )
+    public BlameScmResult blame( ScmProviderRepository repository, ScmFileSet 
fileSet, CommandParameters parameters )
+        throws ScmException
     {
-        Commandline cl = new Commandline();
-        cl.setExecutable( accurevExecutable );
-        cl.setWorkingDirectory( workingDirectory );
-        cl.createArg().setValue( "annotate" );
-        cl.createArg().setValue( filename );
-        return cl;
+
+        return (BlameScmResult) execute( repository, fileSet, parameters );
     }
 }

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameConsumer.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/blame/AccuRevBlameConsumer.java?rev=947469&r1=947468&r2=947469&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameConsumer.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/main/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameConsumer.java
 Sun May 23 19:02:24 2010
@@ -1,79 +0,0 @@
-package org.apache.maven.scm.provider.accurev.command.blame;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.scm.command.blame.BlameLine;
-import org.apache.maven.scm.log.ScmLogger;
-import org.apache.maven.scm.util.AbstractConsumer;
-import org.apache.regexp.RE;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author Evgeny Mandrikov
- * @since 1.4
- */
-public class AccuRevBlameConsumer
-    extends AbstractConsumer
-{
-    private static final String ACCUREV_TIMESTAMP_PATTERN = "yyyy/MM/dd 
HH:mm:ss";
-
-    /* 3 godin 2009/11/18 16:26:33 */
-    private static final String LINE_PATTERN = "\\s+(\\d+)\\s+(\\w+)\\s+([^ ]+ 
[^ ]+)";
-
-    /**
-     * @see #LINE_PATTERN
-     */
-    private RE lineRegexp;
-
-    private List lines = new ArrayList();
-
-    public AccuRevBlameConsumer( ScmLogger logger )
-    {
-        super( logger );
-        lineRegexp = new RE( LINE_PATTERN );
-    }
-
-    public void consumeLine( String line )
-    {
-        if ( lineRegexp.match( line ) )
-        {
-            String revision = lineRegexp.getParen( 1 ).trim();
-            String author = lineRegexp.getParen( 2 ).trim();
-            String dateStr = lineRegexp.getParen( 3 ).trim();
-
-            if ( getLogger().isDebugEnabled() )
-            {
-                getLogger().debug( author + " " + dateStr );
-            }
-
-            Date date = parseDate( dateStr, null, ACCUREV_TIMESTAMP_PATTERN );
-
-            lines.add( new BlameLine( date, revision, author ) );
-        }
-    }
-
-    public List getLines()
-    {
-        return lines;
-    }
-}

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=947469&r1=947468&r2=947469&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
 Sun May 23 19:02:24 2010
@@ -1,4 +1,4 @@
---------------
+ --------------
  Maven SCM AccuRev provider
  --------------
  Grant Gardner
@@ -187,13 +187,15 @@ SCM Commands  
 
   List the changes promoted into a stream between timestamps. 
   
-  <<<accurev hist -s <stream> -t T1-T2>>>>
+  <<<accurev hist -s <stream> -t T1-T2>>>
   
   <<NOTE>> This will not pickup changes promoted into a parent stream
   
   <<TODO>> Filter results based on supplied fileSet.
   
-  <<TODO>> Filter results based on URL's project path.       
+  <<TODO>> Filter results based on URL's project path.
+  
+  <<TODO>> Use diff -v <stream> -V <stream> -t T1-T2 to get files that have 
changed upstream      
 
 * Diff
   
@@ -210,7 +212,7 @@ SCM Commands  
   If no versions specified and stream is in URL, then compare workspace to 
that stream
   * <<< accurev diff -v <urlStream> >>>
   
-  If no versions specified and no strema in URL, then compare workspace to 
basis stream
+  If no versions specified and no stream in URL, then compare workspace to 
basis stream
   * <<< accurev diff -b >>>
 
   
@@ -218,6 +220,14 @@ SCM Commands  
 
   <<<accurev defunct>>> the elements specified in the fileset, or the whole 
basedir
   
+* Blame
+
+  <<<accurev annotate>>> the specified file
+  
+  file must be in a workspace/reftree
+  
+  <<TODO>> Question why blame uses CommandParameter.FILE instead of just the 
fileset, also why not blame on a version?
+  
 * Branch
 
   Not implemented.
@@ -228,4 +238,4 @@ SCM Commands  
 Troubleshooting
  
   Generally to get yourself out of trouble you'll need to manipulate AccuRev 
externally by moving workspaces around
-  bumping versions, reparenting streams.  
\ No newline at end of file
+  bumping versions, reparenting streams.  

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=947469&r1=947468&r2=947469&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
 Sun May 23 19:02:24 2010
@@ -35,6 +35,7 @@ import java.util.Collections;
 import java.util.List;
 
 import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.command.blame.BlameLine;
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.accurev.AccuRev;
 import org.apache.maven.scm.provider.accurev.AccuRevStat;
@@ -530,4 +531,20 @@ public class AccuRevCommandLineTest
 
     }
 
+    @Test
+    public void testAnnotate()
+        throws Exception
+    {
+
+        File basedir = new File( "/my/workspace" );
+        File file = new File( "src/main/java/foo.java" );
+
+        AccuRevCommandLineTester accuRevCL = new AccuRevCommandLineTester();
+        accuRevCL.annotate( basedir, file, new ArrayList<BlameLine>() );
+
+        Commandline lastCL = accuRevCL.getCommandline();
+        assertThat( lastCL.getWorkingDirectory(), is( 
basedir.getCanonicalFile() ) );
+        assertThat( lastCL.getArguments(), is( new String[] { "annotate", 
"-ftud", file.getPath() } ) );
+
+    }
 }

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.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/AnnotateConsumerTest.java?rev=947469&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
 Sun May 23 19:02:24 2010
@@ -0,0 +1,66 @@
+
+package org.apache.maven.scm.provider.accurev.cli;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.command.blame.BlameLine;
+import org.apache.maven.scm.log.DefaultLog;
+import org.apache.maven.scm.provider.accurev.AccuRev;
+import org.junit.Test;
+
+/**
+ * @author Evgeny Mandrikov
+ * @author Grant Gardner
+ */
+public class AnnotateConsumerTest extends ScmTestCase {
+
+    @Test
+    public void testParse() throws Exception {
+
+        List<BlameLine> consumedLines = new ArrayList<BlameLine>();
+
+        AnnotateConsumer consumer = new AnnotateConsumer(consumedLines, new 
DefaultLog());
+
+        AccuRevJUnitUtil.consume("/annotate.txt", consumer);
+
+        Assert.assertEquals(12, consumer.getLines().size());
+
+        BlameLine line1 = (BlameLine) consumer.getLines().get(0);
+        Assert.assertEquals("2", line1.getRevision());
+        Assert.assertEquals("godin", line1.getAuthor());
+        assertThat(line1.getDate(), 
is(AccuRev.ACCUREV_TIME_SPEC.parse("2008/10/26 16:26:44")));
+
+        BlameLine line12 = (BlameLine) consumer.getLines().get(11);
+        Assert.assertEquals("1", line12.getRevision());
+        Assert.assertEquals("godin", line12.getAuthor());
+        assertThat(line12.getDate(), 
is(AccuRev.ACCUREV_TIME_SPEC.parse("2008/10/17 11:41:50")));
+
+    }
+
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/cli/AnnotateConsumerTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.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/blame/AccuRevBlameCommandTckTest.java?rev=947469&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
 Sun May 23 19:02:24 2010
@@ -0,0 +1,132 @@
+package org.apache.maven.scm.provider.accurev.command.blame;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.InputStream;
+
+import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
+import org.apache.maven.scm.provider.accurev.cli.AccuRevJUnitUtil;
+import org.apache.maven.scm.provider.accurev.command.AccuRevTckUtil;
+import org.apache.maven.scm.tck.command.blame.BlameCommandTckTest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+...@runwith( JUnit4.class )
+public class AccuRevBlameCommandTckTest
+    extends BlameCommandTckTest
+{
+
+    private AccuRevTckUtil accurevTckTestUtil = new AccuRevTckUtil();
+
+    @Override
+    protected InputStream getCustomConfiguration()
+        throws Exception
+
+    {
+
+        return AccuRevJUnitUtil.getPlexusConfiguration();
+    }
+
+    @Override
+    @Test
+    public void testBlameCommand()
+        throws Exception
+    {
+
+        super.testBlameCommand();
+    }
+
+    @Override
+    protected void verifyResult( BlameScmResult result )
+    {
+
+        assertThat( result, is( not( nullValue() ) ) );
+        assertThat( result.getLines().size(), is( 1 ) );
+
+    }
+
+    @Override
+    @Before
+    public void setUp()
+        throws Exception
+    {
+
+        super.setUp();
+    }
+
+    @Override
+    protected File getWorkingCopy()
+    {
+
+        return accurevTckTestUtil.getWorkingCopy();
+    }
+
+    @Override
+    protected File getAssertionCopy()
+    {
+
+        return accurevTckTestUtil.getAssertionCopy();
+    }
+
+    @Override
+    public String getScmUrl()
+        throws Exception
+    {
+
+        return accurevTckTestUtil.getScmUrl();
+    }
+
+    @Override
+    public void initRepo()
+        throws Exception
+    {
+
+        accurevTckTestUtil.initRepo( getContainer() );
+        System.setProperty( AccuRevScmProviderRepository.TAG_PREFIX, 
accurevTckTestUtil.getDepotName() + "_" );
+    }
+
+    @Override
+    @After
+    public void tearDown()
+        throws Exception
+    {
+
+        try
+        {
+            accurevTckTestUtil.tearDown();
+            accurevTckTestUtil.removeWorkSpace( getWorkingCopy() );
+            accurevTckTestUtil.removeWorkSpace( getAssertionCopy() );
+
+        }
+        finally
+        {
+            System.clearProperty( AccuRevScmProviderRepository.TAG_PREFIX );
+            super.tearDown();
+        }
+    }
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTckTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.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/blame/AccuRevBlameCommandTest.java?rev=947469&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
 Sun May 23 19:02:24 2010
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.accurev.command.blame;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.maven.scm.provider.accurev.AddElementsAction.*;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.blame.BlameLine;
+import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
+import 
org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommandTest;
+import org.jmock.Expectations;
+import org.junit.Test;
+
+public class AccuRevBlameCommandTest
+    extends AbstractAccuRevCommandTest
+{
+
+    @SuppressWarnings( "unchecked" )
+    @Test
+    public void testBlame()
+        throws Exception
+    {
+
+        final File file = new File( "src/main/java/Foo.java" );
+        final ScmFileSet testFileSet = new ScmFileSet( basedir, file );
+
+        final Date date = new Date();
+        final BlameLine blameLine = new BlameLine( date, "12", "theAuthor" );
+
+        context.checking( new Expectations()
+        {
+
+            {
+                one( accurev ).annotate( with( basedir ), with( file ), with( 
any( List.class ) ) );
+                will( doAll( addElementsTo( 2, blameLine ), returnValue( true 
) ) );
+                inSequence( sequence );
+
+            }
+        } );
+
+        AccuRevScmProviderRepository repo = new AccuRevScmProviderRepository();
+        repo.setStreamName( "myStream" );
+        repo.setAccuRev( accurev );
+        repo.setProjectPath( "/project/dir" );
+
+        AccuRevBlameCommand command = new AccuRevBlameCommand( getLogger() );
+
+        CommandParameters commandParameters = new CommandParameters();
+        commandParameters.setString( CommandParameter.FILE, file.getPath() );
+        BlameScmResult result = command.blame( repo, testFileSet, 
commandParameters );
+
+        context.assertIsSatisfied();
+
+        assertThat( result.isSuccess(), is( true ) );
+        assertThat( result.getLines().size(), is( 1 ) );
+        assertThat( ( (BlameLine) result.getLines().get( 0 ) ), is( blameLine 
) );
+
+    }
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/blame/AccuRevBlameCommandTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/commands/blame/AccuRevBlameConsumerTest.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/commands/blame/AccuRevBlameConsumerTest.java?rev=947469&r1=947468&r2=947469&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/commands/blame/AccuRevBlameConsumerTest.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/commands/blame/AccuRevBlameConsumerTest.java
 Sun May 23 19:02:24 2010
@@ -1,67 +0,0 @@
-package org.apache.maven.scm.provider.accurev.commands.blame;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-
-import junit.framework.Assert;
-
-import org.apache.maven.scm.ScmTestCase;
-import org.apache.maven.scm.command.blame.BlameLine;
-import org.apache.maven.scm.log.DefaultLog;
-import 
org.apache.maven.scm.provider.accurev.command.blame.AccuRevBlameConsumer;
-
-/**
- * @author Evgeny Mandrikov
- */
-public class AccuRevBlameConsumerTest
-    extends ScmTestCase
-{
-
-    public void testParse()
-        throws Exception
-    {
-        File testFile = 
getTestFile("src/test/resources/accurev/annotatelog.txt");
-
-        AccuRevBlameConsumer consumer = new AccuRevBlameConsumer(new 
DefaultLog());
-
-        FileInputStream fis = new FileInputStream(testFile);
-        BufferedReader in = new BufferedReader(new InputStreamReader(fis));
-        String s = in.readLine();
-        while (s != null) {
-            consumer.consumeLine(s);
-            s = in.readLine();
-        }
-
-        Assert.assertEquals(12, consumer.getLines().size());
-
-        BlameLine line1 = (BlameLine) consumer.getLines().get(0);
-        Assert.assertEquals("2", line1.getRevision());
-        Assert.assertEquals("godin", line1.getAuthor());
-
-        BlameLine line12 = (BlameLine) consumer.getLines().get(11);
-        Assert.assertEquals("1", line12.getRevision());
-        Assert.assertEquals("godin", line12.getAuthor());
-    }
-
-}

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/accurev/annotatelog.txt
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/accurev/annotatelog.txt?rev=947469&r1=947468&r2=947469&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/accurev/annotatelog.txt
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/accurev/annotatelog.txt
 Sun May 23 19:02:24 2010
@@ -1,12 +0,0 @@
-       2 godin           2008/10/26 16:26:44   <project 
xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       2 godin           2008/10/26 16:26:44            
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
-       2 godin           2008/10/26 16:26:44       
<modelVersion>4.0.0</modelVersion>
-       3 godin           2009/11/18 16:26:33
-       3 godin           2009/11/18 16:26:33       <distributionManagement>
-       3 godin           2009/11/18 16:26:33           <repository>
-       3 godin           2009/11/18 16:26:33               <id>localhost</id>
-       3 godin           2009/11/18 16:26:33               <name>dumping to 
target</name>
-       3 godin           2009/11/18 16:26:33               
<url>file://${basedir}/target/repo/</url>
-       3 godin           2009/11/18 16:26:33           </repository>
-       3 godin           2009/11/18 16:26:33       </distributionManagement>
-       1 godin           2008/10/17 11:41:50   </project>

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt?rev=947469&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
 Sun May 23 19:02:24 2010
@@ -0,0 +1,12 @@
+       2 godin           2008/10/26 16:26:44   <project 
xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       2 godin           2008/10/26 16:26:44            
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       2 godin           2008/10/26 16:26:44       
<modelVersion>4.0.0</modelVersion>
+       3 godin           2009/11/18 16:26:33
+       3 godin           2009/11/18 16:26:33       <distributionManagement>
+       3 godin           2009/11/18 16:26:33           <repository>
+       3 godin           2009/11/18 16:26:33               <id>localhost</id>
+       3 godin           2009/11/18 16:26:33               <name>dumping to 
target</name>
+       3 godin           2009/11/18 16:26:33               
<url>file://${basedir}/target/repo/</url>
+       3 godin           2009/11/18 16:26:33           </repository>
+       3 godin           2009/11/18 16:26:33       </distributionManagement>
+       1 godin           2008/10/17 11:41:50   </project>

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-accurev/src/test/resources/annotate.txt
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to