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:10 UTC

[1/4] maven-scm git commit: Change: Added consumer

Repository: maven-scm
Updated Branches:
  refs/heads/master c76eb1f11 -> dd3a18d05


Change: Added consumer


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

Branch: refs/heads/master
Commit: 8dd21b9c2477539cc768c548e4cd877c29aac1ff
Parents: c76eb1f
Author: Chris Graham <ch...@apache.org>
Authored: Sat Apr 4 21:33:44 2015 +1100
Committer: Chris Graham <ch...@apache.org>
Committed: Wed May 6 13:29:55 2015 +1000

----------------------------------------------------------------------
 .../scm/provider/ScmProviderRepository.java     |  44 ++++++++
 .../prepare.groovy                              |   4 +
 .../maven/scm/plugin/AbstractScmMojo.java       |  14 +++
 .../provider/jazz/command/JazzConstants.java    |  12 ++
 .../command/checkin/JazzCheckInCommand.java     |  31 ++++++
 .../jazz/command/status/JazzStatusConsumer.java | 111 +++++++++++++++++--
 .../repository/JazzScmProviderRepository.java   |  23 +++-
 .../command/checkin/JazzCheckInCommandTest.java |  12 ++
 .../command/status/JazzStatusCommandTest.java   |   1 +
 9 files changed, 242 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
----------------------------------------------------------------------
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
index 58e2a50..c55b525 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
@@ -22,6 +22,7 @@ package org.apache.maven.scm.provider;
 /**
  * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
  *
  */
 public abstract class ScmProviderRepository
@@ -38,6 +39,31 @@ public abstract class ScmProviderRepository
     private boolean pushChanges = true;
 
     /**
+     * Some SCMs have the concept of a work item (or task) which may need to be
+     * specified to allow changes to be pushed or delivered to a target.
+     * This allows you to answer the question: For this workItem, what changed?
+     * Auditors have been known to love this... :)
+     * SCMs known to implement this are:
+     * <ul>
+     * <li>IBM Rational Team Concert (workItem)
+     * <li>Microsoft Team Foundation Server (workItem)
+     * <li>IBM Rational ClearQuest Enabled UCM ClearCase (task)
+     * </ul>
+     * There may be others that support this feature.
+     * <P>
+     * These SCMs can be configured to reject a push/deliver unless additional
+     * information (by way of a workItem/task) is supplied.
+     * <P>
+     * This field is only relevant when pushChanges = true.
+     * <P>
+     * It should be noted however, when pushChanges = true, a workItem does not
+     * need to be set, as the need for a workItem may be optional.
+     * 
+     * @since 1.9.5
+     */
+    private String workItem;
+
+    /**
      * @return The user.
      */
     public String getUser()
@@ -95,6 +121,24 @@ public abstract class ScmProviderRepository
     }
 
     /**
+     * @return The workItem.
+     */
+    public String getWorkItem()
+    {
+        return workItem;
+    }
+
+    /**
+     * Set the workItem.
+     *
+     * @param user The workItem.
+     */
+    public void setWorkItem( String workItem )
+    {
+        this.workItem = workItem;
+    }
+
+    /**
      * Will checkouts using this repository be persisted so they can
      * be refreshed in the future?  This property is of concern to SCMs
      * like Perforce and Clearcase where the server must track where a

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy
----------------------------------------------------------------------
diff --git a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy
index 40cf6ff..a4915ee 100644
--- a/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy
+++ b/maven-scm-plugin/src/it/scm-741-validate-scm-url-matches-working-copy/prepare.groovy
@@ -21,6 +21,8 @@
 // BUT we actually don't store that special versioning directory as-is to prevent potentially confusing 
 // (to say the least) a svn checkout of the maven-scm project.
 // 
+
+println "prepare.groovy:"
 File dotSvnDir = new File( basedir, 'dotSvnDir' )
 assert dotSvnDir.exists()
 assert dotSvnDir.isDirectory()
@@ -28,6 +30,7 @@ assert dotSvnDir.renameTo( new File( basedir, '.svn' ) )
 
 println "svn --version"
 def proc = "svn --version".execute()
+proc.consumeProcessOutput()
 proc.waitFor()
 println "return code: ${ proc.exitValue()}"
 println "stderr: ${proc.err.text}"
@@ -35,6 +38,7 @@ println "stdout: ${proc.in.text}"
 
 println "svn upgrade $basedir"
 proc = ["svn", "upgrade", "$basedir"].execute()
+proc.consumeProcessOutput()
 proc.waitFor()
 println "return code: ${ proc.exitValue()}"
 println "stderr: ${proc.err.text}"

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
----------------------------------------------------------------------
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
index c7533b8..a18e319 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/AbstractScmMojo.java
@@ -170,6 +170,15 @@ public abstract class AbstractScmMojo
     @Parameter( property = "pushChanges", defaultValue = "true" )
     private boolean pushChanges;
 
+    /**
+     * A workItem for SCMs like RTC, TFS etc, that may require additional
+     * information to perform a pushChange operation.
+     *
+     * @since 1.9.5
+     */
+    @Parameter( property = "workItem" )
+    private String workItem;
+
     /** {@inheritDoc} */
     public void execute()
         throws MojoExecutionException
