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