Repository: maven-scm
Updated Branches:
  refs/heads/master 5c303e41f -> 3aab5fda6


[SCM-819] Integrity blame command fixes.
fixes #9

Signed-off-by: olivier lamy <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/3aab5fda
Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/3aab5fda
Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/3aab5fda

Branch: refs/heads/master
Commit: 3aab5fda6cb1bcf83da67bac29a9731047e923f1
Parents: 5c303e4
Author: olivier lamy <[email protected]>
Authored: Tue Apr 5 13:20:30 2016 +1000
Committer: olivier lamy <[email protected]>
Committed: Tue Apr 5 13:20:30 2016 +1000

----------------------------------------------------------------------
 .../command/blame/IntegrityBlameCommand.java    | 69 ++++++++++++++++++--
 1 file changed, 62 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/3aab5fda/maven-scm-providers/maven-scm-provider-integrity/src/main/java/org/apache/maven/scm/provider/integrity/command/blame/IntegrityBlameCommand.java
----------------------------------------------------------------------
diff --git 
a/maven-scm-providers/maven-scm-provider-integrity/src/main/java/org/apache/maven/scm/provider/integrity/command/blame/IntegrityBlameCommand.java
 
b/maven-scm-providers/maven-scm-provider-integrity/src/main/java/org/apache/maven/scm/provider/integrity/command/blame/IntegrityBlameCommand.java
index 1989a44..e910911 100644
--- 
a/maven-scm-providers/maven-scm-provider-integrity/src/main/java/org/apache/maven/scm/provider/integrity/command/blame/IntegrityBlameCommand.java
+++ 
b/maven-scm-providers/maven-scm-provider-integrity/src/main/java/org/apache/maven/scm/provider/integrity/command/blame/IntegrityBlameCommand.java
@@ -25,7 +25,6 @@ import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.command.blame.AbstractBlameCommand;
 import org.apache.maven.scm.command.blame.BlameScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
-import org.apache.maven.scm.provider.integrity.APISession;
 import 
org.apache.maven.scm.provider.integrity.repository.IntegrityScmProviderRepository;
 import org.codehaus.plexus.util.cli.CommandLineException;
 import org.codehaus.plexus.util.cli.CommandLineUtils;
@@ -57,25 +56,81 @@ public class IntegrityBlameCommand
         }
         BlameScmResult result;
         IntegrityScmProviderRepository iRepo = 
(IntegrityScmProviderRepository) repository;
-        APISession api = iRepo.getAPISession();
         // Since the si annotate command is not completely API ready, we will 
use the CLI for this command
+        // Ensure shell 'si' client is connected.
+        doShellConnect( iRepo, workingDirectory );
+        result = doShellAnnotate( iRepo, workingDirectory, filename );
+
+        return result;
+    }
+
+    /**
+     * Execute 'si connect' command in current shell.
+     *
+     * @param iRepo            the Integrity repository instance.
+     * @param workingDirectory the SCM working directory.
+     * @throws ScmException if connect command failed.
+     */
+    private void doShellConnect( IntegrityScmProviderRepository iRepo, 
ScmFileSet workingDirectory )
+        throws ScmException
+    {
+        Commandline shell = new Commandline();
+        shell.setWorkingDirectory( workingDirectory.getBasedir() );
+        shell.setExecutable( "si" );
+        shell.createArg().setValue( "connect" );
+        shell.createArg().setValue( "--hostname=" + iRepo.getHost() );
+        shell.createArg().setValue( "--port=" + iRepo.getPort() );
+        shell.createArg().setValue( "--user=" + iRepo.getUser() );
+        shell.createArg().setValue( "--batch" );
+        shell.createArg().setValue( "--password=" + iRepo.getPassword() );
+        CommandLineUtils.StringStreamConsumer shellConsumer = new 
CommandLineUtils.StringStreamConsumer();
+
+        try
+        {
+            getLogger().debug( "Executing: " + CommandLineUtils.toString( 
shell.getCommandline() ) );
+            int exitCode = CommandLineUtils.executeCommandLine( shell, 
shellConsumer, shellConsumer );
+            if ( exitCode != 0 )
+            {
+                throw new ScmException( "Can't login to integrity. Message : " 
+ shellConsumer.toString() );
+            }
+        }
+        catch ( CommandLineException cle )
+        {
+            getLogger().error( "Command Line Connect Exception: " + 
cle.getMessage() );
+            throw new ScmException( "Can't login to integrity. Message : " + 
cle.getMessage() );
+        }
+
+    }
+
+    /**
+     * Execute 'si annotate' command in current shell and process output as 
{@link BlameScmResult} instance.
+     *
+     * @param iRepo            the Integrity repository instance.
+     * @param workingDirectory the SCM working directory.
+     * @param filename         the file name.
+     * @return the {@link BlameScmResult} instance.
+     */
+    private BlameScmResult doShellAnnotate( IntegrityScmProviderRepository 
iRepo, ScmFileSet workingDirectory,
+                                            String filename )
+    {
+        BlameScmResult result;
         Commandline shell = new Commandline();
         shell.setWorkingDirectory( workingDirectory.getBasedir() );
         shell.setExecutable( "si" );
         shell.createArg().setValue( "annotate" );
-        shell.createArg().setValue( "--hostname=" + api.getHostName() );
-        shell.createArg().setValue( "--port=" + api.getPort() );
-        shell.createArg().setValue( "--user=" + api.getUserName() );
+        shell.createArg().setValue( "--hostname=" + iRepo.getHost() );
+        shell.createArg().setValue( "--port=" + iRepo.getPort() );
+        shell.createArg().setValue( "--user=" + iRepo.getUser() );
         shell.createArg().setValue( "--fields=date,revision,author" );
         shell.createArg().setValue( '"' + filename + '"' );
         IntegrityBlameConsumer shellConsumer = new IntegrityBlameConsumer( 
getLogger() );
 
         try
         {
-            getLogger().debug( "Executing: " + shell.getCommandline() );
+            getLogger().debug( "Executing: " + CommandLineUtils.toString( 
shell.getCommandline() ) );
             int exitCode = CommandLineUtils.executeCommandLine( shell, 
shellConsumer,
                                                                 new 
CommandLineUtils.StringStreamConsumer() );
-            boolean success = ( exitCode == 128 ? false : true );
+            boolean success = ( exitCode == 0 ? true : false );
             ScmResult scmResult =
                 new ScmResult( shell.getCommandline().toString(), "", "Exit 
Code: " + exitCode, success );
             return new BlameScmResult( shellConsumer.getBlameList(), scmResult 
);

Reply via email to