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