You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ch...@apache.org on 2015/05/07 04:09:13 UTC

[4/4] maven-scm git commit: Changed: Added support for multiple changesets. Changed: Added status calls where necessary to pick up change set aliases as well as workspace/stream names and aliases. Changed: Added additional StatusConsumer test cases.

Changed: Added support for multiple changesets.
Changed: Added status calls where necessary to pick up change set
aliases as well as workspace/stream names and aliases.
Changed: Added additional StatusConsumer test cases.

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

Branch: refs/heads/master
Commit: dd3a18d055dec414191f5529ac9f5c89f12e83ec
Parents: 9098682
Author: Chris Graham <Ch...@gmail.com>
Authored: Sat May 2 22:49:07 2015 +1000
Committer: Chris Graham <ch...@apache.org>
Committed: Thu May 7 12:04:23 2015 +1000

----------------------------------------------------------------------
 .../scm/provider/jazz/JazzScmProvider.java      |  18 ++-
 .../provider/jazz/command/JazzConstants.java    |   9 ++
 .../provider/jazz/command/JazzScmCommand.java   |  11 +-
 .../command/checkin/JazzCheckInCommand.java     |  45 +++++---
 .../jazz/command/list/JazzListCommand.java      |   7 +-
 .../jazz/command/status/JazzStatusConsumer.java |  23 ++--
 .../repository/JazzScmProviderRepository.java   |  20 ++--
 .../jazz/command/JazzScmCommandTest.java        |  28 ++++-
 .../command/checkin/JazzCheckInCommandTest.java |   5 +-
 .../jazz/command/list/JazzListCommandTest.java  |   2 +-
 .../command/status/JazzStatusCommandTest.java   | 111 ++++++++++++++++++-
 11 files changed, 232 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java
index f454845..9f62779 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/JazzScmProvider.java
@@ -112,7 +112,7 @@ public class JazzScmProvider
         // Called from:
         // AbstractScmProvider.makeScmRepository()
         // AbstractScmProvider.validateScmUrl()
-        getLogger().debug( "JazzScmProvider:makeProviderScmRepository" );
+        getLogger().debug( "JazzScmProvider:makeProviderScmRepository()" );
         getLogger().debug( "Provided scm url   - " + scmUrl );
         getLogger().debug( "Provided delimiter - '" + delimiter + "'" );
 
@@ -250,6 +250,7 @@ public class JazzScmProvider
     public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:add()" );
         JazzAddCommand command = new JazzAddCommand();
         command.setLogger( getLogger() );
         return (AddScmResult) command.execute( repository, fileSet, parameters );
@@ -262,6 +263,7 @@ public class JazzScmProvider
                                       CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:branch()" );
         JazzBranchCommand command = new JazzBranchCommand();
         command.setLogger( getLogger() );
         return (BranchScmResult) command.execute( repository, fileSet, parameters );
@@ -273,6 +275,7 @@ public class JazzScmProvider
     protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:blame()" );
         JazzBlameCommand command = new JazzBlameCommand();
         command.setLogger( getLogger() );
         return (BlameScmResult) command.execute( repository, fileSet, parameters );
@@ -285,6 +288,7 @@ public class JazzScmProvider
                                             CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:changelog()" );
         // We need to call the status command first, so that we can get the details of the workspace.
         // This is needed for the list changesets command.
         // We could also 'trust' the value in the pom.
@@ -304,6 +308,7 @@ public class JazzScmProvider
                                         CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:checkin()" );
         JazzCheckInCommand command = new JazzCheckInCommand();
         command.setLogger( getLogger() );
         return (CheckInScmResult) command.execute( repository, fileSet, parameters );
@@ -316,6 +321,7 @@ public class JazzScmProvider
                                           CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:checkout()" );
         JazzCheckOutCommand command = new JazzCheckOutCommand();
         command.setLogger( getLogger() );
         return (CheckOutScmResult) command.execute( repository, fileSet, parameters );
