Author: olamy
Date: Wed Jan 26 10:50:40 2011
New Revision: 1063671

URL: http://svn.apache.org/viewvc?rev=1063671&view=rev
Log:
[SCM-599] Implements a git info command

Added:
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
   (with props)
Modified:
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
    maven/scm/trunk/pom.xml

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java?rev=1063671&r1=1063670&r2=1063671&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
 Wed Jan 26 10:50:40 2011
@@ -19,6 +19,10 @@ package org.apache.maven.scm.provider.gi
  * under the License.
  */
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
@@ -31,6 +35,7 @@ import org.apache.maven.scm.command.chec
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.command.info.InfoScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
@@ -39,15 +44,10 @@ import org.apache.maven.scm.command.upda
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
-import org.apache.maven.scm.provider.git.command.info.GitInfoScmResult;
 import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * SCM Provider for git
  *
@@ -303,12 +303,12 @@ public abstract class AbstractGitScmProv
 
     protected abstract GitCommand getInfoCommand();
 
-    public GitInfoScmResult info( ScmProviderRepository repository, ScmFileSet 
fileSet, CommandParameters parameters )
+    public InfoScmResult info( ScmProviderRepository repository, ScmFileSet 
fileSet, CommandParameters parameters )
         throws ScmException
     {
         GitCommand cmd = getInfoCommand();
 
-        return (GitInfoScmResult) executeCommand( cmd, repository, fileSet, 
parameters );
+        return (InfoScmResult) executeCommand( cmd, repository, fileSet, 
parameters );
     }
 
     /** {@inheritDoc} */

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java?rev=1063671&r1=1063670&r2=1063671&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/GitExeScmProvider.java
 Wed Jan 26 10:50:40 2011
@@ -23,9 +23,9 @@ import java.io.File;
 
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.info.InfoScmResult;
 import org.apache.maven.scm.provider.git.AbstractGitScmProvider;
 import org.apache.maven.scm.provider.git.command.GitCommand;
-import org.apache.maven.scm.provider.git.command.info.GitInfoScmResult;
 import org.apache.maven.scm.provider.git.gitexe.command.add.GitAddCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.blame.GitBlameCommand;
 import 
org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand;
@@ -33,11 +33,13 @@ import org.apache.maven.scm.provider.git
 import 
org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand;
 import 
org.apache.maven.scm.provider.git.gitexe.command.checkout.GitCheckOutCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.diff.GitDiffCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.info.GitInfoCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.list.GitListCommand;
 import 
org.apache.maven.scm.provider.git.gitexe.command.remove.GitRemoveCommand;
 import 
org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.tag.GitTagCommand;
 import 
org.apache.maven.scm.provider.git.gitexe.command.update.GitUpdateCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 
 /**
@@ -123,7 +125,7 @@ public class GitExeScmProvider
     /** {@inheritDoc} */
     public GitCommand getInfoCommand()
     {
-        return null; //X TODO
+        return new GitInfoCommand();
     }
 
     /** {@inheritDoc} */
