You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ev...@apache.org on 2007/04/03 11:01:31 UTC

svn commit: r525096 - in /maven/scm/trunk: maven-scm-api/src/main/java/org/apache/maven/scm/ maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/mave...

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.