@@ -327,6 +333,7 @@ public class JazzScmProvider
     protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:diff()" );
         JazzDiffCommand command = new JazzDiffCommand();
         command.setLogger( getLogger() );
         return (DiffScmResult) command.execute( repository, fileSet, parameters );
@@ -338,6 +345,7 @@ public class JazzScmProvider
     protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:edit()" );
         JazzEditCommand command = new JazzEditCommand();
         command.setLogger( getLogger() );
         return (EditScmResult) command.execute( repository, fileSet, parameters );
@@ -350,6 +358,7 @@ public class JazzScmProvider
                                       CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:export()" );
         // Use checkout instead
         return super.export( repository, fileSet, parameters );
     }
@@ -360,8 +369,9 @@ public class JazzScmProvider
     protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:list()" );
         // We need to call the status command first, so that we can get the details of the stream etc.
-        // This is needed for workspace deliveries and snapshot promotions.
+        // This is needed for workspace and component names.
         JazzStatusCommand statusCommand = new JazzStatusCommand();
         statusCommand.setLogger( getLogger() );
         statusCommand.execute( repository, fileSet, parameters );
@@ -378,6 +388,7 @@ public class JazzScmProvider
                                       CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:status()" );
         JazzStatusCommand command = new JazzStatusCommand();
         command.setLogger( getLogger() );
         return (StatusScmResult) command.execute( repository, fileSet, parameters );
@@ -389,6 +400,7 @@ public class JazzScmProvider
     protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:tag()" );
         // We need to call the status command first, so that we can get the details of the stream etc.
         // This is needed for workspace deliveries and snapshot promotions.
         JazzStatusCommand statusCommand = new JazzStatusCommand();
@@ -407,6 +419,7 @@ public class JazzScmProvider
                                       CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:update()" );
         JazzUpdateCommand command = new JazzUpdateCommand();
         command.setLogger( getLogger() );
         return (UpdateScmResult) command.execute( repository, fileSet, parameters );
@@ -419,6 +432,7 @@ public class JazzScmProvider
                                       CommandParameters parameters )
         throws ScmException
     {
+        getLogger().debug( "JazzScmProvider:unedit()" );
         JazzUnEditCommand command = new JazzUnEditCommand();
         command.setLogger( getLogger() );
         return (UnEditScmResult) command.execute( repository, fileSet, parameters );

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzConstants.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzConstants.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzConstants.java
index 9e0b2ec..f0ba1b4 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzConstants.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzConstants.java
@@ -272,4 +272,13 @@ public class JazzConstants
      */
     public static final String ARG_WORKSPACE = "--workspace";
 
+    /**
+     * Depth of files returned (used with "list remotefiles" command).
+     */
+    public static final String ARG_DEPTH = "--depth";
+
+    /**
+     * Depth is either numeric or '-' for all'.
+     */
+    public static final String ARG_DEPTH_INFINTE = "-";
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommand.java
index 4adf121..57bb3ba 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommand.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommand.java
@@ -248,7 +248,14 @@ public class JazzScmCommand
             }
             else
             {
-                afterPassword = "\"";
+                if ( Os.isFamily( Os.FAMILY_WINDOWS ) )
+                {
+                    afterPassword = "\"";
+                }
+                else
+                {
+                    afterPassword = "";
+                }
             }
             if ( Os.isFamily( Os.FAMILY_WINDOWS ) )
             {
@@ -256,7 +263,7 @@ public class JazzScmCommand
             }
             else
             {
-                clString = beforePassword + "'*****'";
+                clString = beforePassword + "'*****'" + afterPassword;
             }
         }
 

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommand.java
index 8d35734..07eb26f 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommand.java
@@ -34,6 +34,7 @@ import org.apache.maven.scm.provider.jazz.command.JazzScmCommand;
 import org.apache.maven.scm.provider.jazz.command.add.JazzAddCommand;
 import org.apache.maven.scm.provider.jazz.command.consumer.DebugLoggerConsumer;
 import org.apache.maven.scm.provider.jazz.command.consumer.ErrorConsumer;
+import org.apache.maven.scm.provider.jazz.command.status.JazzStatusCommand;
 import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.cli.StreamConsumer;
