You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ol...@apache.org on 2010/03/11 21:45:01 UTC
svn commit: r922015 [1/2] - in /maven/scm/trunk:
maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/
maven-scm-api/src/main/java/org/apache/maven/scm/manager/
maven-scm-api/src/main/java/org/apache/maven/scm/provider/
maven-scm-providers/ma...
Author: olamy
Date: Thu Mar 11 20:44:59 2010
New Revision: 922015
URL: http://svn.apache.org/viewvc?rev=922015&view=rev
Log:
[SCM-532] add support for blame command
Submitted by Evgeny Mandrikov
Added:
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java (with props)
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java (with props)
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.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/blame/
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/blame/GitBlameCommand.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/blame/GitBlameConsumer.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/blame/
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/blame/GitExeBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/blame/GitBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/blame/SvnBlameCommand.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/blame/SvnBlameConsumer.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/blame/SvnExeBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/blame/
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svntest/src/main/java/org/apache/maven/scm/provider/svn/command/blame/SvnBlameCommandTckTest.java (with props)
maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/blame/
maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/blame/BlameCommandTckTest.java (with props)
Modified:
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/pom.xml
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-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.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/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/manager/ScmManagerStub.java
maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,49 @@
+package org.apache.maven.scm.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.CommandParameter;
+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.provider.ScmProviderRepository;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public abstract class AbstractBlameCommand
+ extends AbstractCommand
+{
+ public abstract BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory,
+ String filename )
+ throws ScmException;
+
+ protected ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet workingDirectory,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ String file = parameters.getString( CommandParameter.FILE );
+
+ return executeBlameCommand( repository, workingDirectory, file );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/AbstractBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.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 java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class BlameLine
+ implements Serializable
+{
+ private Date date;
+
+ private String revision;
+
+ private String author;
+
+ public BlameLine( Date date, String revision, String author )
+ {
+ setDate( date );
+ setRevision( revision );
+ setAuthor( author );
+ }
+
+ public String getRevision()
+ {
+ return revision;
+ }
+
+ public void setRevision( String revision )
+ {
+ this.revision = revision;
+ }
+
+ public String getAuthor()
+ {
+ return author;
+ }
+
+ public void setAuthor( String author )
+ {
+ this.author = author;
+ }
+
+ public Date getDate()
+ {
+ if ( date != null )
+ {
+ return (Date) date.clone();
+ }
+ return null;
+ }
+
+ public void setDate( Date date )
+ {
+ if ( date != null )
+ {
+ this.date = new Date( date.getTime() );
+ }
+ else
+ {
+ this.date = null;
+ }
+ }
+}
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameLine.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,58 @@
+package org.apache.maven.scm.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.ScmResult;
+
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class BlameScmResult
+ extends ScmResult
+{
+ private List lines;
+
+ public BlameScmResult( String commandLine, List /* BlameLine */ lines )
+ {
+ this( commandLine, null, null, true );
+
+ this.lines = lines;
+ }
+
+ public BlameScmResult( String commandLine, String providerMessage, String commandOutput, boolean success )
+ {
+ super( commandLine, providerMessage, commandOutput, success );
+ }
+
+ public BlameScmResult( List /* BlameLine */ lines, ScmResult scmResult )
+ {
+ super( scmResult );
+
+ this.lines = lines;
+ }
+
+ public List /* BlameLine */ getLines()
+ {
+ return lines;
+ }
+}
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/blame/BlameScmResult.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/AbstractScmManager.java Thu Mar 11 20:44:59 2010
@@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmException
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
@@ -571,4 +572,11 @@ public abstract class AbstractScmManager
return this.getProviderByRepository( repository ).update( repository, fileSet, version, lastUpdate,
datePattern );
}
+
+ /** {@inheritDoc} */
+ public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
+ throws ScmException
+ {
+ return this.getProviderByRepository( repository ).blame( repository, fileSet, filename );
+ }
}
Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java Thu Mar 11 20:44:59 2010
@@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmException
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
@@ -114,7 +115,7 @@ public interface ScmManager
*
* @param providerType The provider type, eg. <code>cvs</code>
* @param providerImplementation The provider implementation (the role-hint of the provider),
- * eg. <code>cvs</code>, <code>cvs_native</code>
+ * eg. <code>cvs</code>, <code>cvs_native</code>
*/
void setScmProviderImplementation( String providerType, String providerImplementation );
@@ -600,4 +601,17 @@ public interface ScmManager
UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate,
String datePattern )
throws ScmException;
+
+ /**
+ * Returns the blame of specified file
+ *
+ * @param repository the source control system
+ * @param fileSet location of your local copy
+ * @param filename file
+ * @return blame for specified file
+ * @since 1.4
+ * @throws ScmException if any
+ */
+ BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
+ throws ScmException;
}
Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java Thu Mar 11 20:44:59 2010
@@ -30,6 +30,7 @@ import org.apache.maven.scm.ScmRevision;
import org.apache.maven.scm.ScmTagParameters;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
@@ -896,6 +897,26 @@ public abstract class AbstractScmProvide
throw new NoSuchCommandScmException( "update" );
}
+ /** {@inheritDoc} */
+ public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
+ throws ScmException
+ {
+ login( repository, fileSet );
+
+ CommandParameters parameters = new CommandParameters();
+
+ parameters.setString( CommandParameter.FILE, filename);
+
+ return blame( repository.getProviderRepository(), fileSet, parameters );
+ }
+
+ protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ throw new NoSuchCommandScmException( "blame" );
+ }
+
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java Thu Mar 11 20:44:59 2010
@@ -26,6 +26,7 @@ import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTagParameters;
import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
@@ -156,11 +157,11 @@ public interface ScmProvider
*/
BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
throws ScmException;
-
+
/**
* Branch (or label in some systems) will create a branch of the source file with a certain
* branch name
- *
+ *
* @param repository the source control system
* @param fileSet the files to branch. Implementations can also give the changes from the
* {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
@@ -171,7 +172,7 @@ public interface ScmProvider
* @throws ScmException if any
*/
BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, ScmBranchParameters scmBranchParameters )
- throws ScmException;
+ throws ScmException;
/**
* Returns the changes that have happend in the source control system in a certain period of time.
@@ -600,7 +601,7 @@ public interface ScmProvider
*/
TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
throws ScmException;
-
+
/**
* Tag (or label in some systems) will tag the source file with a certain tag
*
@@ -612,9 +613,9 @@ public interface ScmProvider
* @return
* @since 1.2
* @throws ScmException if any
- */
+ */
TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, ScmTagParameters scmTagParameters )
- throws ScmException;
+ throws ScmException;
/**
* Updates the copy on the local machine with the changes in the repository
@@ -833,4 +834,17 @@ public interface ScmProvider
*/
ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version )
throws ScmException;
+
+ /**
+ * Returns the blame of specified file
+ *
+ * @param repository the source control system
+ * @param fileSet location of your local copy
+ * @param filename file
+ * @since 1.4
+ * @return blame for specified file
+ * @throws ScmException
+ */
+ BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
+ throws ScmException;
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java Thu Mar 11 20:44:59 2010
@@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmException
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -36,6 +37,7 @@ import org.apache.maven.scm.provider.Abs
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.bazaar.command.BazaarConstants;
import org.apache.maven.scm.provider.bazaar.command.add.BazaarAddCommand;
+import org.apache.maven.scm.provider.bazaar.command.blame.BazaarBlameCommand;
import org.apache.maven.scm.provider.bazaar.command.changelog.BazaarChangeLogCommand;
import org.apache.maven.scm.provider.bazaar.command.checkin.BazaarCheckInCommand;
import org.apache.maven.scm.provider.bazaar.command.checkout.BazaarCheckOutCommand;
@@ -227,4 +229,15 @@ public class BazaarScmProvider
return (UpdateScmResult) command.execute( repository, fileSet, parameters );
}
+
+ /** {@inheritDoc} */
+ protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException
+ {
+ BazaarBlameCommand command = new BazaarBlameCommand();
+
+ command.setLogger( getLogger() );
+
+ return (BlameScmResult) command.execute( repository, fileSet, parameters );
+ }
}
\ No newline at end of file
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,53 @@
+package org.apache.maven.scm.provider.bazaar.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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.blame.AbstractBlameCommand;
+import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.bazaar.BazaarUtils;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class BazaarBlameCommand
+ extends AbstractBlameCommand
+{
+ public static final String BLAME_CMD = "blame";
+
+ /**
+ * {@inheritDoc}
+ */
+ public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory,
+ String filename )
+ throws ScmException
+ {
+ String[] cmd = new String[]{BLAME_CMD, "--all", // Show annotations on all lines
+ "--long", // Show commit date in annotations
+ filename};
+ BazaarBlameConsumer consumer = new BazaarBlameConsumer( getLogger() );
+ ScmResult result = BazaarUtils.execute( consumer, getLogger(), workingDirectory.getBasedir(), cmd );
+ return new BlameScmResult( consumer.getLines(), result );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,69 @@
+package org.apache.maven.scm.provider.bazaar.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.ScmFileStatus;
+import org.apache.maven.scm.command.blame.BlameLine;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class BazaarBlameConsumer
+ extends BazaarConsumer
+{
+ private static final String BAZAAR_TIMESTAMP_PATTERN = "yyyyMMdd";
+
+ private List lines = new ArrayList();
+
+ public BazaarBlameConsumer( ScmLogger logger )
+ {
+ super( logger );
+ }
+
+ public void doConsume( ScmFileStatus status, String trimmedLine )
+ {
+ /*1 godin@godin 20100131*/
+ String annotation = trimmedLine.substring( 0, trimmedLine.indexOf( '|' ) ).trim();
+
+ String dateStr = annotation.substring( annotation.lastIndexOf( ' ' ) + 1 );
+ annotation = annotation.substring( 0, annotation.lastIndexOf( ' ' ) );
+
+ String author = annotation.substring( annotation.lastIndexOf( ' ' ) + 1 );
+ annotation = annotation.substring( 0, annotation.lastIndexOf( ' ' ) );
+
+ String revision = annotation.trim();
+
+ Date date = parseDate( dateStr, null, BAZAAR_TIMESTAMP_PATTERN );
+
+ lines.add( new BlameLine( date, revision, author ) );
+ }
+
+ public List getLines()
+ {
+ return lines;
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameConsumer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,59 @@
+package org.apache.maven.scm.provider.bazaar.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.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.bazaar.BazaarRepoUtils;
+import org.apache.maven.scm.tck.command.blame.BlameCommandTckTest;
+
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ */
+public class BazaarBlameCommandTckTest
+ extends BlameCommandTckTest
+{
+ public String getScmUrl()
+ throws Exception
+ {
+ return BazaarRepoUtils.getScmUrl();
+ }
+
+ public void initRepo()
+ throws Exception
+ {
+ BazaarRepoUtils.initRepo();
+ }
+
+ protected boolean isTestDateTime()
+ {
+ return false;
+ }
+
+ protected void verifyResult( BlameScmResult result )
+ {
+ List lines = result.getLines();
+ assertEquals( "Expected 1 line in blame", 1, lines.size() );
+ BlameLine line = (BlameLine) lines.get( 0 );
+ assertEquals( "1", line.getRevision() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/blame/BazaarBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java Thu Mar 11 20:44:59 2010
@@ -27,6 +27,7 @@ import org.apache.maven.scm.CommandParam
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -38,6 +39,7 @@ 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.hg.command.add.HgAddCommand;
+import org.apache.maven.scm.provider.hg.command.blame.HgBlameCommand;
import org.apache.maven.scm.provider.hg.command.changelog.HgChangeLogCommand;
import org.apache.maven.scm.provider.hg.command.checkin.HgCheckInCommand;
import org.apache.maven.scm.provider.hg.command.checkout.HgCheckOutCommand;
@@ -285,4 +287,16 @@ public class HgScmProvider
return (UpdateScmResult) command.execute( repository, fileSet, parameters );
}
+
+ /** {@inheritDoc} */
+ protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet,
+ CommandParameters parameters )
+ throws ScmException
+ {
+ HgBlameCommand command = new HgBlameCommand();
+
+ command.setLogger( getLogger() );
+
+ return (BlameScmResult) command.execute( repository, fileSet, parameters );
+ }
}
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,54 @@
+package org.apache.maven.scm.provider.hg.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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.blame.AbstractBlameCommand;
+import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.hg.HgUtils;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class HgBlameCommand
+ extends AbstractBlameCommand
+{
+ public static final String BLAME_CMD = "blame";
+
+ /**
+ * {@inheritDoc}
+ */
+ public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory,
+ String filename )
+ throws ScmException
+ {
+ String[] cmd = new String[]{BLAME_CMD, "--user", // list the author
+ "--date", // list the date
+ "--number", // list the revision number
+ filename};
+ HgBlameConsumer consumer = new HgBlameConsumer( getLogger() );
+ ScmResult result = HgUtils.execute( consumer, getLogger(), workingDirectory.getBasedir(), cmd );
+ return new BlameScmResult( consumer.getLines(), result );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,69 @@
+package org.apache.maven.scm.provider.hg.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.ScmFileStatus;
+import org.apache.maven.scm.command.blame.BlameLine;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.hg.command.HgConsumer;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class HgBlameConsumer
+ extends HgConsumer
+{
+ private List lines = new ArrayList();
+
+ private static final String HG_TIMESTAMP_PATTERN = "EEE MMM dd HH:mm:ss yyyy Z";
+
+ public HgBlameConsumer( ScmLogger logger )
+ {
+ super( logger );
+
+ }
+
+ public void doConsume( ScmFileStatus status, String trimmedLine )
+ {
+ /* godin 0 Sun Jan 31 03:04:54 2010 +0300 */
+ String annotation = trimmedLine.substring( 0, trimmedLine.indexOf( ": " ) );
+
+ String author = annotation.substring( 0, annotation.indexOf( ' ' ) );
+ annotation = annotation.substring( annotation.indexOf( ' ' ) + 1 );
+
+ String revision = annotation.substring( 0, annotation.indexOf( ' ' ) );
+ annotation = annotation.substring( annotation.indexOf( ' ' ) + 1 );
+
+ String dateStr = annotation;
+ Date dateTime = parseDate( dateStr, null, HG_TIMESTAMP_PATTERN );
+
+ lines.add( new BlameLine( dateTime, revision, author ) );
+ }
+
+ public List getLines()
+ {
+ return lines;
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameConsumer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,54 @@
+package org.apache.maven.scm.provider.hg.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.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.hg.HgRepoUtils;
+import org.apache.maven.scm.tck.command.blame.BlameCommandTckTest;
+
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ */
+public class HgBlameCommandTckTest
+ extends BlameCommandTckTest
+{
+ public String getScmUrl()
+ throws Exception
+ {
+ return HgRepoUtils.getScmUrl();
+ }
+
+ public void initRepo()
+ throws Exception
+ {
+ HgRepoUtils.initRepo();
+ }
+
+ protected void verifyResult( BlameScmResult result )
+ {
+ List lines = result.getLines();
+ assertEquals( "Expected 1 line in blame", 1, lines.size() );
+ BlameLine line = (BlameLine) lines.get( 0 );
+ assertEquals( "0", line.getRevision() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/blame/HgBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/pom.xml?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/pom.xml Thu Mar 11 20:44:59 2010
@@ -35,6 +35,11 @@
<dependencies>
<dependency>
+ <groupId>regexp</groupId>
+ <artifactId>regexp</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-cvstest</artifactId>
<scope>test</scope>
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,62 @@
+package org.apache.maven.scm.provider.cvslib.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.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.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public abstract class AbsrtactCvsBlameCommand
+ extends AbstractBlameCommand
+ implements CvsCommand
+{
+ /**
+ * {@inheritDoc}
+ */
+ public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet fileSet, String filename )
+ throws ScmException
+ {
+ CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+ Commandline cl = CvsCommandUtils.getBaseCommand( "annotate", repository, fileSet );
+ cl.createArg().setValue( filename );
+
+ if ( getLogger().isInfoEnabled() )
+ {
+ getLogger().info( "Executing: " + cl );
+ getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() );
+ }
+
+ return executeCvsCommand( cl, repository );
+ }
+
+ protected abstract BlameScmResult executeCvsCommand( Commandline cl, CvsScmProviderRepository repository )
+ throws ScmException;
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/AbsrtactCvsBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.cvslib.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 java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+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;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class CvsBlameConsumer
+ extends AbstractConsumer
+{
+ private static final String CVS_TIMESTAMP_PATTERN = "dd-MMM-yy";
+
+ /* 1.1 (tor 24-Mar-03): */
+
+ private static final String LINE_PATTERN = "(.*)\\((.*)\\s+(.*)\\)";
+
+ /**
+ * @see #LINE_PATTERN
+ */
+ private RE lineRegexp;
+
+ private List lines = new ArrayList();
+
+ public CvsBlameConsumer( ScmLogger logger )
+ {
+ super( logger );
+
+ lineRegexp = new RE( LINE_PATTERN );
+ }
+
+ public void consumeLine( String line )
+ {
+ if (line != null && line.indexOf( ":" ) > 0 )
+ {
+ String annotation = line.substring( 0, line.indexOf( ':' ) );
+ if ( lineRegexp.match( annotation ) )
+ {
+ String revision = lineRegexp.getParen( 1 ).trim();
+ String author = lineRegexp.getParen( 2 ).trim();
+ String dateTimeStr = lineRegexp.getParen( 3 ).trim();
+
+ Date dateTime = parseDate( dateTimeStr, null, CVS_TIMESTAMP_PATTERN );
+ getLines().add( new BlameLine( dateTime, revision, author ) );
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( author + " " + dateTimeStr );
+ }
+ }
+ }
+ }
+
+ public List getLines()
+ {
+ return lines;
+ }
+
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/blame/CvsBlameConsumer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,61 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.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.ScmException;
+import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.cvslib.command.blame.AbsrtactCvsBlameCommand;
+import org.apache.maven.scm.provider.cvslib.command.blame.CvsBlameConsumer;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class CvsExeBlameCommand
+ extends AbsrtactCvsBlameCommand
+{
+ /**
+ * {@inheritDoc}
+ */
+ protected BlameScmResult executeCvsCommand( Commandline cl, CvsScmProviderRepository repository )
+ throws ScmException
+ {
+ CvsBlameConsumer consumer = new CvsBlameConsumer( getLogger() );
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+ int exitCode;
+ try
+ {
+ exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+ }
+ catch ( CommandLineException ex )
+ {
+ throw new ScmException( "Error while executing cvs command.", ex );
+ }
+ if ( exitCode != 0 )
+ {
+ return new BlameScmResult( cl.toString(), "The cvs command failed.", stderr.getOutput(), false );
+ }
+ return new BlameScmResult( cl.toString(), consumer.getLines() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/blame/CvsExeBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java?rev=922015&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,75 @@
+package org.apache.maven.scm.provider.cvslib.cvsjava.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.BlameScmResult;
+import org.apache.maven.scm.provider.cvslib.command.blame.AbsrtactCvsBlameCommand;
+import org.apache.maven.scm.provider.cvslib.command.blame.CvsBlameConsumer;
+import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsConnection;
+import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsLogListener;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class CvsJavaBlameCommand
+ extends AbsrtactCvsBlameCommand
+{
+ /**
+ * {@inheritDoc}
+ */
+ protected BlameScmResult executeCvsCommand( Commandline cl, CvsScmProviderRepository repository )
+ {
+ CvsLogListener logListener = new CvsLogListener();
+ CvsBlameConsumer consumer = new CvsBlameConsumer( getLogger() );
+ try
+ {
+ boolean isSuccess =
+ CvsConnection.processCommand( cl.getArguments(), cl.getWorkingDirectory().getAbsolutePath(),
+ logListener, getLogger() );
+ if ( !isSuccess )
+ {
+ return new BlameScmResult( cl.toString(), "The cvs command failed.", logListener.getStderr().toString(),
+ false );
+ }
+ BufferedReader stream = new BufferedReader(
+ new InputStreamReader( new ByteArrayInputStream( logListener.getStdout().toString().getBytes() ) ) );
+ String line;
+ while ( ( line = stream.readLine() ) != null )
+ {
+ consumer.consumeLine( line );
+ }
+ }
+ catch ( Exception e )
+ {
+ getLogger().error( e );
+ return new BlameScmResult( cl.toString(), "The cvs command failed.", logListener.getStdout().toString(),
+ false );
+ }
+
+ return new BlameScmResult( cl.toString(), consumer.getLines() );
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/blame/CvsJavaBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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=922015&r1=922014&r2=922015&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 Thu Mar 11 20:44:59 2010
@@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmException
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.blame.BlameScmResult;
import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
@@ -310,4 +311,15 @@ public abstract class AbstractGitScmProv
return (GitInfoScmResult) executeCommand( cmd, repository, fileSet, parameters );
}
+ /** {@inheritDoc} */
+ protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException
+ {
+ GitCommand cmd = getBlameCommand();
+
+ return (BlameScmResult) executeCommand( cmd, repository, fileSet, parameters );
+ }
+
+ protected abstract GitCommand getBlameCommand();
+
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java?rev=922015&r1=922014&r2=922015&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/TestGitScmProvider.java Thu Mar 11 20:44:59 2010
@@ -91,6 +91,11 @@ public class TestGitScmProvider
return null;
}
+ protected GitCommand getBlameCommand()
+ {
+ return null;
+ }
+
protected String getRepositoryURL( File path )
{
return null;
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=922015&r1=922014&r2=922015&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 Thu Mar 11 20:44:59 2010
@@ -26,6 +26,7 @@ import org.apache.maven.scm.provider.git
import org.apache.maven.scm.provider.git.command.info.GitInfoItem;
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;
import org.apache.maven.scm.provider.git.gitexe.command.changelog.GitChangeLogCommand;
import org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand;
@@ -127,6 +128,12 @@ public class GitExeScmProvider
}
/** {@inheritDoc} */
+ protected GitCommand getBlameCommand()
+ {
+ return new GitBlameCommand();
+ }
+
+ /** {@inheritDoc} */
protected String getRepositoryURL( File path )
throws ScmException
{
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/blame/GitBlameCommand.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/blame/GitBlameCommand.java?rev=922015&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/blame/GitBlameCommand.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/blame/GitBlameCommand.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,68 @@
+package org.apache.maven.scm.provider.git.gitexe.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.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.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;
+
+import java.io.File;
+
+/**
+ * @author Evgeny Mandrikov
+ * @since 1.4
+ */
+public class GitBlameCommand
+ extends AbstractBlameCommand
+ implements GitCommand
+{
+ /**
+ * {@inheritDoc}
+ */
+ public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSet workingDirectory,
+ String filename )
+ throws ScmException
+ {
+ Commandline cl = createCommandLine( workingDirectory.getBasedir(), filename );
+ GitBlameConsumer consumer = new GitBlameConsumer( getLogger() );
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ throw new UnsupportedOperationException();
+ }
+ return new BlameScmResult( cl.toString(), consumer.getLines() );
+ }
+
+ public static Commandline createCommandLine( File workingDirectory, String filename )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "blame" );
+ cl.createArg().setValue( "-c" );
+ cl.createArg().setValue( filename );
+ return cl;
+ }
+}
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/blame/GitBlameCommand.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/blame/GitBlameCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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/blame/GitBlameCommand.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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/blame/GitBlameConsumer.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/blame/GitBlameConsumer.java?rev=922015&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/blame/GitBlameConsumer.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/blame/GitBlameConsumer.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,78 @@
+package org.apache.maven.scm.provider.git.gitexe.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 GitBlameConsumer
+ extends AbstractConsumer
+{
+ private static final String GIT_TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss Z";
+
+ private static final String LINE_PATTERN = "(.*)\t\\((.*)\t(.*)\t.*\\)";
+
+ /**
+ * @see #LINE_PATTERN
+ */
+ private RE lineRegexp;
+
+ private List lines = new ArrayList();
+
+ public GitBlameConsumer( ScmLogger logger )
+ {
+ super( logger );
+
+ lineRegexp = new RE( LINE_PATTERN );
+ }
+
+ public void consumeLine( String line )
+ {
+ if ( lineRegexp.match( line ) )
+ {
+ String revision = lineRegexp.getParen( 1 );
+ String author = lineRegexp.getParen( 2 );
+ String dateTimeStr = lineRegexp.getParen( 3 );
+
+ Date dateTime = parseDate( dateTimeStr, null, GIT_TIMESTAMP_PATTERN );
+ getLines().add( new BlameLine( dateTime, revision, author ) );
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( author + " " + dateTimeStr );
+ }
+ }
+ }
+
+ public List getLines()
+ {
+ return lines;
+ }
+}
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/blame/GitBlameConsumer.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/blame/GitBlameConsumer.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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/blame/GitBlameConsumer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
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/blame/GitExeBlameCommandTckTest.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/blame/GitExeBlameCommandTckTest.java?rev=922015&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/blame/GitExeBlameCommandTckTest.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/blame/GitExeBlameCommandTckTest.java Thu Mar 11 20:44:59 2010
@@ -0,0 +1,55 @@
+package org.apache.maven.scm.provider.git.gitexe.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.command.blame.BlameScmResult;
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.command.blame.GitBlameCommandTckTest;
+
+import java.util.List;
+
+/**
+ * @author Evgeny Mandrikov
+ */
+public class GitExeBlameCommandTckTest
+ extends GitBlameCommandTckTest
+{
+ public String getScmUrl()
+ throws Exception
+ {
+ return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+ }
+
+ public void testBlameCommand()
+ throws Exception
+ {
+ super.testBlameCommand();
+ }
+
+ protected void verifyResult( BlameScmResult result )
+ {
+ List lines = result.getLines();
+ assertEquals( "Expected 1 line in blame", 1, lines.size() );
+ BlameLine line = (BlameLine) lines.get( 0 );
+ assertEquals( "Mark Struberg", line.getAuthor() );
+ assertEquals( "92f139df", line.getRevision() );
+ }
+}
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/blame/GitExeBlameCommandTckTest.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/blame/GitExeBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
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/blame/GitExeBlameCommandTckTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain