Author: evenisse
Date: Fri May  9 02:59:03 2008
New Revision: 654744

URL: http://svn.apache.org/viewvc?rev=654744&view=rev
Log:
[SCM-363] Don't ignore p4 errors from stderr
Submitted by: Brian Jackson


Modified:
    
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceWhereCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkin/PerforceCheckInCommand.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/edit/PerforceEditCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditConsumer.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommand.java

Modified: 
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
 (original)
+++ 
maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
 Fri May  9 02:59:03 2008
@@ -80,14 +80,14 @@
     private File workingDirectory;
 
     /**
-     * The user name (used by svn and starteam protocol).
+     * The user name (used by svn, starteam and perforce protocol).
      *
      * @parameter expression="${username}"
      */
     private String username;
 
     /**
-     * The user password (used by svn and starteam protocol).
+     * The user password (used by svn, starteam and perforce protocol).
      *
      * @parameter expression="${password}"
      */

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceWhereCommand.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/PerforceWhereCommand.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceWhereCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceWhereCommand.java
 Fri May  9 02:59:03 2008
@@ -79,6 +79,7 @@
             logger.debug( PerforceScmProvider.clean( "Executing: " + 
command.toString() ) );
             Process proc = command.execute();
             BufferedReader br = new BufferedReader( new InputStreamReader( 
proc.getInputStream() ) );
+            BufferedReader brErr = new BufferedReader( new InputStreamReader( 
proc.getErrorStream() ) );
             String line;
             String path = null;
             while ( ( line = br.readLine() ) != null )
@@ -100,6 +101,25 @@
                 // verify that "//" appears twice in the line
                 path = line.substring( 0, line.lastIndexOf( "//" ) - 1 );
             }
+            // Check for errors
+            while( ( line = brErr.readLine() ) != null )
+            {
+                if ( line.indexOf( "not in client view" ) != -1 )
+                {
+                    // uh oh, something bad is happening
+                    logger.error( line );
+                    return null;
+                }
+                if ( line.indexOf( "is not under" ) != -1 )
+                {
+                    // uh oh, something bad is happening
+                    logger.error( line );
+                    return null;
+                }
+
+                logger.debug( line );
+            }
+
             return path;
         }
         catch ( CommandLineException e )

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkin/PerforceCheckInCommand.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/checkin/PerforceCheckInCommand.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkin/PerforceCheckInCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkin/PerforceCheckInCommand.java
 Fri May  9 02:59:03 2008
@@ -73,12 +73,18 @@
             dos.close();
             out.close();
             BufferedReader br = new BufferedReader( new InputStreamReader( 
proc.getInputStream() ) );
+            BufferedReader brErr = new BufferedReader( new InputStreamReader( 
proc.getErrorStream() ) );
             String line;
             while ( ( line = br.readLine() ) != null )
             {
                 getLogger().debug( "Consuming: " + line );
                 consumer.consumeLine( line );
             }
+            while ( ( line = brErr.readLine() ) != null )
+            {
+                getLogger().debug( "Consuming stderr: " + line );
+                consumer.consumeLine( line );
+            }
         }
         catch ( CommandLineException e )
         {

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?rev=654744&r1=654743&r2=654744&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
 Fri May  9 02:59:03 2008
@@ -103,6 +103,14 @@
                 consumer.consumeLine( line );
             }
             br.close();
+            // Read errors from STDERR
+            BufferedReader brErr = new BufferedReader( new InputStreamReader( 
proc.getErrorStream() ) );
+            while ( ( line = brErr.readLine() ) != null )
+            {
+                getLogger().debug( "Consuming stderr: " + line );
+                consumer.consumeLine( line );
+            }
+            brErr.close();
         }
         catch ( IOException e )
         {
@@ -132,7 +140,15 @@
                         consumer.consumeLine( line );
                     }
                     br.close();
-                    getLogger().debug( "Perforce sync complete." );
+                    // Read errors from STDERR
+                    BufferedReader brErr = new BufferedReader( new 
InputStreamReader( proc.getErrorStream() ) );
+                    while ( ( line = brErr.readLine() ) != null )
+                    {
+                        getLogger().debug( "Consuming stderr: " + line );
+                        consumer.consumeLine( line );
+                    }
+                    brErr.close();
+                     getLogger().debug( "Perforce sync complete." );
                 }
                 catch ( IOException e )
                 {
@@ -178,6 +194,14 @@
                         consumer.consumeLine( line );
                     }
                     br.close();
+                    // Read errors from STDERR
+                    BufferedReader brErr = new BufferedReader( new 
InputStreamReader( proc.getErrorStream() ) );
+                    while ( ( line = brErr.readLine() ) != null )
+                    {
+                        getLogger().debug( "Consuming stderr: " + line );
+                        consumer.consumeLine( line );
+                    }
+                    brErr.close();
                 }
                 catch ( CommandLineException e )
                 {

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.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/edit/PerforceEditCommand.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditCommand.java
 Fri May  9 02:59:03 2008
@@ -60,8 +60,17 @@
             String line;
             while ( ( line = br.readLine() ) != null )
             {
+                getLogger().debug( "Consuming: " + line );
                 consumer.consumeLine( line );
             }
+            // Read errors from STDERR
+            BufferedReader brErr = new BufferedReader( new InputStreamReader( 
proc.getErrorStream() ) );
+            while ( ( line = brErr.readLine() ) != null )
+            {
+                getLogger().debug( "Consuming stderr: " + line );
+                consumer.consumeLine( line );
+            }
+            brErr.close();
         }
         catch ( CommandLineException e )
         {
@@ -72,7 +81,11 @@
             e.printStackTrace();
         }
 
-        return new EditScmResult( cl.toString(), consumer.getEdits() );
+        if(consumer.isSuccess()) {
+            return new EditScmResult( cl.toString(), consumer.getEdits() );
+        } else {
+            return new EditScmResult( cl.toString(), "Unable to edit file(s)", 
consumer.getErrorMessage(), false);
+        }
     }
 
     public static Commandline createCommandLine( PerforceScmProviderRepository 
repo, File workingDirectory,

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditConsumer.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/edit/PerforceEditConsumer.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditConsumer.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/edit/PerforceEditConsumer.java
 Fri May  9 02:59:03 2008
@@ -26,6 +26,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.io.File;
 
 /**
  * @author Mike Perham
@@ -46,6 +47,7 @@
     private RE revisionRegexp;
 
     private boolean errors = false;
+    private StringBuilder errorMessage = new StringBuilder();
 
     public PerforceEditConsumer()
     {
@@ -90,6 +92,10 @@
     {
         errors = true;
         output.println( line );
+        if(errorMessage.length() > 0) {
+            errorMessage.append(System.getProperty("line.separator"));
+        }
+        errorMessage.append(line);
     }
 
     public boolean isSuccess()
@@ -97,4 +103,8 @@
         return !errors;
     }
 
+    public String getErrorMessage() {
+        return errorMessage.toString();
+    }
+
 }

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommand.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/login/PerforceLoginCommand.java?rev=654744&r1=654743&r2=654744&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommand.java
 Fri May  9 02:59:03 2008
@@ -29,8 +29,10 @@
 import org.apache.maven.scm.provider.perforce.command.PerforceCommand;
 import 
org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository;
 import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.StringUtils;
 
-import java.io.File;
+import java.io.*;
 
 /**
  * @author Mike Perham
@@ -47,30 +49,40 @@
     {
         Commandline cl = createCommandLine( (PerforceScmProviderRepository) 
repo, files.getBasedir() );
         PerforceLoginConsumer consumer = new PerforceLoginConsumer();
-        // In Perforce the user logs in once and then has a ticket good for 12 
hours.
-        // We assume the user has logged in already so we don't have to deal 
with
-        // password management.
-//        try
-//        {
-//            Process proc = cl.execute();
-//            DataOutputStream dos = new DataOutputStream( 
proc.getOutputStream() );
-//            dos.writeUTF( "TODO???\r\n" );
-//            dos.close();
-//            BufferedReader br = new BufferedReader( new InputStreamReader( 
proc.getInputStream() ) );
-//            String line = null;
-//            while ( ( line = br.readLine() ) != null )
-//            {
-//                consumer.consumeLine( line );
-//            }
-//        }
-//        catch ( CommandLineException e )
-//        {
-//            e.printStackTrace();
-//        }
-//        catch ( IOException e )
-//        {
-//            e.printStackTrace();
-//        }
+
+        try
+        {
+            Process proc = cl.execute();
+            DataOutputStream dos = new DataOutputStream( 
proc.getOutputStream() );
+            if(StringUtils.isEmpty(repo.getPassword())) {
+                throw new ScmException("password is required for the perforce 
scm plugin.");
+            }
+            dos.writeUTF( repo.getPassword() );
+            dos.close();
+            BufferedReader br = new BufferedReader( new InputStreamReader( 
proc.getInputStream() ) );
+            String line = null;
+            while ( ( line = br.readLine() ) != null )
+            {
+                getLogger().debug( "Consuming: " + line );
+                consumer.consumeLine( line );
+            }
+            // Read errors from STDERR
+            BufferedReader brErr = new BufferedReader( new InputStreamReader( 
proc.getErrorStream() ) );
+            while ( ( line = brErr.readLine() ) != null )
+            {
+                getLogger().debug( "Consuming stderr: " + line );
+                consumer.consumeLine( line );
+            }
+            brErr.close();
+        }
+        catch ( CommandLineException e )
+        {
+            throw new ScmException("", e);
+        }
+        catch ( IOException e )
+        {
+            throw new ScmException("", e);
+        }
 
         return new LoginScmResult( cl.toString(), consumer.isSuccess() ? 
"Login successful" : "Login failed", consumer
             .getOutput(), consumer.isSuccess() );
@@ -81,6 +93,9 @@
         Commandline command = PerforceScmProvider.createP4Command( repo, 
workingDir );
 
         command.createArgument().setValue( "login" );
+        if(!StringUtils.isEmpty(repo.getUser())) {
+            command.createArgument().setValue( repo.getUser() );
+        }
         return command;
     }
 }
\ No newline at end of file


Reply via email to