@@ -285,6 +294,11 @@ public abstract class AbstractScmMojo
 
             providerRepo.setPushChanges( pushChanges );
 
+            if ( !StringUtils.isEmpty( workItem ) )
+            {
+                providerRepo.setWorkItem( workItem );
+            }
+            
             if ( !StringUtils.isEmpty( username ) )
             {
                 providerRepo.setUser( username );

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 2a85f38..9e0b2ec 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
@@ -107,6 +107,11 @@ public class JazzConstants
      */
     public static final String CMD_STATUS = "status";
 
+    /**
+     * Changeset command - Modifies change sets.
+     */
+    public static final String CMD_CHANGESET = "changeset";
+
     // -------------------------------------------------------------------------------------------------
     // SUB-COMMANDS
     // -------------------------------------------------------------------------------------------------
@@ -159,6 +164,13 @@ public class JazzConstants
      */
     public static final String CMD_SUB_PROMOTE = "promote";
 
+    // CHANGESET sub commands
+
+    /**
+     * Associate a Work Item with a change set.
+     */
+    public static final String CMD_SUB_ASSOCIATE = "associate";
+
     // -------------------------------------------------------------------------------------------------
     // ARGUMENTS
     // -------------------------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 7f6ab3c..8d35734 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
@@ -115,6 +115,24 @@ public class JazzCheckInCommand
                                          errConsumer.getOutput(), false );
         }
 
+        // Check to see if we've 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() )
+            {
+                return new CheckInScmResult( changesetAssociateCmd.getCommandString(),
+                                             "Error code for Jazz SCM changeset associate command - " + status,
+                                             errConsumer.getOutput(), false );
+            }
+        }
+        
         // Now check in the files themselves.
         return executeCheckInCommand( repository, fileSet, scmVersion );
     }
@@ -161,6 +179,19 @@ public class JazzCheckInCommand
         return command;
     }
 
