Author: mperham Date: Sun Aug 13 18:55:41 2006 New Revision: 431280 URL: http://svn.apache.org/viewvc?rev=431280&view=rev Log: Add support for 'p4 info' so we can get more environmental info at runtime
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java (with props) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.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?rev=431280&r1=431279&r2=431280&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 Sun Aug 13 18:55:41 2006 @@ -240,7 +240,10 @@ { Commandline command = new Commandline(); command.setExecutable( "p4" ); - command.setWorkingDirectory( workingDir.getAbsolutePath() ); + if ( workingDir != null ) + { + command.setWorkingDirectory( workingDir.getAbsolutePath() ); + } // SCM-209 // command.createArgument().setValue("-d"); Added: 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?rev=431280&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java Sun Aug 13 18:55:41 2006 @@ -0,0 +1,115 @@ +package org.apache.maven.scm.provider.perforce.command; + +import org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository; +import org.apache.maven.scm.provider.perforce.PerforceScmProvider; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.command.AbstractCommand; +import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.CommandParameters; +import org.apache.maven.scm.ScmException; +import org.codehaus.plexus.util.cli.CommandLineException; +import org.codehaus.plexus.util.cli.Commandline; + +import java.util.Map; +import java.util.HashMap; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.IOException; + +/** + * Encapsulates the 'p4 info' command which can be very useful in determining + * the runtime environment. Use <code>getEntry(String key)</code> to query + * the info set for a particular property. The data from p4 info looks like this: + * + * <pre> + User name: mperham + Client name: mikeperham-dt + Client host: mikeperham-dt + Client root: d:\perforce + </pre> + * + * where the key is the content before the first colon and the value is the data after + * the first colon, trimmed. For example: + * <code>PerforceInfoCommand.getInfo( this, repo ).getEntry( "User name" )</code> + * <p> + * Note that this is not a traditional SCM command. This uses the Command class + * simply because it needs a logger for error handling and the current repository data for + * command line creation. + * + * + * @author mperham + */ +public class PerforceInfoCommand extends AbstractCommand implements PerforceCommand +{ + private static PerforceInfoCommand singleton = null; + private Map entries = null; + + public static PerforceInfoCommand getInfo( AbstractCommand cmd, PerforceScmProviderRepository repo ) + { + return getSingleton( cmd, repo ); + } + + public String getEntry( String key ) + { + return (String) entries.get( key ); + } + + private static synchronized PerforceInfoCommand getSingleton( AbstractCommand cmd, PerforceScmProviderRepository repo ) + { + if (singleton == null) + { + PerforceInfoCommand pic = new PerforceInfoCommand(); + pic.setLogger( cmd.getLogger() ); + try + { + pic.executeCommand( repo, null, null ); + singleton = pic; + } + catch ( ScmException e ) + { + pic.getLogger().error( e ); + } + } + return singleton; + } + + + protected ScmResult executeCommand( ScmProviderRepository repo, ScmFileSet scmFileSet, + CommandParameters commandParameters ) + throws ScmException + { + try + { + Commandline command = PerforceScmProvider.createP4Command( (PerforceScmProviderRepository) repo, null ); + command.createArgument().setValue( "info" ); + getLogger().debug( PerforceScmProvider.clean( "Executing: " + command.toString() ) ); + Process proc = command.execute(); + BufferedReader br = new BufferedReader( new InputStreamReader( proc.getInputStream() ) ); + String line; + entries = new HashMap(); + while ( ( line = br.readLine() ) != null ) + { + int idx = line.indexOf( ':' ); + if ( idx == -1 ) + { + throw new IllegalStateException( "Unexpected results from 'p4 info' command: " + line ); + } + String key = line.substring( 0, idx ); + String value = line.substring( idx + 1 ).trim(); + entries.put(key, value); + } + } + catch ( CommandLineException e ) + { + getLogger().error( e ); + throw new ScmException( e.getLocalizedMessage() ); + } + catch ( IOException e ) + { + getLogger().error( e ); + throw new ScmException( e.getLocalizedMessage() ); + } + return null; + } +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java ------------------------------------------------------------------------------ svn:eol-style = native