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 2007/04/25 00:46:56 UTC

svn commit: r532125 - 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/ main/java/org/apache/maven/scm/provider/perforce/...

Author: mperham
Date: Tue Apr 24 15:46:55 2007
New Revision: 532125

URL: http://svn.apache.org/viewvc?view=rev&rev=532125
Log:
PR: SCM-301
Fixes for Perforce provider in Continuum
Submitted by: Raphael PETIT

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/PerforceInfoCommand.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/checkout/PerforceCheckOutCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.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/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- 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 Tue Apr 24 15:46:55 2007
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+
 import org.apache.maven.scm.CommandParameters;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
@@ -56,6 +57,8 @@
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 
+import sun.security.action.GetLongAction;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.IOException;
@@ -336,10 +339,10 @@
      Created by maven-scm-provider-perforce
 
      */
-    public static String createClientspec( PerforceScmProviderRepository repo, File workDir, String repoPath )
+    public static String createClientspec(ScmLogger logger, PerforceScmProviderRepository repo, File workDir, String repoPath )
     {
-        String clientspecName = getClientspecName( repo, workDir );
-        String userName = getUsername( repo );
+        String clientspecName = getClientspecName( logger, repo, workDir );
+        String userName = getUsername( logger, repo );
 
         String rootDir;
         try
@@ -367,14 +370,21 @@
 
     public static final String DEFAULT_CLIENTSPEC_PROPERTY = "maven.scm.perforce.clientspec.name";
 
-    public static String getClientspecName( PerforceScmProviderRepository repo, File workDir )
+    public static String getClientspecName( ScmLogger logger,PerforceScmProviderRepository repo, File workDir )
     {
-        return System.getProperty( DEFAULT_CLIENTSPEC_PROPERTY, generateDefaultClientspecName( repo, workDir ) );
+        String def = generateDefaultClientspecName( logger, repo, workDir );
+        // until someone put clearProperty in DefaultContinuumScm.getScmRepository( Project , boolean  )
+        String l = System.getProperty( DEFAULT_CLIENTSPEC_PROPERTY, def );
+        if ( l == null || "".equals( l.trim() ) ) 
+        {
+            return def;
+        }
+        return l;
     }
 
-    private static String generateDefaultClientspecName( PerforceScmProviderRepository repo, File workDir )
+    private static String generateDefaultClientspecName(ScmLogger logger, PerforceScmProviderRepository repo, File workDir )
     {
-        String username = getUsername( repo );
+        String username = getUsername( logger, repo );
         String hostname;
         String path;
         try
@@ -394,9 +404,9 @@
         return username + "-" + hostname + "-MavenSCM-" + path;
     }
 
-    private static String getUsername( PerforceScmProviderRepository repo )
+    private static String getUsername( ScmLogger logger, PerforceScmProviderRepository repo )
     {
-        String username = PerforceInfoCommand.getInfo( null, repo ).getEntry( "User name" );
+        String username = PerforceInfoCommand.getInfo( logger, repo ).getEntry( "User name" );
         if ( username == null )
         {
             // os user != perforce user
@@ -440,7 +450,12 @@
         if ( pom.exists() )
         {
             loc = where.getDepotLocation( pom );
-            if ( loc.endsWith( "/pom.xml" ) )
+            if ( loc == null )
+            {
+            	loc = repo.getPath();
+            	log.debug( "cannot find depot => using " + loc );
+            }
+            else if ( loc.endsWith( "/pom.xml" ) )
             {
                 loc = loc.substring( 0, loc.length() - "/pom.xml".length() );
                 log.debug( "Actual POM location: " + loc );
@@ -497,4 +512,4 @@
 
         return live.booleanValue();
     }
-}
\ No newline at end of file
+}

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java Tue Apr 24 15:46:55 2007
@@ -24,6 +24,7 @@
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.command.AbstractCommand;
+import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.perforce.PerforceScmProvider;
 import org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository;
@@ -66,9 +67,9 @@
 
     private Map entries = null;
 
-    public static PerforceInfoCommand getInfo( AbstractCommand cmd, PerforceScmProviderRepository repo )
+    public static PerforceInfoCommand getInfo( ScmLogger logger, PerforceScmProviderRepository repo )
     {
-        return getSingleton( cmd, repo );
+        return getSingleton( logger, repo );
     }
 
     public String getEntry( String key )
@@ -76,15 +77,15 @@
         return (String) entries.get( key );
     }
 
-    private static synchronized PerforceInfoCommand getSingleton( AbstractCommand cmd,
+    private static synchronized PerforceInfoCommand getSingleton( ScmLogger logger,
                                                                   PerforceScmProviderRepository repo )
     {
         if ( singleton == null )
         {
             PerforceInfoCommand pic = new PerforceInfoCommand();
-            if ( cmd != null )
+            if ( logger != null )
             {
-                pic.setLogger( cmd.getLogger() );
+                pic.setLogger( logger );
             }
             try
             {
@@ -108,15 +109,11 @@
             return null;
         }
 
-        boolean log = getLogger() != null;
         try
         {
             Commandline command = PerforceScmProvider.createP4Command( (PerforceScmProviderRepository) repo, null );
             command.createArgument().setValue( "info" );
-            if ( log )
-            {
-                getLogger().debug( PerforceScmProvider.clean( "Executing: " + command.toString() ) );
-            }
+            getLogger().debug( PerforceScmProvider.clean( "Executing: " + command.toString() ) );
             Process proc = command.execute();
             BufferedReader br = new BufferedReader( new InputStreamReader( proc.getInputStream() ) );
             String line;
@@ -126,11 +123,22 @@
                 int idx = line.indexOf( ':' );
                 if ( idx == -1 )
                 {
-                    throw new IllegalStateException( "Unexpected results from 'p4 info' command: " + line );
+                    if ( line.indexOf( "Client unknown." ) == -1 )
+                    {
+                    	throw new IllegalStateException( "Unexpected results from 'p4 info' command: " + line );
+                    }
+                    else 
+                    {
+                    	getLogger().debug( "Cannot find client.");
+                    	entries.put( "Client root", "" );
+                    }
+                }
+                else 
+                {
+                	String key = line.substring( 0, idx );
+                	String value = line.substring( idx + 1 ).trim();
+                	entries.put( key, value );
                 }
-                String key = line.substring( 0, idx );
-                String value = line.substring( idx + 1 ).trim();
-                entries.put( key, value );
             }
         }
         catch ( CommandLineException e )

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/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- 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 Tue Apr 24 15:46:55 2007
@@ -53,13 +53,13 @@
                                                           String datePattern )
         throws ScmException
     {
-        if ( branch != null || StringUtils.isNotEmpty( branch.getName() ) )
+        if ( branch != null && StringUtils.isNotEmpty( branch.getName() ) )
         {
             throw new ScmException( "This SCM doesn't support branches." );
         }
 
         PerforceScmProviderRepository p4repo = (PerforceScmProviderRepository) repo;
-        String clientspec = PerforceScmProvider.getClientspecName( p4repo, fileSet.getBasedir() );
+        String clientspec = PerforceScmProvider.getClientspecName( getLogger(), p4repo, fileSet.getBasedir() );
         Commandline cl = createCommandLine( p4repo, fileSet.getBasedir(), clientspec );
 
         String location = PerforceScmProvider.getRepoPath( getLogger(), p4repo, fileSet.getBasedir() );

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/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- 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 Tue Apr 24 15:46:55 2007
@@ -69,7 +69,7 @@
 
         actualLocation = PerforceScmProvider.getRepoPath( getLogger(), prepo, files.getBasedir() );
 
-        String specname = PerforceScmProvider.getClientspecName( prepo, workingDirectory );
+        String specname = PerforceScmProvider.getClientspecName(getLogger(), prepo, workingDirectory );
         PerforceCheckOutConsumer consumer = new PerforceCheckOutConsumer( specname, actualLocation );
         getLogger().info( "Checkout working directory: " + workingDirectory );
         Commandline cl = null;
@@ -88,7 +88,7 @@
             // Write clientspec to STDIN
             OutputStream out = proc.getOutputStream();
             DataOutputStream dos = new DataOutputStream( out );
-            String client = PerforceScmProvider.createClientspec( prepo, workingDirectory, actualLocation );
+            String client = PerforceScmProvider.createClientspec(getLogger(), prepo, workingDirectory, actualLocation );
             getLogger().debug( "Updating clientspec:\n" + client );
             dos.write( client.getBytes() );
             dos.close();

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java Tue Apr 24 15:46:55 2007
@@ -194,10 +194,10 @@
         {
             // I have no idea why but Perforce doesn't default the owner to the current user.
             // Since the user is not explicitly set, we use 'p4 info' to query for the current user.
-            username = PerforceInfoCommand.getInfo( this, repo ).getEntry( "User name" );
+            username = PerforceInfoCommand.getInfo( getLogger(), repo ).getEntry( "User name" );
         }
         buf.append( "Owner: " ).append( username ).append( NEWLINE );
         buf.append( "Options: " ).append( lock ? "" : "un" ).append( "locked" ).append( NEWLINE );
         return buf.toString();
     }
-}
\ No newline at end of file
+}

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java?view=diff&rev=532125&r1=532124&r2=532125
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java Tue Apr 24 15:46:55 2007
@@ -45,11 +45,11 @@
 
         if ( PerforceScmProvider.isLive() )
         {
-            assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "User name" ) );
-            assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client root" ) );
-            assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client name" ) );
-            assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client host" ) );
-            assertNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "foobar" ) );
+            assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "User name" ) );
+            assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client root" ) );
+            assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client name" ) );
+            assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client host" ) );
+            assertNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "foobar" ) );
         }
     }
 }