From df117ec3b5867613a221ecc2099143d679e80b09 Mon Sep 17 00:00:00 2001 From: Date: Tue, 28 Apr 2015 22:56:24 +1000 Subject: [PATCH 1/8] Changed: Implemented changes necessary to support SCM-775, the adoption of workItem support for Jazz, and the basis for other SCMs. --- .../scm/provider/ScmProviderRepository.java | 44 +++++++ .../maven/scm/plugin/AbstractScmMojo.java | 14 +++ .../provider/jazz/command/JazzConstants.java | 12 ++ .../command/checkin/JazzCheckInCommand.java | 31 +++++ .../command/status/JazzStatusConsumer.java | 111 ++++++++++++++++-- .../repository/JazzScmProviderRepository.java | 23 +++- .../checkin/JazzCheckInCommandTest.java | 12 ++ .../command/status/JazzStatusCommandTest.java | 1 + 8 files changed, 238 insertions(+), 10 deletions(-) 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 58e2a5020..c55b5259b 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 @@ /** * @author Trygve Laugstøl * @author Emmanuel Venisse + * @author Chris Graham * */ public abstract class ScmProviderRepository @@ -37,6 +38,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: + * + * There may be others that support this feature. + *

+ * These SCMs can be configured to reject a push/deliver unless additional + * information (by way of a workItem/task) is supplied. + *

+ * This field is only relevant when pushChanges = true. + *

