Author: carlos
Date: Thu Dec  4 14:49:48 2008
New Revision: 723478

URL: http://svn.apache.org/viewvc?rev=723478&view=rev
Log:
[SCM-415] Perforce scm requires password breaking Perforce setup for external 
authentication 
Submitted By: ajbanck, Peter Janes

Modified:
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommandTest.java

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=723478&r1=723477&r2=723478&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
 Thu Dec  4 14:49:48 2008
@@ -51,27 +51,34 @@
     {
         Commandline cl = createCommandLine( (PerforceScmProviderRepository) 
repo, files.getBasedir() );
         PerforceLoginConsumer consumer = new PerforceLoginConsumer();
+        boolean isSuccess = false;
 
         try
         {
             String password = repo.getPassword();
             if ( StringUtils.isEmpty( password ) )
             {
-                throw new ScmException( "password is required for the perforce 
scm plugin." );
+                if ( getLogger().isInfoEnabled() )
+                {
+                    getLogger().info( "No password found, proceeding without 
it." );
+                }
+                isSuccess = true;
             }
+            else {
+                CommandLineUtils.StringStreamConsumer err = new 
CommandLineUtils.StringStreamConsumer();
+                int exitCode = CommandLineUtils.executeCommandLine( cl, new 
StringBufferInputStream(password), consumer, err );
+                isSuccess = consumer.isSuccess();
+
+                if ( isSuccess )
+                {
+                    String cmdLine = CommandLineUtils.toString( 
cl.getCommandline() );
+
+                    StringBuffer msg = new StringBuffer( "Exit code: " + 
exitCode + " - " + err.getOutput() );
+                    msg.append( '\n' );
+                    msg.append( "Command line was:" + cmdLine );
 
-            CommandLineUtils.StringStreamConsumer err = new 
CommandLineUtils.StringStreamConsumer();
-            int exitCode = CommandLineUtils.executeCommandLine( cl, new 
StringBufferInputStream(password), consumer, err );
-
-            if ( exitCode != 0 )
-            {
-                String cmdLine = CommandLineUtils.toString( 
cl.getCommandline() );
-
-                StringBuffer msg = new StringBuffer( "Exit code: " + exitCode 
+ " - " + err.getOutput() );
-                msg.append( '\n' );
-                msg.append( "Command line was:" + cmdLine );
-
-                throw new CommandLineException( msg.toString() );
+                    throw new CommandLineException( msg.toString() );
+                }
             }
         }
         catch ( CommandLineException e )
@@ -79,8 +86,8 @@
             throw new ScmException( "", e );
         }
 
-        return new LoginScmResult( cl.toString(), consumer.isSuccess() ? 
"Login successful" : "Login failed",
-                        consumer.getOutput(), consumer.isSuccess() );
+        return new LoginScmResult( cl.toString(), isSuccess ? "Login 
successful" : "Login failed",
+                        consumer.getOutput(), isSuccess );
     }
 
     public static Commandline createCommandLine( PerforceScmProviderRepository 
repo, File workingDir )

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommandTest.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommandTest.java?rev=723478&r1=723477&r2=723478&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommandTest.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/login/PerforceLoginCommandTest.java
 Thu Dec  4 14:49:48 2008
@@ -19,7 +19,10 @@
  * under the License.
  */
 
+import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.log.DefaultLog;
+import org.apache.maven.scm.log.ScmLogger;
 import 
org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.codehaus.plexus.util.cli.Commandline;
@@ -44,6 +47,26 @@
         testCommandLine( cmdPrefix + " login" );
     }
 
+    /**
+     * This test requires P4 installed
+     * 
+     * @throws Exception
+     */
+    public void disabledTestLoginWithoutPassword()
+        throws Exception
+    {
+        ScmRepository repository = getScmManager().makeScmRepository( 
"scm:perforce://depot/projects/pathname" );
+        PerforceScmProviderRepository scmRepository =
+            (PerforceScmProviderRepository) repository.getProviderRepository();
+        ScmFileSet fileSet = new ScmFileSet( new File( "." ) );
+
+        PerforceLoginCommand command = new PerforceLoginCommand();
+        ScmLogger logger = new DefaultLog();
+        command.setLogger( logger );
+
+        command.executeLoginCommand( scmRepository, fileSet, null );
+    }
+
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
@@ -52,10 +75,10 @@
         throws Exception
     {
         ScmRepository repository = getScmManager().makeScmRepository( 
"scm:perforce://depot/projects/pathname" );
-        PerforceScmProviderRepository svnRepository = 
(PerforceScmProviderRepository) repository
+        PerforceScmProviderRepository scmRepository = 
(PerforceScmProviderRepository) repository
             .getProviderRepository();
         //CommandParameters params = new CommandParameters();
-        Commandline cl = PerforceLoginCommand.createCommandLine( 
svnRepository, workingDirectory );
+        Commandline cl = PerforceLoginCommand.createCommandLine( 
scmRepository, workingDirectory );
 
         assertCommandLine( commandLine, null, cl );
     }


Reply via email to