+    public JazzScmCommand createChangesetAssociateCommand( ScmProviderRepository repo )
+    {
+        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() );
+        // Add the work item number
+        command.addArgument( jazzRepo.getWorkItem() );
+        return command;
+    }
+
     public JazzScmCommand createCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet )
     {
         JazzScmCommand command =

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 498a32e..0ac426f 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
@@ -65,6 +65,37 @@ public class JazzStatusConsumer
 // remote calls to the server. They are not to be shared across machines (ie don't make them global, public
 // or persistent).
 //
+// We can also have a changeset with a work item associated with it:
+//
+//  Workspace: (1156) "GPDBWorkspace" <-> (1157) "GPDBStream"
+//    Component: (1158) "GPDB"
+//      Baseline: (2362) 48 "GPDB-1.0.50"
+//        Outgoing:
+//          Change sets:
+//            (2366) *--@  62 "Release the next release of GPDB." - "Man Created Changeset: X.Y.Z" 28-Apr-2015 07:55 PM
+//
+// Or not:
+//
+//  Workspace: (1156) "GPDBWorkspace" <-> (1157) "GPDBStream"
+//    Component: (1158) "GPDB"
+//      Baseline: (2362) 48 "GPDB-1.0.50"
+//        Outgoing:
+//          Change sets:
+//            (2365) ---@  "This is my changeset comment." 26-Apr-2015 09:36 PM
+//
+// We can also have a multiple changesets, although, if the correct build procedure has been followed, namely we
+// start with a clean starting point, with nothing outstanding, then we should never see this (famous last words!)
+//
+//  Workspace: (1156) "GPDBWorkspace" <-> (1157) "GPDBStream"
+//    Component: (1158) "GPDB"
+//      Baseline: (2362) 48 "GPDB-1.0.50"
+//        Outgoing:
+//          Change sets:
+//            (2366) *--@  62 "Release the next release of GPDB." - "Man Created Changeset: X.Y.Z" 28-Apr-2015 07:55 PM
+//            (2365) ---@  "This is my changeset comment." 26-Apr-2015 09:36 PM
+//
+// Because the "Change sets:" line exists by itself, and it is followed by the changeset
+// lines, we need to implement a state machine... (seenChangeSets)
 
     //  Workspace: (1000) "BogusRepositoryWorkspace" <-> (1000) "BogusRepositoryWorkspace"
     //  Workspace: (1156) "GPDBWorkspace" <-> (1157) "GPDBStream"
@@ -81,8 +112,13 @@ public class JazzStatusConsumer
     //  Baseline: (1128) 27 "BogusTestJazz-3.0.0.40"
     private static final Pattern BASELINE_PATTERN = Pattern.compile( "\\((\\d+)\\) (\\d+) \"(.*)\"" );
 
-    // Additional data we collect. (eye catchers)
+    // (2365) ---@  "This is my changeset comment." 26-Apr-2015 09:36 PM
+    private static final Pattern CHANGESET_PATTERN = Pattern.compile( "\\((\\d+)\\) (.*)" );
 
+    //
+    // Additional data we collect. (eye catchers)
+    //
+    
     /**
      * The "Status" command output line that contains the "Workspace" name.
      */
@@ -94,10 +130,16 @@ public class JazzStatusConsumer
     public static final String STATUS_CMD_COMPONENT = "Component:";
 
     /**
-     * The "Status" command output line that contains the "Workspace" name.
+     * The "Status" command output line that contains the "Baseline" name.
      */
     public static final String STATUS_CMD_BASELINE = "Baseline:";
 
+    /**
+     * The "Status" command output line that contains the line "Change sets:".
+     * This will be followed by the 
+     */
+    public static final String STATUS_CMD_CHANGE_SETS = "Change sets:";
+    
     // File Status Commands (eye catchers)
 
     /**
@@ -127,6 +169,11 @@ public class JazzStatusConsumer
     private List<ScmFile> fChangedFiles = new ArrayList<ScmFile>();
 
     /**
+     * Implement a simple state machine: Have we seen the "Change sets:" line or not?
+     */
+    private boolean seenChangeSets = false;
+
+    /**
      * Constructor for our "scm status" consumer.
      *
      * @param repo   The JazzScmProviderRepository being used.
@@ -162,6 +209,14 @@ public class JazzStatusConsumer
         {
             extractChangedFile( line );
         }
+        if ( containsChangeSets( line ) )
+        {
+            seenChangeSets = true;
+        }
+        if ( seenChangeSets )
+        {
+            extractChangeSetAlias( line );
+        }
     }
 
     private boolean containsWorkspace( String line )
@@ -267,9 +322,9 @@ public class JazzStatusConsumer
             if ( getLogger().isDebugEnabled() )
             {
                 getLogger().debug( "Successfully parsed \"Baseline:\" line:" );
-                getLogger().debug( "  baselineAlias = " + baselineAlias );
-                getLogger().debug( "  baselineId    = " + baselineId );
-                getLogger().debug( "  baseline      = " + baseline );
+                getLogger().debug( "  baselineAlias  = " + baselineAlias );
+                getLogger().debug( "  baselineId     = " + baselineId );
+                getLogger().debug( "  baseline       = " + baseline );
             }
             jazzRepository.setBaseline( baseline );
         }
@@ -314,10 +369,9 @@ public class JazzStatusConsumer
 
         if ( getLogger().isDebugEnabled() )
         {
-            getLogger().debug( " Line               : '" + line + "'" );
-            getLogger().debug( " Extracted filePath : '" + filePath + "'" );
-            getLogger().debug( " Extracted     flag : '" + flag + "'" );
-            getLogger().debug( " Extracted   status : '" + status + "'" );
+            getLogger().debug( " Extracted filePath  : '" + filePath + "'" );
+            getLogger().debug( " Extracted     flag  : '" + flag + "'" );
+            getLogger().debug( " Extracted   status  : '" + status + "'" );
         }
 
         fChangedFiles.add( new ScmFile( filePath, status ) );
@@ -327,4 +381,43 @@ public class JazzStatusConsumer
     {
         return fChangedFiles;
     }
+
+    private boolean containsChangeSets( String line )
+    {
+        return line.trim().startsWith( STATUS_CMD_CHANGE_SETS );
+    }
+
+    private void extractChangeSetAlias( String line )
+    {
+        // (2365) ---@  "This is my changeset comment." 26-Apr-2015 09:36 PM
+
+        Matcher matcher = CHANGESET_PATTERN.matcher( line );
+        if ( matcher.find() )
+        {
+            JazzScmProviderRepository jazzRepository = (JazzScmProviderRepository) getRepository();
+
+            int changeSetAlias = Integer.parseInt( matcher.group( 1 ) );
+            if ( getLogger().isDebugEnabled() )
+            {
+                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.
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 913c704..20d8208 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
@@ -83,6 +83,11 @@ public class JazzScmProviderRepository
      */
     private String fBaseline;
 
+    /**
+     * The alias of the change set, as returned from the "scm status" command.
+     */
+    private int fChangeSetAlias;
+
     // 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)
     // This stream could represent the desired flow target of the repository workspace.
@@ -188,7 +193,7 @@ public class JazzScmProviderRepository
     }
 
     /**
-     * @param streamAlias the streamAlias to set
+     * @param flowTargetAlias the flowTargetAlias to set
      */
     public void setFlowTargetAlias( int flowTargetAlias )
     {
@@ -244,6 +249,22 @@ public class JazzScmProviderRepository
     }
 
     /**
+     * @return The alias of the changeset, as returned from the "scm status" command.
+     */
+    public int getChangeSetAlias()
+    {
+        return fChangeSetAlias;
+    }
+
+    /**
+     * @param fChangeSetAlias the fChangeSetAlias to set
+     */
+    public void setChangeSetAlias( int fChangeSetAlias )
+    {
+        this.fChangeSetAlias = fChangeSetAlias;
+    }
+
+    /**
      * {@inheritDoc}
      */
     public String toString()

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 b3d53df..55349fd 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
@@ -55,6 +55,18 @@ public class JazzCheckInCommandTest
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }
 
