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 mp...@apache.org on 2006/02/28 02:00:40 UTC
svn commit: r381518 - in
/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src:
main/java/org/apache/maven/scm/provider/perforce/
main/java/org/apache/maven/scm/provider/perforce/command/changelog/
main/java/org/apache/maven/scm/provider...
Author: mperham
Date: Mon Feb 27 17:00:39 2006
New Revision: 381518
URL: http://svn.apache.org/viewcvs?rev=381518&view=rev
Log:
PR: SCM-163, SCM-164, SCM-165
Submitted by: John Didion
Update changelog to use the same clientspec as update if possible
Modified:
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumer.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommandTest.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumerTest.java
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java Mon Feb 27 17:00:39 2006
@@ -52,6 +52,9 @@
import org.codehaus.plexus.util.cli.Commandline;
import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
/**
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl </a>
@@ -297,5 +300,81 @@
{
return repoPath + "/...";
}
+ }
+
+ private static final String NEWLINE = "\r\n";
+
+ /*
+ * Clientspec name can be overridden with the system property below. I don't
+ * know of any way for this code to get access to maven's settings.xml so this
+ * is the best I can do.
+ *
+ * Sample clientspec:
+
+ Client: mperham-mikeperham-dt-maven
+ Root: d:\temp\target
+ Owner: mperham
+ View:
+ //depot/sandbox/mperham/tsa/tsa-domain/... //mperham-mikeperham-dt-maven/...
+ Description:
+ Created by maven-scm-provider-perforce
+
+ */
+ public static String createClientspec( PerforceScmProviderRepository repo, String specname, File workDir )
+ {
+ String clientspecName = getClientspecName( repo, workDir );
+ String userName = getUsername( repo );
+
+ StringBuffer buf = new StringBuffer();
+ buf.append( "Client: " ).append( clientspecName ).append( NEWLINE );
+ buf.append( "Root: " ).append( workDir ).append( NEWLINE );
+ buf.append( "Owner: " ).append( userName ).append( NEWLINE );
+ buf.append( "View:" ).append( NEWLINE );
+ buf.append( "\t" ).append( PerforceScmProvider.getCanonicalRepoPath( repo.getPath() ) );
+ buf.append( " //" ).append( clientspecName ).append( "/..." ).append( NEWLINE );
+ buf.append( "Description:" ).append( NEWLINE );
+ buf.append( "\t" ).append( "Created by maven-scm-provider-perforce" ).append( NEWLINE );
+ return buf.toString();
+ }
+
+ public static final String DEFAULT_CLIENTSPEC_PROPERTY = "maven.scm.perforce.clientspec.name";
+
+ public static String getClientspecName( PerforceScmProviderRepository repo, File workDir )
+ {
+ String clientspecName =
+ System.getProperty( DEFAULT_CLIENTSPEC_PROPERTY, generateDefaultClientspecName( repo, workDir ) );
+ return clientspecName;
+ }
+
+ private static String generateDefaultClientspecName( PerforceScmProviderRepository repo, File workDir )
+ {
+ String username = getUsername( repo );
+ String hostname = "nohost";
+ String path = "nopath";
+ try
+ {
+ hostname = InetAddress.getLocalHost().getHostName();
+ path = workDir.getCanonicalPath();
+ }
+ catch ( UnknownHostException e )
+ {
+ // Should never happen
+ throw new RuntimeException( e );
+ }
+ catch ( IOException e )
+ {
+ throw new RuntimeException( e );
+ }
+ return username + "-" + hostname + "-MavenSCM-" + path;
+ }
+
+ private static String getUsername( PerforceScmProviderRepository repo )
+ {
+ String username = repo.getUser();
+ if ( username == null )
+ {
+ username = System.getProperty( "user.name", "nouser" );
+ }
+ return username;
}
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java Mon Feb 27 17:00:39 2006
@@ -16,6 +16,12 @@
* limitations under the License.
*/
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Date;
+
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
@@ -29,12 +35,6 @@
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.Commandline;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Date;
-
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @version $Id$
@@ -43,9 +43,9 @@
extends AbstractChangeLogCommand
implements PerforceCommand
{
+
protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
- Date startDate, Date endDate, String branch,
- String datePattern )
+ Date startDate, Date endDate, String branch, String datePattern )
throws ScmException
{
if ( StringUtils.isNotEmpty( branch ) )
@@ -53,10 +53,12 @@
throw new ScmException( "This SCM doesn't support branches." );
}
- Commandline cl = createCommandLine( (PerforceScmProviderRepository) repo, fileSet.getBasedir() );
+ PerforceScmProviderRepository p4repo = (PerforceScmProviderRepository) repo;
+ String clientspec = System.getProperty( PerforceScmProvider.DEFAULT_CLIENTSPEC_PROPERTY );
+ Commandline cl = createCommandLine( p4repo, fileSet.getBasedir(), clientspec );
- PerforceChangeLogConsumer consumer =
- new PerforceChangeLogConsumer( startDate, endDate, datePattern, getLogger() );
+ PerforceChangeLogConsumer consumer = new PerforceChangeLogConsumer( p4repo.getPath(), startDate, endDate,
+ datePattern, getLogger() );
try
{
@@ -82,10 +84,16 @@
new ChangeLogSet( consumer.getModifications(), startDate, endDate ) );
}
- public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory )
+ public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory,
+ String clientspec )
{
Commandline command = PerforceScmProvider.createP4Command( repo, workingDirectory );
+ if ( clientspec != null )
+ {
+ command.createArgument().setValue( "-c" );
+ command.createArgument().setValue( clientspec );
+ }
command.createArgument().setValue( "filelog" );
command.createArgument().setValue( "-t" );
command.createArgument().setValue( "-l" );
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumer.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumer.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumer.java Mon Feb 27 17:00:39 2006
@@ -82,6 +82,12 @@
private String currentFile;
/**
+ * The location of files within the Perforce depot that we are processing
+ * e.g. //depot/projects/foo/bar
+ */
+ private String repoPath;
+
+ /**
* The regular expression used to match header lines
*/
private RE revisionRegexp;
@@ -97,15 +103,15 @@
"on (.*) " + // date
"by (.*)@"; // author
- public PerforceChangeLogConsumer( Date startDate, Date endDate, String userDatePattern, ScmLogger logger )
+ public PerforceChangeLogConsumer( String path, Date startDate, Date endDate, String userDatePattern,
+ ScmLogger logger )
{
super( logger );
this.startDate = startDate;
-
this.endDate = endDate;
-
this.userDatePattern = userDatePattern;
+ this.repoPath = path;
try
{
@@ -195,8 +201,7 @@
{
if ( line.startsWith( FILE_BEGIN_TOKEN ) )
{
- currentFile = line;
-
+ currentFile = line.substring( repoPath.length() + 1 );
return;
}
@@ -206,9 +211,7 @@
}
currentChange = new ChangeSet();
-
currentChange.setDate( parseDate( revisionRegexp.getParen( 3 ), userDatePattern, PERFORCE_TIMESTAMP_PATTERN ) );
-
currentChange.setAuthor( revisionRegexp.getParen( 4 ) );
status = GET_COMMENT_BEGIN;
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java Mon Feb 27 17:00:39 2006
@@ -16,6 +16,13 @@
* limitations under the License.
*/
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
@@ -27,15 +34,6 @@
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.Commandline;
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
/**
* @author Mike Perham
* @version $Id: PerforceChangeLogCommand.java 264804 2005-08-30 16:09:04Z
@@ -62,7 +60,7 @@
PerforceScmProviderRepository prepo = (PerforceScmProviderRepository) repo;
File workingDirectory = new File( files.getBasedir().getAbsolutePath() );
- String specname = getClientspecName( prepo, workingDirectory );
+ String specname = PerforceScmProvider.getClientspecName( prepo, workingDirectory );
PerforceCheckOutConsumer consumer = new PerforceCheckOutConsumer( specname, prepo.getPath() );
getLogger().info( "Checkout working directory: " + workingDirectory );
Commandline cl = null;
@@ -81,7 +79,7 @@
// Write clientspec to STDIN
OutputStream out = proc.getOutputStream();
DataOutputStream dos = new DataOutputStream( out );
- String client = createClientspec( prepo, specname, workingDirectory );
+ String client = PerforceScmProvider.createClientspec( prepo, specname, workingDirectory );
getLogger().debug( "Updating clientspec:\n" + client );
dos.write( client.getBytes() );
dos.close();
@@ -181,81 +179,12 @@
getLogger().error( e.getMessage(), e );
}
}
+ else if ( clientspecExists )
+ {
+ // SCM-165 Save clientspec in memory so we can reuse it with further commands in this VM.
+ System.setProperty( PerforceScmProvider.DEFAULT_CLIENTSPEC_PROPERTY, specname );
+ }
}
- }
-
- private static final String NEWLINE = "\r\n";
-
- /*
- * Clientspec name can be overridden with the system property below. I don't
- * know of any way for this code to get access to maven's settings.xml so this
- * is the best I can do.
- *
- * Sample clientspec:
-
- Client: mperham-mikeperham-dt-maven
- Root: d:\temp\target
- Owner: mperham
- View:
- //depot/sandbox/mperham/tsa/tsa-domain/... //mperham-mikeperham-dt-maven/...
- Description:
- Created by maven-scm-provider-perforce
-
- */
- public static String createClientspec( PerforceScmProviderRepository repo, String specname, File workDir )
- {
- String clientspecName = getClientspecName( repo, workDir );
- String userName = getUsername( repo );
-
- StringBuffer buf = new StringBuffer();
- buf.append( "Client: " ).append( clientspecName ).append( NEWLINE );
- buf.append( "Root: " ).append( workDir ).append( NEWLINE );
- buf.append( "Owner: " ).append( userName ).append( NEWLINE );
- buf.append( "View:" ).append( NEWLINE );
- buf.append( "\t" ).append( PerforceScmProvider.getCanonicalRepoPath( repo.getPath() ) );
- buf.append( " //" ).append( clientspecName ).append( "/..." ).append( NEWLINE );
- buf.append( "Description:" ).append( NEWLINE );
- buf.append( "\t" ).append( "Created by maven-scm-provider-perforce" ).append( NEWLINE );
- return buf.toString();
- }
-
- private static String getClientspecName( PerforceScmProviderRepository repo, File workDir )
- {
- String clientspecName =
- System.getProperty( "maven.scm.perforce.clientspec.name", generateDefaultClientspecName( repo, workDir ) );
- return clientspecName;
- }
-
- private static String generateDefaultClientspecName( PerforceScmProviderRepository repo, File workDir )
- {
- String username = getUsername( repo );
- String hostname = "nohost";
- String path = "nopath";
- try
- {
- hostname = InetAddress.getLocalHost().getHostName();
- path = workDir.getCanonicalPath();
- }
- catch ( UnknownHostException e )
- {
- // Should never happen
- throw new RuntimeException( e );
- }
- catch ( IOException e )
- {
- throw new RuntimeException( e );
- }
- return username + "-" + hostname + "-MavenSCM-" + path;
- }
-
- private static String getUsername( PerforceScmProviderRepository repo )
- {
- String username = repo.getUser();
- if ( username == null )
- {
- username = System.getProperty( "user.name", "nouser" );
- }
- return username;
}
public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory, String tag,
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommandTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommandTest.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommandTest.java Mon Feb 27 17:00:39 2006
@@ -16,13 +16,14 @@
* limitations under the License.
*/
+import java.io.File;
+
import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.provider.perforce.PerforceScmProvider;
import org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepository;
import org.codehaus.plexus.util.cli.Commandline;
-import java.io.File;
-
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
@@ -46,8 +47,9 @@
public void testGetCommandLineWithHostAndPort()
throws Exception
{
+ System.setProperty( PerforceScmProvider.DEFAULT_CLIENTSPEC_PROPERTY, "foo" );
testCommandLine( "scm:perforce:myhost:1234:username@//depot/projects/pathname",
- "p4 -H myhost:1234 -u username filelog -t -l ..." );
+ "p4 -H myhost:1234 -u username -c foo filelog -t -l ..." );
}
// ----------------------------------------------------------------------
@@ -61,10 +63,10 @@
ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
- PerforceScmProviderRepository svnRepository =
- (PerforceScmProviderRepository) repository.getProviderRepository();
+ PerforceScmProviderRepository repo = (PerforceScmProviderRepository) repository.getProviderRepository();
- Commandline cl = PerforceChangeLogCommand.createCommandLine( svnRepository, workingDirectory );
+ Commandline cl = PerforceChangeLogCommand.createCommandLine( repo, workingDirectory,
+ System.getProperty( PerforceScmProvider.DEFAULT_CLIENTSPEC_PROPERTY ) );
assertEquals( commandLine, cl.toString() );
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumerTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumerTest.java?rev=381518&r1=381517&r2=381518&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumerTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogConsumerTest.java Mon Feb 27 17:00:39 2006
@@ -16,17 +16,17 @@
* limitations under the License.
*/
-import org.apache.maven.scm.ChangeFile;
-import org.apache.maven.scm.ChangeSet;
-import org.apache.maven.scm.ScmTestCase;
-import org.apache.maven.scm.log.DefaultLog;
-
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.log.DefaultLog;
+
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @version $Id$
@@ -39,7 +39,7 @@
{
File testFile = getTestFile( "src/test/resources/perforce/perforcelog.txt" );
- PerforceChangeLogConsumer consumer = new PerforceChangeLogConsumer( null, null, null, new DefaultLog() );
+ PerforceChangeLogConsumer consumer = new PerforceChangeLogConsumer( "//depot/test", null, null, null, new DefaultLog() );
FileInputStream fis = new FileInputStream( testFile );
BufferedReader in = new BufferedReader( new InputStreamReader( fis ) );
@@ -54,7 +54,7 @@
assertEquals( "Wrong number of entries returned", 9, entries.size() );
ChangeSet entry = (ChangeSet) entries.get( 0 );
assertEquals( "jim", entry.getAuthor() );
- assertEquals( "//depot/test/demo/demo.c", ( (ChangeFile) entry.getFiles().get( 0 ) ).getName() );
+ assertEquals( "demo/demo.c", ( (ChangeFile) entry.getFiles().get( 0 ) ).getName() );
assertEquals( "2003-10-01", entry.getDateFormatted() );
assertEquals( "16:24:20", entry.getTimeFormatted() );
}