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&oslash;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&oslash;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() );
     }