+ * 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. */ @@ -94,6 +120,24 @@ public void setPushChanges( boolean pushChanges ) this.pushChanges = pushChanges; } + /** + * @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 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 c7533b80f..a18e319a8 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 ScmRepository getScmRepository() providerRepo.setPushChanges( pushChanges ); + if ( !StringUtils.isEmpty( workItem ) ) + { + providerRepo.setWorkItem( workItem ); + } + if ( !StringUtils.isEmpty( username ) ) { providerRepo.setUser( username ); 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 2a85f3812..9e0b2ec13 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 // ------------------------------------------------------------------------------------------------- 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 7f6ab3c92..8d35734a5 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 @@ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository reposito 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 JazzScmCommand createCreateChangesetCommand( ScmProviderRepository repo, 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 = 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 498a32e73..0ac426f35 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) /** @@ -126,6 +168,11 @@ public class JazzStatusConsumer */ private List fChangedFiles = new ArrayList(); + /** + * Implement a simple state machine: Have we seen the "Change sets:" line or not? + */ + private boolean seenChangeSets = false; + /** * Constructor for our "scm status" consumer. * @@ -162,6 +209,14 @@ public void consumeLine( String line ) { extractChangedFile( line ); } + if ( containsChangeSets( line ) ) + { + seenChangeSets = true; + } + if ( seenChangeSets ) + { + extractChangeSetAlias( line ); + } } private boolean containsWorkspace( String line ) @@ -267,9 +322,9 @@ private void extractBaseline( String line ) 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 @@ private void extractChangedFile( String line ) 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 List getChangedFiles() { 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. + } + } } 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 913c70495..20d820825 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 int getFlowTargetAlias() } /** - * @param streamAlias the streamAlias to set + * @param flowTargetAlias the flowTargetAlias to set */ public void setFlowTargetAlias( int flowTargetAlias ) { @@ -243,6 +248,22 @@ public void setBaseline( String baseline ) this.fBaseline = baseline; } + /** + * @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} */ 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 b3d53df07..55349fdc8 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 void testCreateCreateChangesetCommand() 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 { 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 37a8e56c0..acb862ec1 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 void testConsumer() 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() ); From cf0fea2993ea87d59acae81f512af1ea918879e3 Mon Sep 17 00:00:00 2001 From: ChrisGWarp Date: Wed, 29 Apr 2015 21:29:58 +1000 Subject: [PATCH 2/8] Updated Javadoc. --- .../org/apache/maven/scm/provider/ScmProviderRepository.java | 2 ++ 1 file changed, 2 insertions(+) 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 c55b5259b..f75f64d45 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 void setPushChanges( boolean pushChanges ) /** * @return The workItem. + * @since 1.9.5 */ public String getWorkItem() { @@ -132,6 +133,7 @@ public String getWorkItem() * Set the workItem. * * @param user The workItem. + * @since 1.9.5 */ public void setWorkItem( String workItem ) { From cc1a08d6a8cd008f5077127bc72e3b2e291a1771 Mon Sep 17 00:00:00 2001 From: Chris Graham Date: Fri, 1 May 2015 12:10:17 +1000 Subject: [PATCH 3/8] Changed: Fixed the failing changeset associate test (on unix). --- .../maven/scm/provider/jazz/command/JazzScmCommandTest.java | 1 - .../provider/jazz/command/checkin/JazzCheckInCommandTest.java | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) 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 e5e822a1a..8cfcb6037 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 void testCryptPassword() ? "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 ); } } 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 55349fdc8..b30bfcfa7 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 void testCreateChangesetAssociateCommand() 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 ); } From 88e75c5fcfa5b8ca47d1432d05b91c63398fb39a Mon Sep 17 00:00:00 2001 From: Chris Graham Date: Sat, 2 May 2015 22:49:07 +1000 Subject: [PATCH 4/8] 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. --- .../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 +- .../command/status/JazzStatusConsumer.java | 23 ++-- .../repository/JazzScmProviderRepository.java | 20 ++-- .../jazz/command/JazzScmCommandTest.java | 28 ++++- .../checkin/JazzCheckInCommandTest.java | 5 +- .../command/list/JazzListCommandTest.java | 2 +- .../command/status/JazzStatusCommandTest.java | 111 +++++++++++++++++- 11 files changed, 232 insertions(+), 47 deletions(-) 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 f45484509..9f62779ec 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 ScmProviderRepository makeProviderScmRepository( String scmUrl, char deli // 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 ScmProviderRepository makeProviderScmRepository( String scmUrl, char deli 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 @@ protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet f 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 @@ protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet f 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 @@ protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFil 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 @@ protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet 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 @@ protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileS 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 @@ protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileS 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 @@ protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileS 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 @@ protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet f CommandParameters parameters ) throws ScmException { + getLogger().debug( "JazzScmProvider:export()" ); // Use checkout instead return super.export( repository, fileSet, parameters ); } @@ -360,8 +369,9 @@ protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet f 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 @@ protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet f 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 @@ protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet f 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 @@ protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet f 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 @@ protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet f CommandParameters parameters ) throws ScmException { + getLogger().debug( "JazzScmProvider:unedit()" ); JazzUnEditCommand command = new JazzUnEditCommand(); command.setLogger( getLogger() ); return (UnEditScmResult) command.execute( repository, fileSet, parameters ); 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 9e0b2ec13..f0ba1b48e 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 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 4adf121c0..57bb3ba59 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 static String cryptPassword( Commandline cl ) } else { - afterPassword = "\""; + if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) + { + afterPassword = "\""; + } + else + { + afterPassword = ""; + } } if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) { @@ -256,7 +263,7 @@ public static String cryptPassword( Commandline cl ) } else { - clString = beforePassword + "'*****'"; + clString = beforePassword + "'*****'" + afterPassword; } } 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 8d35734a5..07eb26feb 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.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 @@ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository reposito 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 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 JazzScmCommand createCreateChangesetCommand( ScmProviderRepository repo, 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; 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 0a91fdc7d..09042f57a 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 @@ protected ListScmResult executeListCommand( ScmProviderRepository repo, ScmFileS 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; 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 0ac426f35..19eba7aa8 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 @@ private void extractChangeSetAlias( String line ) 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 ) ); } } } 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 20d820825..f1ee5c503 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 @@ * 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 fChangeSetAliases = new ArrayList(); // 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 void setBaseline( String baseline ) } /** - * @return The alias of the changeset, as returned from the "scm status" command. + * @return The List of aliases of the changesets, as returned from the "scm status" command. */ - public int getChangeSetAlias() + public List 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 changeSetAliases ) { - this.fChangeSetAlias = fChangeSetAlias; + this.fChangeSetAliases = changeSetAliases; } - + /** * {@inheritDoc} */ @@ -271,4 +274,5 @@ public String toString() { return getRepositoryURI() + ":" + getRepositoryWorkspace(); } + } 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 8cfcb6037..421a065e4 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 void testFileList() } 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 void testCryptPassword() 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 ); + } } 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 b30bfcfa7..6611ddf6d 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 void testCreateChangesetAssociateCommand() 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"; 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 8a54ab2cd..a42ce3e79 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 void testCreateListCommand() { 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 ); } 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 acb862ec1..ede7e9161 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 void testConsumer() 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 void testConsumerWithAdditionalInfo() 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)); + } } From 54dac7793a7dc3f68a123b4f9dfc2e5280784cb1 Mon Sep 17 00:00:00 2001 From: Chris Graham Date: Tue, 5 May 2015 21:57:17 +1000 Subject: [PATCH 5/8] Fixed line endings. --- .../prepare.groovy | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) 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 c8abe3e81..a4915eed6 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 @@ -1,45 +1,45 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -// We rename the dotSvnDir in the IT folder to standard .svn naming so that the IT can execute. -// 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() -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}" -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}" -println "stdout: ${proc.in.text}" +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// We rename the dotSvnDir in the IT folder to standard .svn naming so that the IT can execute. +// 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() +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}" +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}" +println "stdout: ${proc.in.text}" From 280379eea6fba7585ac54de73d77b1329a191bc6 Mon Sep 17 00:00:00 2001 From: Chris Graham Date: Sat, 9 May 2015 20:06:36 +1000 Subject: [PATCH 6/8] [SCM-795] Fixed. Content on stderr will no longer raise an exception. --- .../scm/provider/jazz/command/add/JazzAddCommand.java | 2 +- .../scm/provider/jazz/command/blame/JazzBlameCommand.java | 2 +- .../jazz/command/changelog/JazzChangeLogCommand.java | 4 ++-- .../provider/jazz/command/checkin/JazzCheckInCommand.java | 4 ++-- .../jazz/command/checkout/JazzCheckOutCommand.java | 2 +- .../scm/provider/jazz/command/diff/JazzDiffCommand.java | 2 +- .../scm/provider/jazz/command/edit/JazzEditCommand.java | 2 +- .../scm/provider/jazz/command/list/JazzListCommand.java | 2 +- .../provider/jazz/command/status/JazzStatusCommand.java | 2 +- .../scm/provider/jazz/command/tag/JazzTagCommand.java | 8 ++++---- .../provider/jazz/command/unedit/JazzUnEditCommand.java | 2 +- .../provider/jazz/command/update/JazzUpdateCommand.java | 6 +++--- .../maven/scm/provider/jazz/command/JazzTckUtil.java | 2 +- 13 files changed, 20 insertions(+), 20 deletions(-) diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/add/JazzAddCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/add/JazzAddCommand.java index 3a0c2e0b6..71597ff1f 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/add/JazzAddCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/add/JazzAddCommand.java @@ -155,7 +155,7 @@ public AddScmResult executeAddCommand( ScmProviderRepository repo, ScmFileSet fi JazzScmCommand command = createAddCommand( repo, fileSet ); int status = command.execute( addConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new AddScmResult( command.getCommandString(), "Error code for Jazz SCM add (checkin) command - " + status, diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/blame/JazzBlameCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/blame/JazzBlameCommand.java index acde088eb..1704d60de 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/blame/JazzBlameCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/blame/JazzBlameCommand.java @@ -71,7 +71,7 @@ public BlameScmResult executeBlameCommand( ScmProviderRepository repo, ScmFileSe ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); int status = blameCmd.execute( blameConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new BlameScmResult( blameCmd.getCommandString(), "Error code for Jazz SCM blame command - " + status, errConsumer.getOutput(), false ); diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/changelog/JazzChangeLogCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/changelog/JazzChangeLogCommand.java index 7564f8e87..eab44596d 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/changelog/JazzChangeLogCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/changelog/JazzChangeLogCommand.java @@ -93,7 +93,7 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo JazzHistoryConsumer changeLogConsumer = new JazzHistoryConsumer( repo, getLogger(), changeSets ); ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); int status = historyCommand.execute( changeLogConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new ChangeLogScmResult( historyCommand.getCommandString(), "Error code for Jazz SCM history command - " + status, @@ -106,7 +106,7 @@ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo new JazzListChangesetConsumer( repo, getLogger(), changeSets, datePattern ); errConsumer = new ErrorConsumer( getLogger() ); status = listChangesetsCommand.execute( listChangesetConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new ChangeLogScmResult( listChangesetsCommand.getCommandString(), "Error code for Jazz SCM list changesets command - " + status, 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 07eb26feb..123cec874 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 @@ -109,7 +109,7 @@ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository reposito ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); int status = createChangesetCmd.execute( outputConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new CheckInScmResult( createChangesetCmd.getCommandString(), "Error code for Jazz SCM create changeset command - " + status, @@ -176,7 +176,7 @@ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, Sc ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); int status = deliverCmd.execute( deliverConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new CheckInScmResult( deliverCmd.getCommandString(), "Error code for Jazz SCM deliver command - " + status, diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkout/JazzCheckOutCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkout/JazzCheckOutCommand.java index 4ed51f492..5ace89114 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkout/JazzCheckOutCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/checkout/JazzCheckOutCommand.java @@ -72,7 +72,7 @@ protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); int status = checkoutCmd.execute( checkoutConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new CheckOutScmResult( checkoutCmd.getCommandString(), "Error code for Jazz SCM checkout (load) command - " + status, diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/diff/JazzDiffCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/diff/JazzDiffCommand.java index 8fc38e371..e40208682 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/diff/JazzDiffCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/diff/JazzDiffCommand.java @@ -138,7 +138,7 @@ protected DiffScmResult executeDiffCommand( ScmProviderRepository repo, ScmFileS ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); diffCmd = createDiffCommand( repo, fileSet, relativePath ); int status = diffCmd.execute( diffConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { // Return a false result (not the usual SCMResult) return new DiffScmResult( diffCmd.toString(), "The scm diff command failed.", diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/edit/JazzEditCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/edit/JazzEditCommand.java index 5b876d7e9..7d93b0082 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/edit/JazzEditCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/edit/JazzEditCommand.java @@ -78,7 +78,7 @@ protected ScmResult executeEditCommand( ScmProviderRepository repo, ScmFileSet f JazzScmCommand editCmd = createEditCommand( repo, fileSet ); int status = editCmd.execute( editConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new EditScmResult( editCmd.getCommandString(), "Error code for Jazz SCM edit command - " + status, errConsumer.getOutput(), false ); 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 09042f57a..eae626db5 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 @@ -65,7 +65,7 @@ protected ListScmResult executeListCommand( ScmProviderRepository repo, ScmFileS JazzScmCommand listCmd = createListCommand( jazzRepo, fileSet, recursive, version ); int status = listCmd.execute( listConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new ListScmResult( listCmd.getCommandString(), "Error code for Jazz SCM list command - " + status, errConsumer.getOutput(), false ); diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommand.java index 25d229bb8..2030f1199 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/status/JazzStatusCommand.java @@ -61,7 +61,7 @@ public StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFile JazzScmCommand statusCmd = createStatusCommand( repo, fileSet ); int status = statusCmd.execute( statusConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new StatusScmResult( statusCmd.getCommandString(), "Error code for Jazz SCM status command - " + status, errConsumer.getOutput(), diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommand.java index 2e80f1665..aa0140fb3 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommand.java @@ -89,7 +89,7 @@ protected ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fi createTagCreateSnapshotCommand( jazzRepo, fileSet, tag, scmTagParameters ); int status = tagCreateSnapshotCmd.execute( tagConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new TagScmResult( tagCreateSnapshotCmd.getCommandString(), "Error code for Jazz SCM tag (SNAPSHOT) command - " + status, @@ -104,7 +104,7 @@ protected ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fi errConsumer = new ErrorConsumer( getLogger() ); status = tagCreateWorkspaceCmd.execute( tagConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new TagScmResult( tagCreateWorkspaceCmd.getCommandString(), "Error code for Jazz SCM tag (WORKSPACE) command - " + status, @@ -122,7 +122,7 @@ protected ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fi JazzScmCommand tagDeliverCommand = createTagDeliverCommand( jazzRepo, fileSet, tag ); errConsumer = new ErrorConsumer( getLogger() ); status = tagDeliverCommand.execute( tagConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new TagScmResult( tagDeliverCommand.getCommandString(), "Error code for Jazz SCM deliver command - " + status, errConsumer.getOutput(), @@ -134,7 +134,7 @@ protected ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fi JazzScmCommand tagSnapshotPromoteCommand = createTagSnapshotPromoteCommand( jazzRepo, fileSet, tag ); errConsumer = new ErrorConsumer( getLogger() ); status = tagSnapshotPromoteCommand.execute( tagConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new TagScmResult( tagSnapshotPromoteCommand.getCommandString(), "Error code for Jazz SCM snapshot promote command - " + status, diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommand.java index 48492e3f3..9446925da 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommand.java @@ -78,7 +78,7 @@ protected ScmResult executeUnEditCommand( ScmProviderRepository repo, ScmFileSet JazzScmCommand uneditCmd = createUneditCommand( repo, fileSet ); int status = uneditCmd.execute( uneditConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new UnEditScmResult( uneditCmd.getCommandString(), "Error code for Jazz SCM unedit command - " + status, errConsumer.getOutput(), diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java index 4bccbb43b..fe934338b 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java @@ -69,12 +69,12 @@ protected UpdateScmResult executeUpdateCommand( ScmProviderRepository repo, ScmF } JazzUpdateConsumer updateConsumer = new JazzUpdateConsumer( repo, getLogger() ); - ErrorConsumer err = new ErrorConsumer( getLogger() ); + ErrorConsumer errConsumer = new ErrorConsumer( getLogger() ); JazzScmCommand updateCmd = createAcceptCommand( repo, fileSet ); - int status = updateCmd.execute( updateConsumer, err ); + int status = updateCmd.execute( updateConsumer, errConsumer ); - if ( status != 0 || err.hasBeenFed() ) + if ( status != 0 ) { return new UpdateScmResult( updateCmd.getCommandString(), "Error code for Jazz SCM update command - " + status, err.getOutput(), false ); diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzTckUtil.java b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzTckUtil.java index 7bbdf990e..f9f213215 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzTckUtil.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/JazzTckUtil.java @@ -92,7 +92,7 @@ protected ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet createCreateWorkspaceFromSnapshotCommand( jazzRepo, fileSet, nameWorkspace, nameSnapshot ); int status = tckCreateWorkspaceFromSnapshotCmd.execute( tckConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new ScmResult( tckCreateWorkspaceFromSnapshotCmd.getCommandString(), "Error code for Jazz SCM (create workspace --snapshot) command - " + status, From db8a2703334a02283cc407bb2f708ebd8719bcaf Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 May 2015 14:26:02 -0400 Subject: [PATCH 7/8] Syntax error introduced by 2d7502077559d46f8009e45311b8ce5ab79f01bb Removed forgotten stderr consumer validation --- .../scm/provider/jazz/command/checkin/JazzCheckInCommand.java | 2 +- .../scm/provider/jazz/command/update/JazzUpdateCommand.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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 123cec874..b7625032d 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 @@ -142,7 +142,7 @@ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository reposito errConsumer = new ErrorConsumer( getLogger() ); status = changesetAssociateCmd.execute( outputConsumer, errConsumer ); - if ( status != 0 || errConsumer.hasBeenFed() ) + if ( status != 0 ) { return new CheckInScmResult( changesetAssociateCmd.getCommandString(), "Error code for Jazz SCM changeset associate command - " + status, diff --git a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java index fe934338b..386c1c103 100644 --- a/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java +++ b/maven-scm-providers/maven-scm-provider-jazz/src/main/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommand.java @@ -77,7 +77,8 @@ protected UpdateScmResult executeUpdateCommand( ScmProviderRepository repo, ScmF if ( status != 0 ) { return new UpdateScmResult( updateCmd.getCommandString(), - "Error code for Jazz SCM update command - " + status, err.getOutput(), false ); + "Error code for Jazz SCM update command - " + status, + errConsumer.getOutput(), false ); } if ( getLogger().isDebugEnabled() ) From c0108c10359d288e65ddee328d53f45e2abe01f4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 11 May 2015 15:51:21 -0400 Subject: [PATCH 8/8] Provide condition to reset the ChangeSet state machine --- .../command/status/JazzStatusConsumer.java | 24 +++++++++++++++++++ .../command/status/JazzStatusCommandTest.java | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) 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 19eba7aa8..63968a261 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 @@ -172,6 +172,7 @@ public class JazzStatusConsumer * Implement a simple state machine: Have we seen the "Change sets:" line or not? */ private boolean seenChangeSets = false; + private int sectionIndentation = 0; /** * Constructor for our "scm status" consumer. @@ -193,6 +194,13 @@ public JazzStatusConsumer( ScmProviderRepository repo, ScmLogger logger ) public void consumeLine( String line ) { super.consumeLine( line ); + + // reset the state machine if text is at the same level or less than the changeSets text + if ( seenChangeSets && getIndentation( line ) <= sectionIndentation ) + { + seenChangeSets = false; + } + if ( containsWorkspace( line ) ) { extractWorkspace( line ); @@ -212,6 +220,9 @@ public void consumeLine( String line ) if ( containsChangeSets( line ) ) { seenChangeSets = true; + // store the indentation of the line to know when the section is "closed" by other text at the same + // indentation level + sectionIndentation = getIndentation( line ); } if ( seenChangeSets ) { @@ -219,6 +230,19 @@ public void consumeLine( String line ) } } + + /** + * Determine the indentation (# whitespace characters) at the beginning of a line + * @param line + * @return # whitespace characters found, or 0 if none found. + */ + private int getIndentation( String line ) + { + // split on multiple whitespace + String[] lines = line.split( "^[\\s]+" ); + return ( lines.length == 1 ) ? 0 : line.indexOf( lines[1] ); + } + private boolean containsWorkspace( String line ) { return line.trim().startsWith( STATUS_CMD_WORKSPACE ); 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 ede7e9161..e6a315356 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 @@ -232,7 +232,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" ); @@ -254,6 +253,7 @@ public void testConsumerWithMultipleChangeSetsAndWorkItems() + "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" ); + statusConsumer.consumeLine( " Baseline: (1003) 49 \"GPDB-MAN-1.0.50\"" ); // Test the additional collected data, Workspace, Component, Baseline. assertEquals( "Workspace is incorrect!", "GPDBWorkspace", repo.getWorkspace() );