@@ -115,21 +116,39 @@ public class JazzCheckInCommand
                                          errConsumer.getOutput(), false );
         }
 
-        // Check to see if we've had a workItem defined (via -DworkItem=XXXX)
+        // As we just created a change set, we now need to call the status command so we can parse the 
+        // newly created change set.
+
+        JazzStatusCommand statusCommand = new JazzStatusCommand();
+        statusCommand.setLogger( getLogger() );
+        statusCommand.executeStatusCommand( repository, fileSet );
+
+        // NOTE: For isPushChangesAndHaveFlowTargets() to work, a scm status call must have been called first!!!
+        // As the Workspace name and alias, and the Flow Target name and alias are needed.
+        
+        // Check to see if we've got a flow target and had a workItem defined (via -DworkItem=XXXX)
         JazzScmProviderRepository jazzRepo = (JazzScmProviderRepository) repository;
         if ( jazzRepo.isPushChangesAndHaveFlowTargets() && StringUtils.isNotEmpty( jazzRepo.getWorkItem() ) )
         {
-            // Associate a work item if we need too.
-            JazzScmCommand changesetAssociateCmd = createChangesetAssociateCommand( repository );
-            outputConsumer = new DebugLoggerConsumer( getLogger() );
-            errConsumer = new ErrorConsumer( getLogger() );
-
-            status = changesetAssociateCmd.execute( outputConsumer, errConsumer );
-            if ( status != 0 || errConsumer.hasBeenFed() )
+            List<Integer> changeSetAliases = jazzRepo.getChangeSetAliases();
+            if ( changeSetAliases != null && !changeSetAliases.isEmpty() )
             {
-                return new CheckInScmResult( changesetAssociateCmd.getCommandString(),
-                                             "Error code for Jazz SCM changeset associate command - " + status,
-                                             errConsumer.getOutput(), false );
+                for ( Integer changeSetAlias : changeSetAliases )
+                {
+                    // Associate a work item if we need too.
+                    JazzScmCommand changesetAssociateCmd = createChangesetAssociateCommand( repository, 
+                        changeSetAlias );
+                    outputConsumer = new DebugLoggerConsumer( getLogger() );
+                    errConsumer = new ErrorConsumer( getLogger() );
+        
+                    status = changesetAssociateCmd.execute( outputConsumer, errConsumer );
+                    if ( status != 0 || errConsumer.hasBeenFed() )
+                    {
+                        return new CheckInScmResult( changesetAssociateCmd.getCommandString(),
+                                                     "Error code for Jazz SCM changeset associate command - " + status,
+                                                     errConsumer.getOutput(), false );
+                    }
+                }
             }
         }
         
@@ -179,14 +198,14 @@ public class JazzCheckInCommand
         return command;
     }
 
