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>