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/08/14 03:55:41 UTC
svn commit: r431280 - in
/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce:
PerforceScmProvider.java command/PerforceInfoCommand.java
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