-    public JazzScmCommand createChangesetAssociateCommand( ScmProviderRepository repo )
+    public JazzScmCommand createChangesetAssociateCommand( ScmProviderRepository repo, Integer changeSetAlias )
     {
         JazzScmCommand command =
             new JazzScmCommand( JazzConstants.CMD_CHANGESET, JazzConstants.CMD_SUB_ASSOCIATE, repo, false, null,
                                 getLogger() );
         // Add the change set alias
         JazzScmProviderRepository jazzRepo = (JazzScmProviderRepository) repo;
-        command.addArgument( "" + jazzRepo.getChangeSetAlias() );
+        command.addArgument( changeSetAlias.toString() );
         // Add the work item number
         command.addArgument( jazzRepo.getWorkItem() );
         return command;

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommand.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommand.java
index 0a91fdc..09042f5 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommand.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommand.java
@@ -77,10 +77,15 @@ public class JazzListCommand
     public JazzScmCommand createListCommand( JazzScmProviderRepository repo, ScmFileSet fileSet, boolean recursive,
                                              ScmVersion version )
     {
-        // recursive is implicit in the command, so it is ignored.
+        // recursive is implicit in the command, so it is ignored. NOTE: V4 appears to have changed this.
         // version is meaningless, so it is ignored.
         JazzScmCommand command =
             new JazzScmCommand( JazzConstants.CMD_LIST, JazzConstants.CMD_SUB_REMOTEFILES, repo, fileSet, getLogger() );
+        if ( recursive )
+        {
+            command.addArgument( JazzConstants.ARG_DEPTH );
+            command.addArgument( JazzConstants.ARG_DEPTH_INFINTE );
+        }
         command.addArgument( repo.getRepositoryWorkspace() );
         command.addArgument( repo.getComponent() );
         return command;

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusConsumer.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusConsumer.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusConsumer.java
index 0ac426f..19eba7a 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusConsumer.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusConsumer.java
@@ -402,22 +402,13 @@ public class JazzStatusConsumer
                 getLogger().debug( "Successfully parsed post \"Change sets:\" line:" );
                 getLogger().debug( "  changeSetAlias = " + changeSetAlias );
             }
-            jazzRepository.setChangeSetAlias( changeSetAlias );
-            // This is a difficult one. Do I now turn it off or not?
-            seenChangeSets = false;
-            // For the moment I am going too.
-            // If we ever need to support multiple outgoing changesets,
-            // and I can not see how that makes sense in a maven sense,
-            // then we can revisit using a list.
-            // Also, turning if off means that we only look at the first
-            // (and hopefully only!) one.
-            // It also means that if we run across some Incoming: changes,
-            // then we will not pick them up accidently either.
-            //
-            // Another way around this would to be to have a specific
-            // consumer for the create changeset command itself.
-            // That way we would be totally assured that we've picked
-            // up the right Changet Set Alias.
+            // We are now supporting multiple change sets, as this allows
+            // us to cater for multiple changeset caused by previous failed
+            // release attempts.
+            // Our starting point should always be a clean slate of a workspace
+            // or sandbox, however, if something fails, then we will have some
+            // changesets already created, so we need to be able to deal with them effectively.
+            jazzRepository.getChangeSetAliases().add( new Integer( changeSetAlias ) );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepository.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepository.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepository.java
index 20d8208..f1ee5c5 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepository.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepository.java
@@ -19,6 +19,9 @@ package org.apache.maven.scm.provider.jazz.repository;
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -86,7 +89,7 @@ public class JazzScmProviderRepository
     /**
      * The alias of the change set, as returned from the "scm status" command.
      */
-    private int fChangeSetAlias;
+    private List<Integer> fChangeSetAliases = new ArrayList<Integer>();
 
     // TODO In the future we might expand the details of this repository.
     // For example we might extend the scm url to include a stream (as well as the repository workspace)
@@ -249,21 +252,21 @@ public class JazzScmProviderRepository
     }
 
     /**
-     * @return The alias of the changeset, as returned from the "scm status" command.
+     * @return The List<Integer> of aliases of the changesets, as returned from the "scm status" command.
      */
-    public int getChangeSetAlias()
+    public List<Integer> getChangeSetAliases()
     {
-        return fChangeSetAlias;
+        return fChangeSetAliases;
     }
 
     /**
-     * @param fChangeSetAlias the fChangeSetAlias to set
+     * @param ChangeSetAliases the List of Integers of change set aliases to set
      */
-    public void setChangeSetAlias( int fChangeSetAlias )
+    public void setChangeSetAliases( List<Integer> changeSetAliases )
     {
-        this.fChangeSetAlias = fChangeSetAlias;
+        this.fChangeSetAliases = changeSetAliases;
     }
-
+    
     /**
      * {@inheritDoc}
      */
@@ -271,4 +274,5 @@ public class JazzScmProviderRepository
     {
         return getRepositoryURI() + ":" + getRepositoryWorkspace();
     }
+
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java
index 8cfcb60..421a065 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java
@@ -36,12 +36,25 @@ public class JazzScmCommandTest
     }
 
     public void testJazzScmCommand()