@@ -138,7 +140,8 @@ public class GitExeScmProvider
     {
         // Note: I need to supply just 1 absolute path, but ScmFileSet won't 
let me without
         // a basedir (which isn't used here anyway), so use a dummy file.
-        GitInfoScmResult result = info( null, new ScmFileSet( new File( "" ), 
path ), null );
+        // and a dummy ScmProviderRepository
+        InfoScmResult result = info( new 
GitScmProviderRepository(path.getPath()), new ScmFileSet( path ), null );
 
         if ( result.getInfoItems().size() != 1 )
         {

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java?rev=1063671&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
 Wed Jan 26 10:50:40 2011
@@ -0,0 +1,43 @@
+package org.apache.maven.scm.provider.git.gitexe.command.info;
+
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.AbstractCommand;
+import org.apache.maven.scm.command.info.InfoScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author Olivier Lamy
+ *
+ */
+public class GitInfoCommand
+ extends AbstractCommand
+    implements GitCommand
+{
+
+    @Override
+    protected ScmResult executeCommand( ScmProviderRepository repository, 
ScmFileSet fileSet,
+                                        CommandParameters parameters )
+        throws ScmException
+    {
+        Commandline cli = GitCommandLineUtils.getBaseGitCommandLine( 
fileSet.getBasedir(), "show" );
+        GitInfoConsumer consumer = new GitInfoConsumer( getLogger(), fileSet );
+        CommandLineUtils.StringStreamConsumer stderr = new 
CommandLineUtils.StringStreamConsumer();
+        
+        int exitCode = GitCommandLineUtils.execute( cli, consumer, stderr, 
getLogger() );
+        if ( exitCode != 0 )
+        {
+            throw new UnsupportedOperationException();
+        }
+        return new InfoScmResult( cli.toString(), consumer.getInfoItems() );
+    }
+
+    
+
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java?rev=1063671&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
 Wed Jan 26 10:50:40 2011
@@ -0,0 +1,63 @@
+/**
+ * 
+ */
+package org.apache.maven.scm.provider.git.gitexe.command.info;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.info.InfoItem;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.util.AbstractConsumer;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author Olivier Lamy
+ *
+ */
+public class GitInfoConsumer
+    extends AbstractConsumer
+{
+
+    //$ git show
+    //commit cd3c0dfacb65955e6fbb35c56cc5b1bf8ce4f767
+
+    private List<InfoItem> infoItems = new ArrayList<InfoItem>( 1 );
+
+    private ScmFileSet scmFileSet;
+    public GitInfoConsumer( ScmLogger logger, ScmFileSet scmFileSet )
+    {
+        super( logger );
+        this.scmFileSet = scmFileSet;
+    }
+    
+    /**
+     * @see 
org.codehaus.plexus.util.cli.StreamConsumer#consumeLine(java.lang.String)
+     */
+    public void consumeLine( String line )
+    {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( "consume line " + line );
+        }
+        
+        if ( infoItems.isEmpty() )
+        {
+            if ( !StringUtils.isEmpty( line ) && line.startsWith( "commit" ) )
+            {
+                InfoItem infoItem = new InfoItem();
+                infoItem.setRevision( StringUtils.trim( line.substring( 
"commit".length() ) ) );
+                infoItem.setURL( scmFileSet.getBasedir().getPath() );
+                infoItems.add( infoItem );
+            }
+        }
+
+    }
+
+    public List<InfoItem> getInfoItems()
+    {
+        return infoItems;
+    }
+
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java?rev=1063671&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
 Wed Jan 26 10:50:40 2011
@@ -0,0 +1,46 @@
+package org.apache.maven.scm.provider.git.gitexe.command.info;
+
+import java.io.File;
+
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.command.info.InfoScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.gitexe.GitExeScmProvider;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class GitInfoCommandTckTest
+    extends ScmTestCase
+{
+    
+    public void testInfoCommand() throws Exception
+    {
+        GitScmTestUtils.initRepo( "src/test/resources/git/info", 
getRepositoryRoot(), getWorkingCopy() );
+        GitExeScmProvider provider = (GitExeScmProvider) 
getScmManager().getProviderByUrl( getScmUrl() );
+        ScmProviderRepository repository = provider.makeProviderScmRepository( 
getRepositoryRoot() );
+        assertNotNull( repository );
+        InfoScmResult result = provider.info( repository, new ScmFileSet( 
getRepositoryRoot() ), new CommandParameters() );
+        assertNotNull( result );
+        assertEquals( "cd3c0dfacb65955e6fbb35c56cc5b1bf8ce4f767", 
result.getInfoItems().get( 0 ).getRevision() );
+        // 
+    }
+    
+    protected File getRepositoryRoot()
+    {
+        return PlexusTestCase.getTestFile( 
"target/scm-test/repository/git/info" );
+    }
+
+    public String getScmUrl()
+        throws Exception
+    {
+        return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+    }
+    
+    protected File getWorkingCopy()
+    {
+        return PlexusTestCase.getTestFile( "target/scm-test/git/info" );
+    }    
+
+}

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt?rev=1063671&view=auto
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
 Wed Jan 26 10:50:40 2011
@@ -0,0 +1 @@
+a simple test file

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/info/foo.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=1063671&r1=1063670&r2=1063671&view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Wed Jan 26 10:50:40 2011
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven-parent</artifactId>
-    <version>18</version>
+    <version>19-SNAPSHOT</version>
     <relativePath>../pom/maven/pom.xml</relativePath>
   </parent>
 
@@ -298,12 +298,12 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-plugin</artifactId>
-          <version>2.7.1</version>
+          <version>2.7.2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-report-plugin</artifactId>
-          <version>2.7.1</version>
+          <version>2.7.2</version>
         </plugin>             
       </plugins>
     </pluginManagement>
@@ -393,4 +393,18 @@
     </profile>
 
   </profiles>
+  
+  <repositories>
+    <repository>
+      <id>apache.snapshots</id>
+      <url>https://repository.apache.org/content/groups/snapshots-group/</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>  
+  
 </project>


Reply via email to