+    public void testCreateChangesetAssociateCommand()
+            throws Exception
+        {
+            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();
+            String expected = "scm changeset associate --username myUserName --password myPassword 1234 215762";
+            assertCommandLine( expected, getWorkingDirectory(), cmd );
+        }
+    
     public void testCreateCheckInCommandCheckingInSpecificFiles()
         throws Exception
     {

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/8dd21b9c/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 37a8e56..acb862e 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,6 +83,7 @@ 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());
 
         // Test the stream parsing and isPushChanges bits.
         assertTrue( "isPushChangesAndHaveFlowTargets is incorrect!", repo.isPushChangesAndHaveFlowTargets() );


[2/4] maven-scm git commit: Updated Javadoc.

Posted by ch...@apache.org.
Updated Javadoc.

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

Branch: refs/heads/master
Commit: 416ada2c85539fb00347a93dc59ce480bb20a82d
Parents: 8dd21b9
Author: ChrisGWarp <Ch...@gmail.com>
Authored: Wed Apr 29 21:29:58 2015 +1000
Committer: Chris Graham <ch...@apache.org>
Committed: Thu May 7 12:04:22 2015 +1000

----------------------------------------------------------------------
 .../java/org/apache/maven/scm/provider/ScmProviderRepository.java  | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/416ada2c/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
----------------------------------------------------------------------
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
index c55b525..f75f64d 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProviderRepository.java
@@ -122,6 +122,7 @@ public abstract class ScmProviderRepository
 
     /**
      * @return The workItem.
+     * @since 1.9.5
      */
     public String getWorkItem()
     {
@@ -132,6 +133,7 @@ public abstract class ScmProviderRepository
      * Set the workItem.
      *
      * @param user The workItem.
+     * @since 1.9.5
      */
     public void setWorkItem( String workItem )
     {


[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.

Posted by ch...@apache.org.
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));
+    }
 }


[3/4] maven-scm git commit: Changed: Fixed the failing changeset associate test (on unix).

Posted by ch...@apache.org.
Changed: Fixed the failing changeset associate test (on unix).

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

Branch: refs/heads/master
Commit: 909868237bdd00af70989137879316943098e4f5
Parents: 416ada2
Author: Chris Graham <Ch...@gmail.com>
Authored: Fri May 1 12:10:17 2015 +1000
Committer: Chris Graham <ch...@apache.org>
Committed: Thu May 7 12:04:23 2015 +1000

----------------------------------------------------------------------
 .../apache/maven/scm/provider/jazz/command/JazzScmCommandTest.java | 1 -
 .../scm/provider/jazz/command/checkin/JazzCheckInCommandTest.java  | 2 ++
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-scm/blob/90986823/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 e5e822a..8cfcb60 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
@@ -56,7 +56,6 @@ public class JazzScmCommandTest
             ? "cmd.exe /X /C \"scm list --repository-uri https://localhost:9443/jazz --username myUserName --password *****\""
             : "/bin/sh -c scm list --repository-uri https://localhost:9443/jazz --username myUserName --password '*****'";
 
-        System.out.println( "actual:" + actual );
         assertEquals( "cryptPassword failed!", expected, actual );
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-scm/blob/90986823/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 55349fd..b30bfcf 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
@@ -63,6 +63,8 @@ public class JazzCheckInCommandTest
             repo.setWorkItem( "215762" );
             repo.setChangeSetAlias( 1234 );
             Commandline cmd = new JazzCheckInCommand().createChangesetAssociateCommand( repo ).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";
             assertCommandLine( expected, getWorkingDirectory(), cmd );
         }