Author: kenney
Date: Thu Oct  5 08:41:28 2006
New Revision: 453271

URL: http://svn.apache.org/viewvc?view=rev&rev=453271
Log:
Fixed timing issue.

While parsing the svn commandline output, checks
are performed if files are files or directories.
At the time of the check, those files may not have
been written yet.

Moved generic code to a new abstract base class,
and added a method that filters the file list
after the execution of the command is complete.

Added:
    
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/AbstractFileCheckingConsumer.java
   (with props)
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/SvnCommandLineUtils.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/checkin/SvnCheckInConsumer.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/checkout/SvnCheckOutConsumer.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/update/SvnUpdateCommand.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/update/SvnUpdateConsumer.java

Added: 
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/AbstractFileCheckingConsumer.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/AbstractFileCheckingConsumer.java?view=auto&rev=453271
==============================================================================
--- 
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/AbstractFileCheckingConsumer.java
 (added)
+++ 
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/AbstractFileCheckingConsumer.java
 Thu Oct  5 08:41:28 2006
@@ -0,0 +1,106 @@
+package org.apache.maven.scm.provider.svn.svnexe.command;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.log.ScmLogger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+/**
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Kenney Westerhof</a>
+ *
+ */
+public abstract class AbstractFileCheckingConsumer
+    implements StreamConsumer
+{
+    protected ScmLogger logger;
+
+    protected File workingDirectory;
+
+    private List files = new ArrayList();
+
+    protected int revision;
+
+    private boolean filtered;
+
+    public AbstractFileCheckingConsumer( ScmLogger logger, File 
workingDirectory )
+    {
+        this.logger = logger;
+        this.workingDirectory = workingDirectory;
+    }
+
+    public final void consumeLine( String line )
+    {
+        if ( line.length() <= 3 )
+        {
+            logger.warn( "Unexpected input, the line must be at least three 
characters long. Line: '" + line + "'." );
+
+            return;
+        }
+
+        parseLine( line );
+    }
+
+    protected abstract void parseLine( String line );
+
+    protected List getFiles()
+    {
+        if ( !filtered )
+        {
+            for ( Iterator it = files.iterator(); it.hasNext(); )
+            {
+                if ( !new File( workingDirectory, ( (ScmFile) it.next() 
).getPath() ).isFile() )
+                {
+                    it.remove();
+                }
+            }
+
+            filtered = true;
+        }
+
+        return files;
+    }
+
+    protected final int parseInt( String revisionString )
+    {
+        try
+        {
+            return Integer.parseInt( revisionString );
+        }
+        catch ( NumberFormatException ex )
+        {
+            return 0;
+        }
+    }
+
+    protected void addFile( ScmFile file )
+    {
+        files.add( file );
+    }
+
+    public final int getRevision()
+    {
+        return revision;
+    }
+
+}

Propchange: 
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/AbstractFileCheckingConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
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/AbstractFileCheckingConsumer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/SvnCommandLineUtils.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/SvnCommandLineUtils.java?view=diff&rev=453271&r1=453270&r2=453271
==============================================================================
--- 
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/SvnCommandLineUtils.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/SvnCommandLineUtils.java
 Thu Oct  5 08:41:28 2006
@@ -62,14 +62,14 @@
             cl.createArgument().setValue( 
SvnUtil.getSettings().getConfigDirectory() );
         }
 
-        if ( !StringUtils.isEmpty( repository.getUser() ) )
+        if ( repository != null && !StringUtils.isEmpty( repository.getUser() 
) )
         {
             cl.createArgument().setValue( "--username" );
 
             cl.createArgument().setValue( repository.getUser() );
         }
 
