Author: evenisse Date: Tue Apr 3 02:01:30 2007 New Revision: 525096 URL: http://svn.apache.org/viewvc?view=rev&rev=525096 Log: [SCM-243] Support more statuses in svn status consumer
Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/StatusMojo.java maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/status/SvnStatusConsumer.java Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java?view=diff&rev=525096&r1=525095&r2=525096 ============================================================================== --- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java (original) +++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileStatus.java Tue Apr 3 02:01:30 2007 @@ -52,6 +52,11 @@ public static final ScmFileStatus MODIFIED = new ScmFileStatus( "modified" ); /** + * The file is missing in the working tree. + */ + public static final ScmFileStatus MISSING = new ScmFileStatus( "missing" ); + + /** * File from working tree is checked into the repository */ public final static ScmFileStatus CHECKED_IN = new ScmFileStatus( "checked-in" ); Modified: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/StatusMojo.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/StatusMojo.java?view=diff&rev=525096&r1=525095&r2=525096 ============================================================================== --- maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/StatusMojo.java (original) +++ maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/StatusMojo.java Tue Apr 3 02:01:30 2007 @@ -69,7 +69,7 @@ ScmFile file = (ScmFile) iter.next(); // right align all of the statuses - getLog().info( StringUtils.leftPad( file.getStatus().toString(), maxLen ) + " " + + getLog().info( StringUtils.leftPad( file.getStatus().toString(), maxLen ) + " status for " + getRelativePath( baseDir, file.getPath() ) ); } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/status/SvnStatusConsumer.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/status/SvnStatusConsumer.java?view=diff&rev=525096&r1=525095&r2=525096 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/status/SvnStatusConsumer.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/status/SvnStatusConsumer.java Tue Apr 3 02:01:30 2007 @@ -22,6 +22,7 @@ import org.apache.maven.scm.ScmFile; import org.apache.maven.scm.ScmFileStatus; import org.apache.maven.scm.log.ScmLogger; +import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.cli.StreamConsumer; import java.io.File; @@ -58,6 +59,12 @@ public void consumeLine( String line ) { + logger.info( line ); + if ( StringUtils.isEmpty( line.trim() ) ) + { + return; + } + if ( line.length() <= 7 ) { logger.warn( "Unexpected input, the line must be at least seven characters long. Line: '" + line + "'." ); @@ -71,11 +78,51 @@ ScmFileStatus status; + // The first six columns in the output are each one character wide: + // First column: Says if item was added, deleted, or otherwise changed + // ' ' no modifications + // 'A' Added + // 'C' Conflicted + // 'D' Deleted + // 'I' Ignored + // 'M' Modified + // 'R' Replaced + // 'X' item is unversioned, but is used by an externals definition + // '?' item is not under version control + // '!' item is missing (removed by non-svn command) or incomplete + // '~' versioned item obstructed by some item of a different kind + // Second column: Modifications of a file's or directory's properties + // ' ' no modifications + // 'C' Conflicted + // 'M' Modified + // Third column: Whether the working copy directory is locked + // ' ' not locked + // 'L' locked + // Fourth column: Scheduled commit will contain addition-with-history + // ' ' no history scheduled with commit + // '+' history scheduled with commit + // Fifth column: Whether the item is switched relative to its parent + // ' ' normal + // 'S' switched + // Sixth column: Repository lock token + // (without -u) + // ' ' no lock token + // 'K' lock token present + // (with -u) + // ' ' not locked in repository, no lock token + // 'K' locked in repository, lock toKen present + // 'O' locked in repository, lock token in some Other working copy + // 'T' locked in repository, lock token present but sTolen + // 'B' not locked in repository, lock token present but Broken + // + // The out-of-date information appears in the eighth column (with -u): + // '*' a newer revision exists on the server + // ' ' the working copy is up to date if ( statusString.equals( "A" ) ) { status = ScmFileStatus.ADDED; } - else if ( statusString.equals( "M" ) ) + else if ( statusString.equals( "M" ) || statusString.equals( "R" ) || statusString.equals( "~" ) ) { status = ScmFileStatus.MODIFIED; } @@ -87,6 +134,10 @@ { status = ScmFileStatus.UNKNOWN; } + else if ( statusString.equals( "!" ) ) + { + status = ScmFileStatus.MISSING; + } else if ( statusString.equals( "C" ) ) { status = ScmFileStatus.CONFLICT; @@ -100,11 +151,30 @@ //skip svn:external entries return; } + else if ( statusString.equals( "I" ) ) + { + //skip svn:external entries + return; + } else { - logger.info( "Unknown file status: '" + statusString + "'." ); + //Parse the second column + statusString = line.substring( 1, 1 ); - status = ScmFileStatus.UNKNOWN; + if ( statusString.equals( "M" ) ) + { + status = ScmFileStatus.MODIFIED; + } + else if ( statusString.equals( "C" ) ) + { + status = ScmFileStatus.CONFLICT; + } + else + { + //The line isn't a status line, ie something like 'Performing status on external item at...' + //or a status defined in next columns + return; + } } // If the file isn't a file; don't add it.