+            throws Exception
+        {
+            ScmFileSet scmFileSet = new ScmFileSet( getWorkingCopy() );
+            JazzScmCommand listCommand = new JazzScmCommand( "list", getScmProviderRepository(), scmFileSet, null );
+            String expected =
+                "scm list --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword";
+
+            assertCommandLine( expected, getWorkingDirectory(), listCommand.getCommandline() );
+
+        }
+
+    public void testJazzScmCommandWithExtraArg()
         throws Exception
     {
         ScmFileSet scmFileSet = new ScmFileSet( getWorkingCopy() );
         JazzScmCommand listCommand = new JazzScmCommand( "list", getScmProviderRepository(), scmFileSet, null );
+        listCommand.addArgument( "ExtraArg" );
         String expected =
-            "scm list --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword";
+            "scm list --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword ExtraArg";
 
         assertCommandLine( expected, getWorkingDirectory(), listCommand.getCommandline() );
 
@@ -58,4 +71,17 @@ public class JazzScmCommandTest
 
         assertEquals( "cryptPassword failed!", expected, actual );
     }
+
+    public void testCryptPasswordWithExtraArg()
+            throws Exception
+        {
+            JazzScmCommand listCommand = new JazzScmCommand( "list", getScmProviderRepository(), null, null );
+            listCommand.addArgument( "ExtraArg" );
+            String actual = JazzScmCommand.cryptPassword( listCommand.getCommandline() );
+            String expected = Os.isFamily( Os.FAMILY_WINDOWS )
+                ? "cmd.exe /X /C \"scm list --repository-uri https://localhost:9443/jazz --username myUserName --password ***** ExtraArg\""
+                : "/bin/sh -c scm list --repository-uri https://localhost:9443/jazz --username myUserName --password '*****' ExtraArg";
+
+            assertEquals( "cryptPassword failed!", expected, actual );
+        }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java
index b30bfcf..6611ddf 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java
@@ -1,5 +1,7 @@
 package org.apache.maven.scm.provider.jazz.command.checkin;
 
+import java.awt.List;
+
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.log.DefaultLog;
 import org.apache.maven.scm.provider.jazz.JazzScmTestCase;
@@ -61,8 +63,7 @@ public class JazzCheckInCommandTest
             JazzScmProviderRepository repo = getScmProviderRepository();
             // Populate the values that are normally parsed and set by the StatusConsumer.
             repo.setWorkItem( "215762" );
-            repo.setChangeSetAlias( 1234 );
-            Commandline cmd = new JazzCheckInCommand().createChangesetAssociateCommand( repo ).getCommandline();
+            Commandline cmd = new JazzCheckInCommand().createChangesetAssociateCommand( repo, new Integer(1234) ).getCommandline();
             // Because we do not use a ScmFileSet, the working dir is not set, so the test fails.
             cmd.setWorkingDirectory( getWorkingDirectory() );
             String expected = "scm changeset associate --username myUserName --password myPassword 1234 215762";

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommandTest.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommandTest.java b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommandTest.java
index 8a54ab2..a42ce3e 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommandTest.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/list/JazzListCommandTest.java
@@ -58,7 +58,7 @@ public class JazzListCommandTest
     {
         Commandline cmd = new JazzListCommand().createListCommand( repo, getScmFileSet(), true, null ).getCommandline();
         String expected =
-            "scm list remotefiles --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword \"Dave's Repository Workspace\" \"Dave's Component\"";
+            "scm list remotefiles --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword --depth - \"Dave's Repository Workspace\" \"Dave's Component\"";
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }
 

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/dd3a18d0/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommandTest.java
----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommandTest.java b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommandTest.java
index acb862e..ede7e91 100644
--- a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommandTest.java
+++ b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommandTest.java
@@ -83,7 +83,9 @@ public class JazzStatusCommandTest
         assertEquals( "Flow Target Alias is incorrect!", 1001, repo.getFlowTargetAlias() );
         assertEquals( "Component is incorrect!", "SCM Plugins", repo.getComponent() );
         assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