-        if ( !StringUtils.isEmpty( repository.getPassword() ) )
+        if ( repository != null && !StringUtils.isEmpty( 
repository.getPassword() ) )
         {
             cl.createArgument().setValue( "--password" );
 

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/checkin/SvnCheckInConsumer.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/checkin/SvnCheckInConsumer.java?view=diff&rev=453271&r1=453270&r2=453271
==============================================================================
--- 
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/checkin/SvnCheckInConsumer.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/checkin/SvnCheckInConsumer.java
 Thu Oct  5 08:41:28 2006
@@ -19,10 +19,9 @@
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
-import org.codehaus.plexus.util.cli.StreamConsumer;
+import 
org.apache.maven.scm.provider.svn.svnexe.command.AbstractFileCheckingConsumer;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -30,7 +29,7 @@
  * @version $Id$
  */
 public class SvnCheckInConsumer
-    implements StreamConsumer
+    extends AbstractFileCheckingConsumer
 {
     private final static String SENDING_TOKEN = "Sending        ";
 
@@ -42,13 +41,6 @@
 
     private final static String COMMITTED_REVISION_TOKEN = "Committed 
revision";
 
-    private ScmLogger logger;
-
-    private File workingDirectory;
-
-    private List checkedInFiles = new ArrayList();
-
-    private int revision;
 
     // ----------------------------------------------------------------------
     //
@@ -56,26 +48,15 @@
 
     public SvnCheckInConsumer( ScmLogger logger, File workingDirectory )
     {
-        this.logger = logger;
-
-        this.workingDirectory = workingDirectory;
+        super( logger, workingDirectory );
     }
 
     // ----------------------------------------------------------------------
     // StreamConsumer Implementation
     // ----------------------------------------------------------------------
 
-    public void consumeLine( String line )
+    protected void parseLine( String line )
     {
-        logger.debug( line );
-
-        if ( line.length() <= 3 )
-        {
-            logger.warn( "Unexpected input, the line must be at least three 
characters long. Line: '" + line + "'." );
-
-            return;
-        }
-
         String file;
 
         if ( line.startsWith( COMMITTED_REVISION_TOKEN ) )
@@ -110,38 +91,11 @@
             return;
         }
 
-        // If the file isn't a file; don't add it.
-        if ( !new File( workingDirectory, file ).isFile() )
-        {
-            return;
-        }
-
-        checkedInFiles.add( new ScmFile( file, ScmFileStatus.CHECKED_IN ) );
+        addFile( new ScmFile( file, ScmFileStatus.CHECKED_IN ) );
     }
 
     public List getCheckedInFiles()
     {
-        return checkedInFiles;
-    }
-
-    public int getRevision()
-    {
-        return revision;
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // ----------------------------------------------------------------------
-
-    private int parseInt( String revisionString )
-    {
-        try
-        {
-            return Integer.parseInt( revisionString );
-        }
-        catch ( NumberFormatException ex )
-        {
-            return 0;
-        }
+        return getFiles();
     }
 }

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/checkout/SvnCheckOutConsumer.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/checkout/SvnCheckOutConsumer.java?view=diff&rev=453271&r1=453270&r2=453271
==============================================================================
--- 
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/checkout/SvnCheckOutConsumer.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/checkout/SvnCheckOutConsumer.java
 Thu Oct  5 08:41:28 2006
@@ -1,28 +1,11 @@
 package org.apache.maven.scm.provider.svn.svnexe.command.checkout;
 
-/*
- * Copyright 2001-2006 The Apache Software Foundation.
- *
- * Licensed 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.
- */
-
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
-import org.codehaus.plexus.util.cli.StreamConsumer;
+import 
org.apache.maven.scm.provider.svn.svnexe.command.AbstractFileCheckingConsumer;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -30,40 +13,17 @@
  * @version $Id$
  */
 public class SvnCheckOutConsumer
-    implements StreamConsumer
+    extends AbstractFileCheckingConsumer
 {
     private final static String CHECKED_OUT_REVISION_TOKEN = "Checked out 
revision";
 
-    private ScmLogger logger;
-
-    private File workingDirectory;
-
-    private List checkedOutFiles = new ArrayList();
-
-    private int revision;
-
     public SvnCheckOutConsumer( ScmLogger logger, File workingDirectory )
     {
-        this.logger = logger;
-
-        this.workingDirectory = workingDirectory;
+        super( logger, workingDirectory );
     }
 
-    // ----------------------------------------------------------------------
-    // StreamConsumer Implementation
-    // ----------------------------------------------------------------------
-
-    public void consumeLine( String line )
+    protected void parseLine( String line )
     {
-        logger.debug( line );
-
-        if ( line.length() <= 3 )
-        {
-            logger.warn( "Unexpected input, the line must be at least three 
characters long. Line: '" + line + "'." );
-
-            return;
-        }
-
         String statusString = line.substring( 0, 1 );
 
         String file = line.substring( 3 ).trim();
@@ -74,14 +34,7 @@
         {
             String revisionString = line.substring( 
CHECKED_OUT_REVISION_TOKEN.length() + 1, line.length() - 1 );
 
-            try
-            {
-                revision = Integer.parseInt( revisionString );
-            }
-            catch ( NumberFormatException ex )
-            {
-                // ignored
-            }
+            revision = parseInt( revisionString );
 
             return;
         }
@@ -100,14 +53,7 @@
             return;
         }
 
-        // If the file isn't a file; don't add it.
-        if ( !new File( workingDirectory, file ).isFile() )
-        {
-            logger.debug( "Skipping non-file: " + file );
-            return;
-        }
-
-        checkedOutFiles.add( new ScmFile( file, status ) );
+        addFile( new ScmFile( file, status ) );
     }
 
     // ----------------------------------------------------------------------
@@ -116,11 +62,6 @@
 
     public List getCheckedOutFiles()
     {
-        return checkedOutFiles;
-    }
-
-    public int getRevision()
-    {
-        return revision;
+        return getFiles();
     }
 }

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/update/SvnUpdateCommand.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/update/SvnUpdateCommand.java?view=diff&rev=453271&r1=453270&r2=453271
==============================================================================
--- 
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/update/SvnUpdateCommand.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/update/SvnUpdateCommand.java
 Thu Oct  5 08:41:28 2006
@@ -102,7 +102,7 @@
         }
         else
         {
-            // The tag specified does not appear to be numeric, so assume it 
refers 
+            // The tag specified does not appear to be numeric, so assume it 
refers
             // to a branch/tag url and perform a switch operation rather than 
update
             cl.createArgument().setValue( "switch" );
             cl.createArgument().setValue( SvnTagBranchUtils.resolveTagUrl( 
repository, tag ) );

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/update/SvnUpdateConsumer.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/update/SvnUpdateConsumer.java?view=diff&rev=453271&r1=453270&r2=453271
==============================================================================
--- 
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/update/SvnUpdateConsumer.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/update/SvnUpdateConsumer.java
 Thu Oct  5 08:41:28 2006
@@ -19,10 +19,9 @@
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
-import org.codehaus.plexus.util.cli.StreamConsumer;
+import 
org.apache.maven.scm.provider.svn.svnexe.command.AbstractFileCheckingConsumer;
 
 import java.io.File;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -30,21 +29,13 @@
  * @version $Id$
  */
 public class SvnUpdateConsumer
-    implements StreamConsumer
+    extends AbstractFileCheckingConsumer
 {
-    private final static String UPDATED_TO_REVISION_TOKEN = "Updated to 
revision";
+    private static final String UPDATED_TO_REVISION_TOKEN = "Updated to 
revision";
 
-    private final static String AT_REVISION_TOKEN = "At revision";
+    private static final String AT_REVISION_TOKEN = "At revision";
 
-    private final static String RESTORED_TOKEN = "Restored";
-
-    private ScmLogger logger;
-
-    private File workingDirectory;
-
-    private List updatedFiles = new ArrayList();
-
-    private int revision;
+    private static final String RESTORED_TOKEN = "Restored";
 
     // ----------------------------------------------------------------------
     //
@@ -52,26 +43,15 @@
 
     public SvnUpdateConsumer( ScmLogger logger, File workingDirectory )
     {
-        this.logger = logger;
-
-        this.workingDirectory = workingDirectory;
+        super( logger, workingDirectory );
     }
 
     // ----------------------------------------------------------------------
     // StreamConsumer Implementation
     // ----------------------------------------------------------------------
 
-    public void consumeLine( String line )
+    protected void parseLine( String line )
     {
-        logger.debug( line );
-
-        if ( line.length() <= 3 )
-        {
-            logger.warn( "Unexpected input, the line must be at least three 
characters long. Line: '" + line + "'." );
-
-            return;
-        }
-
         String statusString = line.substring( 0, 1 );
 
         String file = line.substring( 3 ).trim();
@@ -117,39 +97,11 @@
             return;
         }
 
-        // If the file isn't a file; don't add it.
-        if ( !new File( workingDirectory, file ).isFile() )
-        {
-            logger.debug( "Skipping non-file: " + file );
-            return;
-        }
-
-        updatedFiles.add( new ScmFile( file, status ) );
+        addFile(new ScmFile( file, status ) );
     }
 
     public List getUpdatedFiles()
     {
-        return updatedFiles;
-    }
-
-    public int getRevision()
-    {
-        return revision;
-    }
-
-    // ----------------------------------------------------------------------
-    //
-    // ----------------------------------------------------------------------
-
-    private int parseInt( String revisionString )
-    {
-        try
-        {
-            return Integer.parseInt( revisionString );
-        }
-        catch ( NumberFormatException ex )
-        {
-            return 0;
-        }
+        return getFiles();
     }
 }


Reply via email to