-        assertEquals( "Change Set Alias is incorrect!", 1008, repo.getChangeSetAlias());
+        assertNotNull( repo.getChangeSetAliases() );
+        assertEquals( "Change Set Alias length is incorrect!", 1, repo.getChangeSetAliases().size() );
+        assertEquals( "Change Set Alias is incorrect!", new Integer(1008), repo.getChangeSetAliases().get(0));
 
         // Test the stream parsing and isPushChanges bits.
         assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
@@ -171,4 +173,111 @@ public class JazzStatusCommandTest
         assertEquals( "Component is incorrect!", "FireDragon", repo.getComponent() );
         assertEquals( "Baseline is incorrect!", "Initial Baseline", repo.getBaseline() );
     }
+    
+    public void testConsumerWithMultipleChangeSets()
+    {
+    	statusConsumer.consumeLine( "Workspace: (1000) \"GPDBWorkspace\" <-> (1001) \"GPDBStream\"" );
+    	statusConsumer.consumeLine( "  Component: (1002) \"GPDB\"" );
+    	statusConsumer.consumeLine( "    Baseline: (1003) 49 \"GPDB-MAN-1.0.50\"" );
+    	statusConsumer.consumeLine( "    Unresolved:" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBEAR/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBResources/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBWeb/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "    Outgoing:" );
+    	statusConsumer.consumeLine( "      Change sets:" );
+    	statusConsumer.consumeLine( "        (1012) *--@  \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 09:38 PM" );
+    	statusConsumer.consumeLine( "        (1011) ---@  \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 09:33 PM" );
+    	statusConsumer.consumeLine( "        (1010) ---@  \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] prepare release GPDB-1.0.51\" 02-May-2015 09:28 PM" );
+    	statusConsumer.consumeLine( "        (1009) ---@  \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 08:05 PM" );
+    	statusConsumer.consumeLine( "        (1008) ---@  \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] prepare release GPDB-1.0.51\" 02-May-2015 08:00 PM" );
+    	statusConsumer.consumeLine( "        (1007) ---@  \"[maven-release-plugin] rollback the "
+    			+ "release of GPDB-1.0.51\" 02-May-2015 07:54 PM" );
+    	statusConsumer.consumeLine( "        (1006) ---@  \"[maven-release-plugin] prepare "
+    			+ "release GPDB-1.0.51\" 02-May-2015 09:33 PM" );
+
+        // Test the additional collected data, Workspace, Component, Baseline.
+        assertEquals( "Workspace is incorrect!", "GPDBWorkspace", repo.getWorkspace() );
+        assertEquals( "Workspace Alias is incorrect!", 1000, repo.getWorkspaceAlias() );
+        assertEquals( "Flow Target is incorrect!", "GPDBStream", repo.getFlowTarget() );
+        assertEquals( "Flow Target Alias is incorrect!", 1001, repo.getFlowTargetAlias() );
+        assertEquals( "Component is incorrect!", "GPDB", repo.getComponent() );
+        assertEquals( "Baseline is incorrect!", "GPDB-MAN-1.0.50", repo.getBaseline() );
+
+        // Test the stream parsing and isPushChanges bits.
+        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+        repo.setPushChanges( false );
+        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+        repo.setPushChanges( true );
+        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+
+
+        assertNotNull( repo.getChangeSetAliases() );
+        assertEquals( "Change Set Alias length is incorrect!", 7, repo.getChangeSetAliases().size() );
+        assertEquals( "Change Set Alias [0] is incorrect!", new Integer(1012), repo.getChangeSetAliases().get(0));
+        assertEquals( "Change Set Alias [1] is incorrect!", new Integer(1011), repo.getChangeSetAliases().get(1));
+        assertEquals( "Change Set Alias [2] is incorrect!", new Integer(1010), repo.getChangeSetAliases().get(2));
+        assertEquals( "Change Set Alias [3] is incorrect!", new Integer(1009), repo.getChangeSetAliases().get(3));
+        assertEquals( "Change Set Alias [4] is incorrect!", new Integer(1008), repo.getChangeSetAliases().get(4));
+        assertEquals( "Change Set Alias [5] is incorrect!", new Integer(1007), repo.getChangeSetAliases().get(5));
+        assertEquals( "Change Set Alias [6] is incorrect!", new Integer(1006), repo.getChangeSetAliases().get(6));
+    }
+
+    public void testConsumerWithMultipleChangeSetsAndWorkItems()
+    {
+    	statusConsumer.consumeLine( "Workspace: (1000) \"GPDBWorkspace\" <-> (1001) \"GPDBStream\"" );
+    	statusConsumer.consumeLine( "  Component: (1002) \"GPDB\"" );
+    	statusConsumer.consumeLine( "    Baseline: (1003) 49 \"GPDB-MAN-1.0.50\"" );
+    	statusConsumer.consumeLine( "    Unresolved:" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBEAR/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBResources/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/GPDBWeb/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "      a-- /GPDB/pom.xml.releaseBackup" );
+    	statusConsumer.consumeLine( "    Outgoing:" );
+    	statusConsumer.consumeLine( "      Change sets:" );
+    	statusConsumer.consumeLine( "        (1012) *--@  62 \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 09:38 PM" );
+    	statusConsumer.consumeLine( "        (1011) ---@  62 \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 09:33 PM" );
+    	statusConsumer.consumeLine( "        (1010) ---@  62 \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] prepare release GPDB-1.0.51\" 02-May-2015 09:28 PM" );
+    	statusConsumer.consumeLine( "        (1009) ---@  62 \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] rollback the release of GPDB-1.0.51\" 02-May-2015 08:05 PM" );
+    	statusConsumer.consumeLine( "        (1008) ---@  62 \"Release the next release of GPDB.\" - "
+    			+ "\"[maven-release-plugin] prepare release GPDB-1.0.51\" 02-May-2015 08:00 PM" );
+    	statusConsumer.consumeLine( "        (1007) ---@  \"[maven-release-plugin] rollback the "
+    			+ "release of GPDB-1.0.51\" 02-May-2015 07:54 PM" );
+    	statusConsumer.consumeLine( "        (1006) ---@  \"[maven-release-plugin] prepare "
+    			+ "release GPDB-1.0.51\" 02-May-2015 09:33 PM" );
+
+        // Test the additional collected data, Workspace, Component, Baseline.
+        assertEquals( "Workspace is incorrect!", "GPDBWorkspace", repo.getWorkspace() );
+        assertEquals( "Workspace Alias is incorrect!", 1000, repo.getWorkspaceAlias() );
+        assertEquals( "Flow Target is incorrect!", "GPDBStream", repo.getFlowTarget() );
+        assertEquals( "Flow Target Alias is incorrect!", 1001, repo.getFlowTargetAlias() );
+        assertEquals( "Component is incorrect!", "GPDB", repo.getComponent() );
+        assertEquals( "Baseline is incorrect!", "GPDB-MAN-1.0.50", repo.getBaseline() );
+
+        // Test the stream parsing and isPushChanges bits.
+        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+        repo.setPushChanges( false );
+        assertFalse( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+        repo.setPushChanges( true );
+        assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );
+
+        assertNotNull( repo.getChangeSetAliases() );
+        assertEquals( "Change Set Alias length is incorrect!", 7, repo.getChangeSetAliases().size() );
+        assertEquals( "Change Set Alias [0] is incorrect!", new Integer(1012), repo.getChangeSetAliases().get(0));
+        assertEquals( "Change Set Alias [1] is incorrect!", new Integer(1011), repo.getChangeSetAliases().get(1));
+        assertEquals( "Change Set Alias [2] is incorrect!", new Integer(1010), repo.getChangeSetAliases().get(2));
+        assertEquals( "Change Set Alias [3] is incorrect!", new Integer(1009), repo.getChangeSetAliases().get(3));
+        assertEquals( "Change Set Alias [4] is incorrect!", new Integer(1008), repo.getChangeSetAliases().get(4));
+        assertEquals( "Change Set Alias [5] is incorrect!", new Integer(1007), repo.getChangeSetAliases().get(5));
+        assertEquals( "Change Set Alias [6] is incorrect!", new Integer(1006), repo.getChangeSetAliases().get(6));
+    }
 }