<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>scm-commits@maven.apache.org Archives</title>
<link rel="self" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/?format=atom"/>
<link href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/"/>
<id>http://mail-archives.apache.org/mod_mbox/maven-scm-commits/</id>
<updated>2009-12-07T17:29:29Z</updated>
<entry>
<title>svn commit: r885584 - /maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091130210949.4EC0F2388893@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091130210949-4EC0F2388893@eris-apache-org%3e</id>
<updated>2009-11-30T21:09:49Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Mon Nov 30 21:09:48 2009
New Revision: 885584

URL: http://svn.apache.org/viewvc?rev=885584&amp;view=rev
Log:
fix junit on unix platform

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java?rev=885584&amp;r1=885583&amp;r2=885584&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
Mon Nov 30 21:09:48 2009
@@ -65,17 +65,17 @@
     public void testCommandLineFileSet()
         throws Exception
     {
-        File target = getTestFile( "target" );
+        File target = getTestFile( "." );
         ScmRepository repository = scmManager
             .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source
Safe|D:/myProject" );
-        ScmFileSet fileSet = new ScmFileSet( target, "**/VssEditCommandTest.class" );
+        ScmFileSet fileSet = new ScmFileSet( target, "**/target/**/VssEditCommandTest.class"
);
         VssEditCommand command = new VssEditCommand();
         List commands = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(),
fileSet );
         Commandline cl = (Commandline) commands.get( 0 );
         String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
         assertCommandLine(
                            ssPath
-                               + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class
-Yusername,password -I-",
+                               + "ss Checkout $D:/myProject/target/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class
-Yusername,password -I-",
                            ((File) fileSet.getFileList().get( 0 )).getParentFile(), cl );
     }
 




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885528 - /maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091130182628.4A2B523888D1@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091130182628-4A2B523888D1@eris-apache-org%3e</id>
<updated>2009-11-30T18:26:28Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Mon Nov 30 18:26:27 2009
New Revision: 885528

URL: http://svn.apache.org/viewvc?rev=885528&amp;view=rev
Log:
[SCM-344] fix two junits on unix platform . I will review the last latter.


Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java?rev=885528&amp;r1=885527&amp;r2=885528&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
Mon Nov 30 18:26:27 2009
@@ -76,7 +76,7 @@
         assertCommandLine(
                            ssPath
                                + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class
-Yusername,password -I-",
-                           fileSet.getBasedir(), cl );
+                           ((File) fileSet.getFileList().get( 0 )).getParentFile(), cl );
     }
 
     public void testCommandLineRelativePath()
@@ -97,7 +97,7 @@
         assertCommandLine(
                            ssPath
                                + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class
-Yusername,password -I-",
-                           fileSet.getBasedir(), cl );
+                           ((File) fileSet.getFileList().get( 0 )).getParentFile(), cl );
     }
 
     public void testCommandLineMultipleFiles()
@@ -127,7 +127,7 @@
         assertCommandLine(
                            ssPath
                                + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class
-Yusername,password -I-",
-                           fileSet.getBasedir(), cl );
+                           ((File) fileSet.getFileList().get( 0 )).getParentFile(), cl );
 
         cl = (Commandline) commands.get( 1 );
         ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
@@ -135,7 +135,7 @@
         assertEquals( StringUtils.lowerCase( normSep( target.getPath() + "/test-classes/META-INF"
) ), StringUtils
             .lowerCase( cl.getWorkingDirectory().getPath() ) );
         assertCommandLine( ssPath + "ss Checkout $D:/myProject/test-classes/META-INF/LICENSE
-Yusername,password -I-",
-                           fileSet.getBasedir(), cl );
+                          ((File) fileSet.getFileList().get( 1 )).getParentFile() , cl );
 
     }
 




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885254 - in /maven/scm/trunk/maven-scm-providers: maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/ maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svn...</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091129182854.E4BC223888D1@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091129182854-E4BC223888D1@eris-apache-org%3e</id>
<updated>2009-11-29T18:28:54Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sun Nov 29 18:28:54 2009
New Revision: 885254

URL: http://svn.apache.org/viewvc?rev=885254&amp;view=rev
Log:
[SCM-512] add field revision in ChangeSet bean
implementation for change log consumers : svn and hg.
Submitted by Emmanuel Hugonnet

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.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/changelog/SvnChangeLogConsumer.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java?rev=885254&amp;r1=885253&amp;r2=885254&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogConsumer.java
Sun Nov 29 18:28:54 2009
@@ -174,6 +174,9 @@
             tmpLine = line.substring( REVNO_TAG.length() );
             tmpLine = tmpLine.trim();
             currentRevision = tmpLine;
+            String revision = currentRevision.substring( 0, currentRevision.indexOf( ':'
) );
+            currentChange.setRevision( revision );
+
         }
         else if ( line.startsWith( TAG_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/changelog/SvnChangeLogConsumer.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/changelog/SvnChangeLogConsumer.java?rev=885254&amp;r1=885253&amp;r2=885254&amp;view=diff
==============================================================================
--- 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/changelog/SvnChangeLogConsumer.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/changelog/SvnChangeLogConsumer.java
Sun Nov 29 18:28:54 2009
@@ -194,6 +194,8 @@
         currentChange.setAuthor( HEADER_REG_EXP.getParen( AUTHOR_GROUP ) );
 
         currentChange.setDate( getDate(HEADER_REG_EXP.getParen( DATE_GROUP )) );
+        
+        currentChange.setRevision( currentRevision );
 
         status = GET_FILE;
     }
@@ -277,20 +279,20 @@
      * @param dateOutput The date output from an svn log command.
      * @return A date representing the time stamp of the log entry.
      */
-    private Date getDate(final String dateOutput)
+    private Date getDate( final String dateOutput )
     {
-        if (!DATE_REG_EXP.match(dateOutput))
+        if ( !DATE_REG_EXP.match( dateOutput ) )
         {
-            throw new IllegalOutputException(dateOutput);
+            throw new IllegalOutputException( dateOutput );
         }
-      
+
         final StringBuffer date = new StringBuffer();
-        date.append(DATE_REG_EXP.getParen( 1 ));
-        date.append(" GMT");
-        date.append(DATE_REG_EXP.getParen( 2 ));
-        date.append(DATE_REG_EXP.getParen( 3 ));
-        date.append(':');
-        date.append(DATE_REG_EXP.getParen( 4 ));
+        date.append( DATE_REG_EXP.getParen( 1 ) );
+        date.append( " GMT" );
+        date.append( DATE_REG_EXP.getParen( 2 ) );
+        date.append( DATE_REG_EXP.getParen( 3 ) );
+        date.append( ':' );
+        date.append( DATE_REG_EXP.getParen( 4 ) );
 
         return parseDate( date.toString(), userDateFormat, SVN_TIMESTAMP_PATTERN );
     }




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885160 - in /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/tag/ test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091128224945.E94D12388978@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091128224945-E94D12388978@eris-apache-org%3e</id>
<updated>2009-11-28T22:49:45Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sat Nov 28 22:49:45 2009
New Revision: 885160

URL: http://svn.apache.org/viewvc?rev=885160&amp;view=rev
Log:
[SCM-487] support --parents option for svn copy (tag commands)

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/tag/SvnTagCommand.java
  (contents, props changed)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java

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/tag/SvnTagCommand.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/tag/SvnTagCommand.java?rev=885160&amp;r1=885159&amp;r2=885160&amp;view=diff
==============================================================================
--- 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/tag/SvnTagCommand.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/tag/SvnTagCommand.java
Sat Nov 28 22:49:45 2009
@@ -230,6 +230,8 @@
 
         cl.createArg().setValue( messageFile.getAbsolutePath() );
 
+        cl.createArg().setValue( "--parents" );
+        
         if ( scmTagParameters != null &amp;&amp; scmTagParameters.getScmRevision() != null
)
         {
             cl.createArg().setValue( "--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/tag/SvnTagCommand.java
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sat Nov 28 22:49:45 2009
@@ -1 +1 @@
-"Author Date Id Revision"
+Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java?rev=885160&amp;r1=885159&amp;r2=885160&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
Sat Nov 28 22:49:45 2009
@@ -44,7 +44,7 @@
 
         testCommandLine( "scm:svn:svn+ssh://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --non-interactive copy --file " + messageFile.getAbsolutePath()
+
-                             " . svn+ssh://user@foo.com/svn/tags/svntag", null );
+                             " --parents . svn+ssh://user@foo.com/svn/tags/svntag", null
);
     }
     
     public void testTagRemoteTagHttps()
@@ -57,7 +57,7 @@
         scmTagParameters.setRemoteTagging( true );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
scmTagParameters );
+                             + " --parents https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
scmTagParameters );
     }    
     
     public void testTagRemoteTagHttpsWithRevision()
@@ -71,7 +71,7 @@
         scmTagParameters.setScmRevision( "12" );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " --revision 12 https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
+                             + " --parents --revision 12 https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
                          scmTagParameters );
     }    
 
@@ -89,14 +89,8 @@
 
         Commandline cl = null;
 
-        if ( scmTagParameters == null )
-        {
-            cl = SvnTagCommand.createCommandLine( svnRepository, workingDirectory, tag, messageFile
);
-        }
-        else
-        {
-            cl = SvnTagCommand.createCommandLine( svnRepository, workingDirectory, tag, messageFile,
scmTagParameters );
-        }
+        cl = SvnTagCommand.createCommandLine( svnRepository, workingDirectory, tag, messageFile,
scmTagParameters );
+            
         assertCommandLine( commandLine, workingDirectory, cl );
     }
 }




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885155 - /maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091128220938.7E2D523888FE@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091128220938-7E2D523888FE@eris-apache-org%3e</id>
<updated>2009-11-28T22:09:38Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sat Nov 28 22:09:38 2009
New Revision: 885155

URL: http://svn.apache.org/viewvc?rev=885155&amp;view=rev
Log:
[SCM-512]  add field revision in ChangeSet bean

Modified:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java?rev=885155&amp;r1=885154&amp;r2=885155&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java Sat Nov
28 22:09:38 2009
@@ -113,6 +113,12 @@
      * List of ChangeFile
      */
     private List/*&lt;ChangeFile&gt;*/ files;
+    
+    /**
+     * The SCM revision id for this changeset.
+     * @since 1.3
+     */
+    private String revision;
 
     /**
      * @param strDate         Date the changes were committed
@@ -394,6 +400,25 @@
         return TIME_FORMAT.format( getDate() );
     }
 
+    /**
+     * @return
+     * @since 1.3
+     */
+    public String getRevision()
+    {
+        return revision;
+    }
+
+    /**
+     * @param revision
+     * @since 1.3
+     */
+    public void setRevision( String revision )
+    {
+        this.revision = revision;
+    }
+    
+    
     /** {@inheritDoc} */
     public String toString()
     {




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885134 - /maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091128191918.0187023888D6@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091128191918-0187023888D6@eris-apache-org%3e</id>
<updated>2009-11-28T19:19:17Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sat Nov 28 19:19:17 2009
New Revision: 885134

URL: http://svn.apache.org/viewvc?rev=885134&amp;view=rev
Log:
[SCM-439] Maven SCM Mercurial provider remove functionnality doesn't work
Submitted by William Bernardet

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java?rev=885134&amp;r1=885133&amp;r2=885134&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/remove/HgRemoveCommand.java
Sat Nov 28 19:19:17 2009
@@ -45,7 +45,7 @@
     {
 
         String[] command = new String[] { HgCommandConstants.REMOVE_CMD };
-        HgUtils.expandCommandLine( command, fileSet );
+        command = HgUtils.expandCommandLine( command, fileSet );
 
         File workingDir = fileSet.getBasedir();
         HgRemoveConsumer consumer = new HgRemoveConsumer( getLogger(), workingDir );




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885129 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src: main/java/org/apache/maven/scm/provider/vss/ main/java/org/apache/maven/scm/provider/vss/commands/checkin/ main/java/org/apache/maven/scm/provider/vss/commands/ch...</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091128191316.E95DE23888D6@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091128191316-E95DE23888D6@eris-apache-org%3e</id>
<updated>2009-11-28T19:13:16Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sat Nov 28 19:13:15 2009
New Revision: 885129

URL: http://svn.apache.org/viewvc?rev=885129&amp;view=rev
Log:
[SCM-344] VSS provider - implement checkin
Submitted by Allan Lang
applied formatting and asf license header added.

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt   (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java Sat Nov 28 19:13:15 2009
@@ -24,17 +24,21 @@
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.edit.EditScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.vss.commands.add.VssAddCommand;
 import org.apache.maven.scm.provider.vss.commands.changelog.VssHistoryCommand;
+import org.apache.maven.scm.provider.vss.commands.checkin.VssCheckInCommand;
 import org.apache.maven.scm.provider.vss.commands.checkout.VssCheckOutCommand;
 import org.apache.maven.scm.provider.vss.commands.edit.VssEditCommand;
 import org.apache.maven.scm.provider.vss.commands.status.VssStatusCommand;
+import org.apache.maven.scm.provider.vss.commands.tag.VssTagCommand;
 import org.apache.maven.scm.provider.vss.commands.update.VssUpdateCommand;
 import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
@@ -126,18 +130,15 @@
         return (AddScmResult) command.execute( repository, fileSet, parameters );
     }
 
-    /*
-     public CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
-     throws ScmException
-     {
-     VssCheckInCommand command = new VssCheckInCommand();
-
-     command.setLogger( getLogger() );
-
-     return (CheckInScmResult) command.execute( repository
-     .getProviderRepository(), fileSet, parameters );
-     }
-     */
+    public CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        VssCheckInCommand command = new VssCheckInCommand();
+
+        command.setLogger( getLogger() );
+
+        return (CheckInScmResult) command.execute( repository, fileSet, parameters );
+    }
 
     /** {@inheritDoc} */
     public CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
@@ -163,18 +164,15 @@
         return (ChangeLogScmResult) command.execute( repository, fileSet, parameters );
     }
 
-    /*
-     public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
-     throws ScmException
-     {
-     VssLabelCommand command = new VssLabelCommand();
-
-     command.setLogger( getLogger() );
-
-     return (TagScmResult) command.execute( repository
-     .getProviderRepository(), fileSet, parameters );
-     }
-     */
+    public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        VssTagCommand command = new VssTagCommand();
+
+        command.setLogger( getLogger() );
+
+        return (TagScmResult) command.execute( repository, fileSet, parameters );
+    }
 
     /** {@inheritDoc} */
     public UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
@@ -210,29 +208,23 @@
     }
 
     /*
-    public UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet,
-                                   CommandParameters parameters )
-        throws ScmException
-    {
-        VssUnEditCommand command = new VssUnEditCommand();
-
-        command.setLogger( getLogger() );
-
-        return (UnEditScmResult) command.execute( repository, fileSet, parameters );
-    }
-    */
+     * public UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet,
+     * CommandParameters parameters ) throws ScmException { VssUnEditCommand command = new
+     * VssUnEditCommand();
+     * 
+     * command.setLogger( getLogger() );
+     * 
+     * return (UnEditScmResult) command.execute( repository, fileSet, parameters ); }
+     */
 
     /*
-     protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet,
-                                       CommandParameters parameters )
-     throws ScmException
-     {
-     VssRemoveCommand command = new VssRemoveCommand();
-
-     command.setLogger( getLogger() );
-
-     return (RemoveScmResult) command.execute( repository
-     .getProviderRepository(), fileSet, parameters );
-     }
+     * protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet,
+     * CommandParameters parameters ) throws ScmException { VssRemoveCommand command = new
+     * VssRemoveCommand();
+     * 
+     * command.setLogger( getLogger() );
+     * 
+     * return (RemoveScmResult) command.execute( repository .getProviderRepository(), fileSet,
+     * parameters ); }
      */
 }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java Sat Nov 28 19:13:15 2009
@@ -0,0 +1,237 @@
+package org.apache.maven.scm.provider.vss.commands.checkin;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils;
+import org.apache.maven.scm.provider.vss.commands.VssConstants;
+import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author &lt;a href="mailto:matpimenta@gmail.com"&gt;Mateus Pimenta&lt;/a&gt;
+ * @since 1.3
+ * 
+ */
+public class VssCheckInCommand extends AbstractCheckInCommand {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @seeorg.apache.maven.scm.command.checkin.AbstractCheckInCommand#
+	 * executeCheckInCommand
+	 * (org.apache.maven.scm.provider.ScmProviderRepository,
+	 * org.apache.maven.scm.ScmFileSet, java.lang.String,
+	 * org.apache.maven.scm.ScmVersion)
+	 */
+	protected CheckInScmResult executeCheckInCommand(
+			ScmProviderRepository repository, ScmFileSet fileSet,
+			String message, ScmVersion scmVersion) throws ScmException
+    {
+		if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( "executing checkin command..." );
+        }
+
+        VssScmProviderRepository repo = (VssScmProviderRepository) repository;
+
+        List commandLines = buildCmdLine( repo, fileSet, scmVersion );
+
+        VssCheckInConsumer consumer = new VssCheckInConsumer( repo, getLogger() );
+
+        //      TODO handle deleted files from VSS
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        int exitCode;
+        
+        StringBuffer sb = new StringBuffer();
+        List updatedFiles = new ArrayList();
+        
+        for (Iterator i = commandLines.iterator(); i.hasNext();) {
+
+        	Commandline cl = (Commandline) i.next();
+	
+	        if ( getLogger().isDebugEnabled() )
+	        {
+	            getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + "&gt;&gt;" + cl.toString() );
+	        }
+	
+	        exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );
+	
+	        if ( exitCode != 0 )
+	        {
+	            String error = stderr.getOutput();
+	
+	            if ( getLogger().isDebugEnabled() )
+	            {
+	                getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
+	            }
+	            if ( error.indexOf( "A writable copy of" ) &lt; 0 )
+	            {
+	                return new CheckInScmResult( cl.toString(), "The vss command failed.", error, false );
+	            }
+	            // print out the writable copy for manual handling
+	            if ( getLogger().isWarnEnabled() )
+	            {
+	                getLogger().warn( error );
+	            }
+	        }
+
+        }
+        return new CheckInScmResult( sb.toString(), updatedFiles );
+    }
+
+	public List buildCmdLine(VssScmProviderRepository repo,
+			ScmFileSet fileSet, ScmVersion version) throws ScmException {
+
+        List files = fileSet.getFileList();
+        List commands = new ArrayList();
+
+        if (files.size() &gt; 0) {
+
+            String base;
+    		try {
+    			base = fileSet.getBasedir().getCanonicalPath();
+    		} catch (IOException e) {
+    			throw new ScmException("Invalid canonical path", e);
+    		}
+
+	        for (Iterator i = files.iterator(); i.hasNext();) {
+
+	            Commandline command = new Commandline();
+
+	            try
+	            {
+	                command.addSystemEnvironment();
+	            }
+	            catch ( Exception e )
+	            {
+	                throw new ScmException( "Can't add system environment.", e );
+	            }
+
+	            command.addEnvironment( "SSDIR", repo.getVssdir() );
+
+	            String ssDir = VssCommandLineUtils.getSsDir();
+
+	            command.setExecutable( ssDir + VssConstants.SS_EXE );
+
+	            command.createArg().setValue( VssConstants.COMMAND_CHECKIN );
+	            
+	        	File file = (File) i.next();
+				String absolute;
+				try {
+					absolute = file.getCanonicalPath();
+					String relative;
+					int index = absolute.indexOf(base);
+					if (index &gt;= 0) {
+						relative = absolute.substring(index + base.length());
+					} else {
+						relative = file.getPath();
+					}
+					
+					relative = relative.replace('\\', '/');
+					
+					if (!relative.startsWith("/")) {
+						relative = '/' +  relative;
+					}
+					
+					String relativeFolder = relative.substring(0, relative.lastIndexOf('/'));
+					
+		            command.setWorkingDirectory( new File(fileSet.getBasedir().getAbsolutePath() + File.separatorChar + relativeFolder ).getCanonicalPath() );
+					
+		            command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() + relative);
+				} catch (IOException e) {
+					throw new ScmException("Invalid canonical path", e);
+				}
+
+	            //User identification to get access to vss repository
+	            if ( repo.getUserPassword() != null )
+	            {
+	                command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
+	            }
+
+	    		// Ignore: Do not ask for input under any circumstances.
+	    		command.createArg().setValue(VssConstants.FLAG_AUTORESPONSE_DEF);
+
+	    		// Ignore: Do not touch local writable files.
+	    		command.createArg().setValue(VssConstants.FLAG_REPLACE_WRITABLE);
+	    		
+	            commands.add(command);
+	        
+	        }
+        	
+        } else {
+            Commandline command = new Commandline();
+
+            command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );
+
+            try
+            {
+                command.addSystemEnvironment();
+            }
+            catch ( Exception e )
+            {
+                throw new ScmException( "Can't add system environment.", e );
+            }
+
+            command.addEnvironment( "SSDIR", repo.getVssdir() );
+
+            String ssDir = VssCommandLineUtils.getSsDir();
+
+            command.setExecutable( ssDir + VssConstants.SS_EXE );
+
+            command.createArg().setValue( VssConstants.COMMAND_CHECKIN );
+
+            command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() );
+            //Display the history of an entire project list
+            command.createArg().setValue( VssConstants.FLAG_RECURSION );
+
+            //User identification to get access to vss repository
+            if ( repo.getUserPassword() != null )
+            {
+                command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
+            }
+
+    		// Ignore: Do not ask for input under any circumstances.
+    		command.createArg().setValue(VssConstants.FLAG_AUTORESPONSE_DEF);
+
+    		// Ignore: Do not touch local writable files.
+    		command.createArg().setValue(VssConstants.FLAG_REPLACE_WRITABLE);
+
+            commands.add(command);
+
+        }
+
+        return commands;
+
+	}
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java Sat Nov 28 19:13:15 2009
@@ -0,0 +1,218 @@
+package org.apache.maven.scm.provider.vss.commands.checkin;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.vss.commands.VssConstants;
+import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
+import org.apache.maven.scm.util.AbstractConsumer;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author &lt;a href="mailto:triek@thrx.de"&gt;Thorsten Riek&lt;/a&gt;
+ * @version $Id$
+ * @since 1.3
+ */
+public class VssCheckInConsumer
+    extends AbstractConsumer
+    implements StreamConsumer
+{
+
+    /**
+     * expecting file information
+     */
+    private static final int GET_UNKNOWN = 0;
+
+    /**
+     * expecting file information
+     */
+    private static final int GET_FILE = 1;
+
+    /**
+     * expecting file information
+     */
+    private static final int REPLACE_FILE = 2;
+
+    /**
+     * expecting file path information
+     */
+    private static final int GET_FILE_PATH = 3;
+
+    /**
+     * expecting writable copy
+     */
+    private static final int IS_WRITABLE_COPY = 4;
+
+    /**
+     * expecting working folder
+     */
+    private static final int SET_WORKING_FOLDER = 5;
+
+    /**
+     * Marks start of file data
+     */
+    private static final String START_FILE_PATH = "$/";
+
+    /**
+     * Marks getting a new File
+     */
+    private static final String START_GETTING = "Getting";
+
+    /**
+     * Marks replacing a old File
+     */
+    private static final String START_REPLACING = "Replacing local copy of ";
+
+    /**
+     * Marks a writable copy of a File / maybe a conflict
+     */
+    private static final String START_WRITABLE_COPY = "A writable ";
+
+    /**
+     * Marks "Set the default folder for project" question
+     */
+    private static final String CONTAINS_SET_DEFAULT_WORKING_FOLDER = "as the default folder for project";
+
+    private String currentPath = "";
+
+    private List updatedFiles = new ArrayList();
+
+    private VssScmProviderRepository repo;
+
+    public VssCheckInConsumer( VssScmProviderRepository repo, ScmLogger logger )
+    {
+        super( logger );
+        this.repo = repo;
+    }
+
+    /** {@inheritDoc} */
+    public void consumeLine( String line )
+    {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( line );
+        }
+
+        switch ( getLineStatus( line ) )
+        {
+            case GET_FILE_PATH:
+                processGetFilePath( line );
+                break;
+            case GET_FILE:
+                processGetFile( line );
+                break;
+            case REPLACE_FILE:
+                processReplaceFile( line );
+                break;
+            case IS_WRITABLE_COPY:
+                // will be overwritten and uses REPLACE_FILE
+                break;
+            case SET_WORKING_FOLDER:
+                // to trash
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Process the current input line in the Get File state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processGetFile( String line )
+    {
+        String[] fileLine = line.split( " " );
+        updatedFiles.add( new ScmFile( currentPath + "/" + fileLine[1], ScmFileStatus.UPDATED ) );
+        if ( getLogger().isInfoEnabled() )
+        {
+            getLogger().info( fileLine[0] + ": " + currentPath + "/" + fileLine[1] );
+        }
+    }
+
+    /**
+     * Process the current input line in the Replace File state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processReplaceFile( String line )
+    {
+        updatedFiles.add( new ScmFile( currentPath + "/" + line.substring( START_REPLACING.length() ),
+                                       ScmFileStatus.UPDATED ) );
+        if ( getLogger().isInfoEnabled() )
+        {
+            getLogger().info( START_REPLACING + currentPath + "/" + line.substring( START_REPLACING.length() ) );
+        }
+    }
+
+    /**
+     * Process the current input line in the Get File Path state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processGetFilePath( String line )
+    {
+        currentPath = line.substring( ( VssConstants.PROJECT_PREFIX + repo.getProject() ).length(), line.length() - 1 );
+    }
+
+    /**
+     * Identify the status of a vss get line
+     * 
+     * @param line The line to process
+     * @return status
+     */
+    private int getLineStatus( String line )
+    {
+        int argument = GET_UNKNOWN;
+        if ( line.startsWith( START_FILE_PATH ) )
+        {
+            argument = GET_FILE_PATH;
+        }
+        else if ( line.startsWith( START_GETTING ) )
+        {
+            argument = GET_FILE;
+        }
+        else if ( line.startsWith( START_REPLACING ) )
+        {
+            argument = REPLACE_FILE;
+        }
+        else if ( line.startsWith( START_WRITABLE_COPY ) )
+        {
+            argument = IS_WRITABLE_COPY;
+        }
+        else if ( line.indexOf( CONTAINS_SET_DEFAULT_WORKING_FOLDER ) != -1 )
+        {
+            argument = SET_WORKING_FOLDER;
+        }
+
+        return argument;
+    }
+
+    public List getUpdatedFiles()
+    {
+        return updatedFiles;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java Sat Nov 28 19:13:15 2009
@@ -131,8 +131,10 @@
         //Ignore: Do not touch local writable files.
         command.createArg().setValue( VssConstants.FLAG_REPLACE_WRITABLE );
 
-        // TODO: Get Labled Version
-        // command.createArg().setValue( VssConstants.FLAG_VERSION_LABEL );
+        if ( version != null )
+        {
+            command.createArg().setValue( VssConstants.FLAG_VERSION_LABEL + '"' + version + '"' );
+        }
 
         return command;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java Sat Nov 28 19:13:15 2009
@@ -19,6 +19,12 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
@@ -52,7 +58,7 @@
 
         VssScmProviderRepository repo = (VssScmProviderRepository) repository;
 
-        Commandline cl = buildCmdLine( repo, fileSet );
+        List commandLines = buildCmdLine( repo, fileSet );
 
         VssEditConsumer consumer = new VssEditConsumer( repo, getLogger() );
 
@@ -61,75 +67,179 @@
 
         int exitCode;
 
-        if ( getLogger().isDebugEnabled() )
-        {
-            getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + "&gt;&gt;" + cl.toString() );
-        }
-
-        exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );
+        StringBuffer sb = new StringBuffer();
+        List updatedFiles = new ArrayList();
 
-        if ( exitCode != 0 )
+        for ( Iterator i = commandLines.iterator(); i.hasNext(); )
         {
-            String error = stderr.getOutput();
+            Commandline cl = (Commandline) i.next();
 
             if ( getLogger().isDebugEnabled() )
             {
-                getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
+                getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + "&gt;&gt;" + cl.toString() );
             }
-            if ( error.indexOf( "A writable copy of" ) &lt; 0 )
-            {
-                return new EditScmResult( cl.toString(), "The vss command failed.", error, false );
-            }
-            // print out the writable copy for manual handling
-            if ( getLogger().isWarnEnabled() )
+
+            exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );
+
+            if ( exitCode != 0 )
             {
-                getLogger().warn( error );
+                String error = stderr.getOutput();
+
+                if ( getLogger().isDebugEnabled() )
+                {
+                    getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
+                }
+                if ( error.indexOf( "A writable copy of" ) &lt; 0 )
+                {
+                    return new EditScmResult( cl.toString(), "The vss command failed.", error, false );
+                }
+                // print out the writable copy for manual handling
+                if ( getLogger().isWarnEnabled() )
+                {
+                    getLogger().warn( error );
+                }
+                break;
             }
+
+            sb.append( cl.toString() + '\n' );
+            updatedFiles.addAll( consumer.getUpdatedFiles() );
+
         }
+        return new EditScmResult( sb.toString(), updatedFiles );
 
-        return new EditScmResult( cl.toString(), consumer.getUpdatedFiles() );
     }
 
-    public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet )
+    public List buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet )
         throws ScmException
     {
+        List files = fileSet.getFileList();
+        List commands = new ArrayList();
 
-        Commandline command = new Commandline();
+        if ( files.size() &gt; 0 )
+        {
+
+            String base;
+            try
+            {
+                base = fileSet.getBasedir().getCanonicalPath();
+            }
+            catch ( IOException e )
+            {
+                throw new ScmException( "Invalid canonical path", e );
+            }
 
-        command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );
+            for ( Iterator i = files.iterator(); i.hasNext(); )
+            {
+
+                Commandline command = new Commandline();
+
+                try
+                {
+                    command.addSystemEnvironment();
+                }
+                catch ( Exception e )
+                {
+                    throw new ScmException( "Can't add system environment.", e );
+                }
+
+                command.addEnvironment( "SSDIR", repo.getVssdir() );
+
+                String ssDir = VssCommandLineUtils.getSsDir();
+
+                command.setExecutable( ssDir + VssConstants.SS_EXE );
+
+                command.createArg().setValue( VssConstants.COMMAND_CHECKOUT );
+
+                File file = (File) i.next();
+                String absolute;
+                try
+                {
+                    absolute = file.getCanonicalPath();
+                    String relative;
+                    int index = absolute.indexOf( base );
+                    if ( index &gt;= 0 )
+                    {
+                        relative = absolute.substring( index + base.length() );
+                    }
+                    else
+                    {
+                        relative = file.getPath();
+                    }
+
+                    relative = relative.replace( '\\', '/' );
+
+                    if ( !relative.startsWith( "/" ) )
+                    {
+                        relative = '/' + relative;
+                    }
+
+                    String relativeFolder = relative.substring( 0, relative.lastIndexOf( '/' ) );
+
+                    command.setWorkingDirectory( new File( fileSet.getBasedir().getAbsolutePath() + File.separatorChar
+                        + relativeFolder ).getCanonicalPath() );
+
+                    command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() + relative );
+                }
+                catch ( IOException e )
+                {
+                    throw new ScmException( "Invalid canonical path", e );
+                }
+
+                //User identification to get access to vss repository
+                if ( repo.getUserPassword() != null )
+                {
+                    command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
+                }
+
+                //Ignore: Do not ask for input under any circumstances.
+                command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );
+
+                commands.add( command );
+
+            }
 
-        try
-        {
-            command.addSystemEnvironment();
         }
-        catch ( Exception e )
+        else
         {
-            throw new ScmException( "Can't add system environment.", e );
-        }
+            Commandline command = new Commandline();
+
+            command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );
+
+            try
+            {
+                command.addSystemEnvironment();
+            }
+            catch ( Exception e )
+            {
+                throw new ScmException( "Can't add system environment.", e );
+            }
 
-        command.addEnvironment( "SSDIR", repo.getVssdir() );
+            command.addEnvironment( "SSDIR", repo.getVssdir() );
 
-        String ssDir = VssCommandLineUtils.getSsDir();
+            String ssDir = VssCommandLineUtils.getSsDir();
 
-        command.setExecutable( ssDir + VssConstants.SS_EXE );
+            command.setExecutable( ssDir + VssConstants.SS_EXE );
 
-        command.createArg().setValue( VssConstants.COMMAND_CHECKOUT );
+            command.createArg().setValue( VssConstants.COMMAND_CHECKOUT );
 
-        command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() );
+            command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() );
+            //Display the history of an entire project list
+            command.createArg().setValue( VssConstants.FLAG_RECURSION );
 
-        //User identification to get access to vss repository
-        if ( repo.getUserPassword() != null )
-        {
-            command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
-        }
+            //User identification to get access to vss repository
+            if ( repo.getUserPassword() != null )
+            {
+                command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
+            }
 
-        //Display the history of an entire project list
-        command.createArg().setValue( VssConstants.FLAG_RECURSION );
+            //Ignore: Do not ask for input under any circumstances.
+            command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );
 
-        //Ignore: Do not ask for input under any circumstances.
-        command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );
+            commands.add( command );
 
-        return command;
+        }
+
+        return commands;
     }
 
     /**

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java Sat Nov 28 19:13:15 2009
@@ -19,18 +19,17 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.ScmLogger;
-import org.apache.maven.scm.provider.vss.commands.VssConstants;
 import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
 import org.apache.maven.scm.util.AbstractConsumer;
 import org.codehaus.plexus.util.cli.StreamConsumer;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author &lt;a href="mailto:triek@thrx.de"&gt;Thorsten Riek&lt;/a&gt;
  * @version $Id$
@@ -75,6 +74,7 @@
      */
     private static final String START_DIFFING_REMOTE = "Diffing:";
 
+
     /**
      * Marks Diffing local project folder
      */
@@ -134,9 +134,11 @@
                 lastState = DIFF_VSS_FILES_NOT_IN_CURRENT_FOLDER;
                 break;
             case DIFF_START_DIFFING_LOCAL:
+            	lastState = DIFF_START_DIFFING_LOCAL;
                 processLocalFolder( line );
                 break;
             case DIFF_START_DIFFING_REMOTE:
+            	lastState = DIFF_START_DIFFING_REMOTE;
                 processRemoteProjectFolder( line );
                 break;
             default:
@@ -155,6 +157,14 @@
 
         if ( line != null &amp;&amp; line.trim().length() &gt; 0 )
         {
+            if ( lastState == DIFF_START_DIFFING_LOCAL ) {
+            	setLocalFolder(localFolder + line);
+            	getLogger().debug("Local folder: " + localFolder);
+            } else if ( lastState == DIFF_START_DIFFING_REMOTE ) {
+            	setRemoteProjectFolder(remoteProjectFolder + line);            	
+            	getLogger().debug("Remote folder: " + localFolder);
+            }
+        	
             String[] fileLine = line.split( " " );
             for ( int i = 0; i &lt; fileLine.length; i++ )
             {
@@ -198,16 +208,7 @@
     private void processLocalFolder( String line )
     {
 
-        int folderLength = ( START_DIFFING_LOCAL + " " + fileSet.getBasedir().getAbsolutePath() ).length();
-
-        if ( folderLength &lt; line.length() )
-        {
-            setLocalFolder( line.substring( folderLength, line.length() ) );
-        }
-        else
-        {
-            setLocalFolder( "" );
-        }
+    	setLocalFolder( line.substring( START_DIFFING_LOCAL.length() ).trim() );
 
     }
 
@@ -219,16 +220,7 @@
     private void processRemoteProjectFolder( String line )
     {
 
-        int folderLength = ( START_DIFFING_REMOTE + " " + VssConstants.PROJECT_PREFIX + repo.getProject() ).length();
-
-        if ( folderLength &lt; line.length() )
-        {
-            setRemoteProjectFolder( line.substring( folderLength, line.length() ) );
-        }
-        else
-        {
-            setRemoteProjectFolder( "" );
-        }
+    	setRemoteProjectFolder( line.substring( START_DIFFING_REMOTE.length() ).trim() );
 
     }
 

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java Sat Nov 28 19:13:15 2009
@@ -0,0 +1,149 @@
+package org.apache.maven.scm.provider.vss.commands.tag;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils;
+import org.apache.maven.scm.provider.vss.commands.VssConstants;
+import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author &lt;a href="mailto:matpimenta@gmail.com"&gt;Mateus Pimenta&lt;/a&gt;
+ * @since 1.3
+ */
+public class VssTagCommand
+    extends AbstractTagCommand
+{
+
+    protected ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet, String tagName,
+                                           ScmTagParameters scmTagParameters )
+        throws ScmException
+    {
+        return executeTagCommand( repository, fileSet, tagName, scmTagParameters == null ? "" : scmTagParameters
+            .getMessage() );
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * org.apache.maven.scm.command.tag.AbstractTagCommand#executeTagCommand(org.apache.maven.scm
+     * .provider.ScmProviderRepository, org.apache.maven.scm.ScmFileSet, java.lang.String,
+     * java.lang.String)
+     */
+    protected ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet, String tagName,
+                                           String message )
+        throws ScmException
+    {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( "executing tag command..." );
+        }
+
+        VssScmProviderRepository repo = (VssScmProviderRepository) repository;
+
+        Commandline cl = buildCmdLine( repo, fileSet, tagName, message );
+
+        VssTagConsumer consumer = new VssTagConsumer( repo, getLogger() );
+
+        //      TODO handle deleted files from VSS
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        int exitCode;
+
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + "&gt;&gt;" + cl.toString() );
+        }
+
+        exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );
+
+        if ( exitCode != 0 )
+        {
+            String error = stderr.getOutput();
+
+            if ( getLogger().isDebugEnabled() )
+            {
+                getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
+            }
+            if ( error.indexOf( "A writable copy of" ) &lt; 0 )
+            {
+                return new TagScmResult( cl.toString(), "The vss command failed.", error, false );
+            }
+            // print out the writable copy for manual handling
+            if ( getLogger().isWarnEnabled() )
+            {
+                getLogger().warn( error );
+            }
+        }
+
+        return new TagScmResult( cl.toString(), consumer.getUpdatedFiles() );
+    }
+
+    public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet, String tagName, String message )
+        throws ScmException
+    {
+
+        Commandline command = new Commandline();
+
+        command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );
+
+        try
+        {
+            command.addSystemEnvironment();
+        }
+        catch ( Exception e )
+        {
+            throw new ScmException( "Can't add system environment.", e );
+        }
+
+        command.addEnvironment( "SSDIR", repo.getVssdir() );
+
+        String ssDir = VssCommandLineUtils.getSsDir();
+
+        command.setExecutable( ssDir + VssConstants.SS_EXE );
+
+        command.createArg().setValue( VssConstants.COMMAND_LABEL );
+
+        command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() );
+
+        // User identification to get access to vss repository
+        if ( repo.getUserPassword() != null )
+        {
+            command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
+        }
+
+        // Ignore: Do not ask for input under any circumstances.
+        command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );
+
+        command.createArg().setValue( VssConstants.FLAG_LABEL + tagName );
+
+        return command;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java Sat Nov 28 19:13:15 2009
@@ -0,0 +1,216 @@
+package org.apache.maven.scm.provider.vss.commands.tag;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.vss.commands.VssConstants;
+import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
+import org.apache.maven.scm.util.AbstractConsumer;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author &lt;a href="mailto:matpimenta@gmail.com"&gt;Mateus Pimenta&lt;/a&gt;
+ */
+public class VssTagConsumer
+    extends AbstractConsumer
+    implements StreamConsumer
+{
+
+    /**
+     * expecting file information
+     */
+    private static final int GET_UNKNOWN = 0;
+
+    /**
+     * expecting file information
+     */
+    private static final int GET_FILE = 1;
+
+    /**
+     * expecting file information
+     */
+    private static final int REPLACE_FILE = 2;
+
+    /**
+     * expecting file path information
+     */
+    private static final int GET_FILE_PATH = 3;
+
+    /**
+     * expecting writable copy
+     */
+    private static final int IS_WRITABLE_COPY = 4;
+
+    /**
+     * expecting working folder
+     */
+    private static final int SET_WORKING_FOLDER = 5;
+
+    /**
+     * Marks start of file data
+     */
+    private static final String START_FILE_PATH = "$/";
+
+    /**
+     * Marks getting a new File
+     */
+    private static final String START_GETTING = "Getting";
+
+    /**
+     * Marks replacing a old File
+     */
+    private static final String START_REPLACING = "Replacing local copy of ";
+
+    /**
+     * Marks a writable copy of a File / maybe a conflict
+     */
+    private static final String START_WRITABLE_COPY = "A writable ";
+
+    /**
+     * Marks "Set the default folder for project" question
+     */
+    private static final String CONTAINS_SET_DEFAULT_WORKING_FOLDER = "as the default folder for project";
+
+    private String currentPath = "";
+
+    private List updatedFiles = new ArrayList();
+
+    private VssScmProviderRepository repo;
+
+    public VssTagConsumer( VssScmProviderRepository repo, ScmLogger logger )
+    {
+        super( logger );
+        this.repo = repo;
+    }
+
+    /** {@inheritDoc} */
+    public void consumeLine( String line )
+    {
+        if ( getLogger().isDebugEnabled() )
+        {
+            getLogger().debug( line );
+        }
+
+        switch ( getLineStatus( line ) )
+        {
+            case GET_FILE_PATH:
+                processGetFilePath( line );
+                break;
+            case GET_FILE:
+                processGetFile( line );
+                break;
+            case REPLACE_FILE:
+                processReplaceFile( line );
+                break;
+            case IS_WRITABLE_COPY:
+                // will be overwritten and uses REPLACE_FILE
+                break;
+            case SET_WORKING_FOLDER:
+                // to trash
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Process the current input line in the Get File state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processGetFile( String line )
+    {
+        String[] fileLine = line.split( " " );
+        updatedFiles.add( new ScmFile( currentPath + "/" + fileLine[1], ScmFileStatus.UPDATED ) );
+        if ( getLogger().isInfoEnabled() )
+        {
+            getLogger().info( fileLine[0] + ": " + currentPath + "/" + fileLine[1] );
+        }
+    }
+
+    /**
+     * Process the current input line in the Replace File state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processReplaceFile( String line )
+    {
+        updatedFiles.add( new ScmFile( currentPath + "/" + line.substring( START_REPLACING.length() ),
+                                       ScmFileStatus.UPDATED ) );
+        if ( getLogger().isInfoEnabled() )
+        {
+            getLogger().info( START_REPLACING + currentPath + "/" + line.substring( START_REPLACING.length() ) );
+        }
+    }
+
+    /**
+     * Process the current input line in the Get File Path state.
+     * 
+     * @param line a line of text from the VSS log output
+     */
+    private void processGetFilePath( String line )
+    {
+        currentPath = line.substring( ( VssConstants.PROJECT_PREFIX + repo.getProject() ).length(), line.length() - 1 );
+    }
+
+    /**
+     * Identify the status of a vss get line
+     * 
+     * @param line The line to process
+     * @return status
+     */
+    private int getLineStatus( String line )
+    {
+        int argument = GET_UNKNOWN;
+        if ( line.startsWith( START_FILE_PATH ) )
+        {
+            argument = GET_FILE_PATH;
+        }
+        else if ( line.startsWith( START_GETTING ) )
+        {
+            argument = GET_FILE;
+        }
+        else if ( line.startsWith( START_REPLACING ) )
+        {
+            argument = REPLACE_FILE;
+        }
+        else if ( line.startsWith( START_WRITABLE_COPY ) )
+        {
+            argument = IS_WRITABLE_COPY;
+        }
+        else if ( line.indexOf( CONTAINS_SET_DEFAULT_WORKING_FOLDER ) != -1 )
+        {
+            argument = SET_WORKING_FOLDER;
+        }
+
+        return argument;
+    }
+
+    public List getUpdatedFiles()
+    {
+        return updatedFiles;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java Sat Nov 28 19:13:15 2009
@@ -137,10 +137,11 @@
         // checked out files
         //Ignore: Do not touch local writable files.
         command.createArg().setValue( VssConstants.FLAG_SKIP_WRITABLE );
-//        command.createArg().setValue( VssConstants.FLAG_REPLACE_WRITABLE );
 
-        // ToDo: Get Labled Version
-        // command.createArg().setValue( VssConstants.FLAG_VERSION_LABEL );
+        if ( version != null )
+        {
+            command.createArg().setValue( VssConstants.FLAG_VERSION_LABEL + version );
+        }
 
         return command;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java?rev=885129&amp;r1=885128&amp;r2=885129&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java Sat Nov 28 19:13:15 2009
@@ -25,9 +25,12 @@
 import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils;
 import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.cli.Commandline;
 
 import java.io.File;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * @author &lt;a href="mailto:evenisse@apache.org"&gt;Emmanuel Venisse&lt;/a&gt;
@@ -49,12 +52,96 @@
     public void testCommandLine()
         throws Exception
     {
-        ScmRepository repository =
-            scmManager.makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
+        ScmRepository repository = scmManager
+            .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
         ScmFileSet fileSet = new ScmFileSet( getTestFile( "target" ) );
         VssEditCommand command = new VssEditCommand();
-        Commandline cl = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet );
+        List commands = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet );
+        Commandline cl = (Commandline) commands.get( 0 );
         String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
-        assertCommandLine( ssPath + "ss Checkout $D:/myProject -Yusername,password -R -I-", fileSet.getBasedir(), cl );
+        assertCommandLine( ssPath + "ss Checkout $D:/myProject -R -Yusername,password -I-", fileSet.getBasedir(), cl );
     }
+
+    public void testCommandLineFileSet()
+        throws Exception
+    {
+        File target = getTestFile( "target" );
+        ScmRepository repository = scmManager
+            .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
+        ScmFileSet fileSet = new ScmFileSet( target, "**/VssEditCommandTest.class" );
+        VssEditCommand command = new VssEditCommand();
+        List commands = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet );
+        Commandline cl = (Commandline) commands.get( 0 );
+        String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
+        assertCommandLine(
+                           ssPath
+                               + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class -Yusername,password -I-",
+                           fileSet.getBasedir(), cl );
+    }
+
+    public void testCommandLineRelativePath()
+        throws Exception
+    {
+        ScmRepository repository = scmManager
+            .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
+        File target = getTestFile( "target" );
+
+        ScmFileSet fileSet = new ScmFileSet(
+                                             target,
+                                             new File( target,
+                                                       "test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class" ) );
+        VssEditCommand command = new VssEditCommand();
+        List commands = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet );
+        Commandline cl = (Commandline) commands.get( 0 );
+        String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
+        assertCommandLine(
+                           ssPath
+                               + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class -Yusername,password -I-",
+                           fileSet.getBasedir(), cl );
+    }
+
+    public void testCommandLineMultipleFiles()
+        throws Exception
+    {
+        ScmRepository repository = scmManager
+            .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
+        File target = getTestFile( "target" );
+        ScmFileSet fileSet = new ScmFileSet( target, Arrays
+            .asList( new File[] {
+                new File( target,
+                          "test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class" ),
+                new File( target, "test-classes/META-INF/LICENSE" ) } ) );
+        VssEditCommand command = new VssEditCommand();
+        List commands = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet );
+        assertEquals( 2, commands.size() );
+
+        Commandline cl;
+        String ssPath;
+
+        cl = (Commandline) commands.get( 0 );
+        ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
+        // vss is windauze so don't care about the case
+        assertEquals( StringUtils.lowerCase( normSep( target.getPath()
+            + "/test-classes/org/apache/maven/scm/provider/vss/commands/edit" ) ), StringUtils.lowerCase( cl
+            .getWorkingDirectory().getPath() ) );
+        assertCommandLine(
+                           ssPath
+                               + "ss Checkout $D:/myProject/test-classes/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.class -Yusername,password -I-",
+                           fileSet.getBasedir(), cl );
+
+        cl = (Commandline) commands.get( 1 );
+        ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar );
+        // vss is windauze so don't care about the case
+        assertEquals( StringUtils.lowerCase( normSep( target.getPath() + "/test-classes/META-INF" ) ), StringUtils
+            .lowerCase( cl.getWorkingDirectory().getPath() ) );
+        assertCommandLine( ssPath + "ss Checkout $D:/myProject/test-classes/META-INF/LICENSE -Yusername,password -I-",
+                           fileSet.getBasedir(), cl );
+
+    }
+
+    private String normSep( String str )
+    {
+        return str.replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
+    }
+
 }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java Sat Nov 28 19:13:15 2009
@@ -0,0 +1,83 @@
+package org.apache.maven.scm.provider.vss.commands.status;
+
+/*
+ * 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.
+ */
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.manager.plexus.PlexusLogger;
+import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+import org.codehaus.plexus.util.IOUtil;
+
+/**
+ * @author &lt;a href="mailto:matpimenta@gmail.com"&gt;Mateus Pimenta&lt;/a&gt;
+ * 
+ */
+public class VssStatusConsumerTest
+    extends ScmTestCase
+{
+
+    private ScmManager scmManager;
+
+    private org.codehaus.plexus.logging.Logger logger;
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        scmManager = getScmManager();
+        logger = getContainer().getLogger();
+    }
+
+    public void testConsumeLine()
+        throws ScmRepositoryException, NoSuchScmProviderException, IOException
+    {
+        BufferedReader reader = new BufferedReader( new InputStreamReader( this.getResourceAsStream( "/test.txt" ),
+                                                                           "UTF-8" ) );
+        try
+        {
+            ScmRepository repository = scmManager
+                .makeScmRepository( "scm:vss|username|password@C:/Program File/Visual Source Safe|D:/myProject" );
+            ScmFileSet fileSet = new ScmFileSet( getTestFile( "target" ) );
+
+            VssStatusConsumer consumer = new VssStatusConsumer( (VssScmProviderRepository) repository
+                .getProviderRepository(), new PlexusLogger( logger ), fileSet );
+
+            String line = reader.readLine();
+            while ( line != null )
+            {
+                consumer.consumeLine( line );
+                line = reader.readLine();
+            }
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumerTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt?rev=885129&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt Sat Nov 28 19:13:15 2009
@@ -0,0 +1,136 @@
+Diffing: $/Data
+Against: C:\Java\my-little-test-project\target\working-directory\11
+
+Local files not in the current project:
+  log.txt  release.properties
+Diffing: $/Data/.settings
+Against: C:\Java\my-little-test-project\target\working-directory\11\.settings
+
+Diffing: $/Data/HOW_TO
+Against: C:\Java\my-little-test-project\target\working-directory\11\HOW_TO
+
+Diffing: $/Data/JavaSource
+Against: C:\Java\my-little-test-project\target\working-directory\11\JavaSource
+
+Diffing: $/Data/JavaSource/com
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com
+
+Diffing: $/Data/JavaSource/com/company
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company
+
+Diffing: $/Data/JavaSource/com/company/data
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data
+
+Diffing: $/Data/JavaSource/com/company/data/caller
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\caller
+
+Diffing: $/Data/JavaSource/com/company/data/dal
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\dal
+
+Diffing: $/Data/JavaSource/com/company/data/dal/dao
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\dal\dao
+
+Diffing: $/Data/JavaSource/com/company/data/dal/stub
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\dal\stub
+
+Diffing: $/Data/JavaSource/com/company/data/dataholder
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\dataholder
+
+Diffing: $/Data/JavaSource/com/company/data/exception
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\exception
+
+Diffing: $/Data/JavaSource/com/company/data/factory
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\factory
+
+Diffing: $/Data/JavaSource/com/company/data/handler
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\handler
+
+Diffing: $/Data/JavaSource/com/company/data/message
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\message
+
+Diffing: $/Data/JavaSource/com/company/data/testharness
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\testharness
+
+Diffing: $/Data/JavaSource/com/company/data/testharness/dataholder
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\testharness\dataholder
+
+Diffing: $/Data/JavaSource/com/company/data/testharness/test
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\testharness\test
+
+Diffing: $/Data/JavaSource/com/company/data/util
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\util
+
+Diffing: $/Data/JavaSource/com/company/data/webservice
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/config
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\config
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/exception
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\exception
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/ICan
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\ICan
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/parser
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\parser
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/service
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\service
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/service/flow
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\service\flow
+
+Diffing: $/Data/JavaSource/com/company/data/webservice/service/pstep
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\com\company\
+data\webservice\service\pstep
+
+Diffing: $/Data/JavaSource/META-INF
+Against:
+C:\Java\my-little-test-project\target\working-directory\11\JavaSource\META-INF
+

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/resources/test.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885082 - /maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091128102902.176022388962@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091128102902-176022388962@eris-apache-org%3e</id>
<updated>2009-11-28T10:29:01Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Sat Nov 28 10:29:01 2009
New Revision: 885082

URL: http://svn.apache.org/viewvc?rev=885082&amp;view=rev
Log:
fix case sensitive junit.

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java?rev=885082&amp;r1=885081&amp;r2=885082&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
Sat Nov 28 10:29:01 2009
@@ -68,7 +68,7 @@
     public void testConsumeLine_ValidOutput()
         throws Exception
     {
-        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogValidOutput.txt"
);
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnLogValidOutput.txt"
);
 
         consumeLog( svnLog );
 
@@ -92,7 +92,7 @@
     public void testConsumeLine_InvalidReason()
         throws Exception
     {
-        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogInvalidReason.txt"
);
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnLogInvalidReason.txt"
);
 
         try
         {
@@ -113,7 +113,7 @@
     public void testConsumeLine_InvalidDate()
         throws Exception
     {
-        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogInvalidDate.txt"
);
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnLogInvalidDate.txt"
);
         try
         {
             consumeLog( svnLog );




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885037 - /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/changelog/IllegalOutputException.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091127222222.B8E86238899B@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091127222222-B8E86238899B@eris-apache-org%3e</id>
<updated>2009-11-27T22:22:22Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri Nov 27 22:22:22 2009
New Revision: 885037

URL: http://svn.apache.org/viewvc?rev=885037&amp;view=rev
Log:
add missing licenser header.

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/changelog/IllegalOutputException.java

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/changelog/IllegalOutputException.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/changelog/IllegalOutputException.java?rev=885037&amp;r1=885036&amp;r2=885037&amp;view=diff
==============================================================================
--- 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/changelog/IllegalOutputException.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/changelog/IllegalOutputException.java
Fri Nov 27 22:22:22 2009
@@ -1,7 +1,28 @@
 package org.apache.maven.scm.provider.svn.svnexe.command.changelog;
 
+
+/*
+ * 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.
+ */
+
 /**
  * Thrown when the output of an svn log command isn't recognized.
+ * @since 1.3
  */
 public class IllegalOutputException
     extends RuntimeException




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885036 - in /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/changelog/ test/java/org/apache/maven/scm/provider/svn/svnexe/command/change...</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091127222005.D836F2388996@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091127222005-D836F2388996@eris-apache-org%3e</id>
<updated>2009-11-27T22:20:05Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri Nov 27 22:20:04 2009
New Revision: 885036

URL: http://svn.apache.org/viewvc?rev=885036&amp;view=rev
Log:
[SCM-455] scm:changelog command does not pick up svn changes when author has spaces

Submitted by Todd Thiessen

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/changelog/IllegalOutputException.java
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
  (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/changelog/SvnChangeLogConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.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/changelog/IllegalOutputException.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/changelog/IllegalOutputException.java?rev=885036&amp;view=auto
==============================================================================
--- 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/changelog/IllegalOutputException.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/changelog/IllegalOutputException.java
Fri Nov 27 22:20:04 2009
@@ -0,0 +1,19 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.changelog;
+
+/**
+ * Thrown when the output of an svn log command isn't recognized.
+ */
+public class IllegalOutputException
+    extends RuntimeException
+{
+
+    /**
+     * Create the exception with a message.
+     * 
+     * @param message the message.
+     */
+    public IllegalOutputException( final String message )
+    {
+        super( message );
+    }
+}

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/changelog/IllegalOutputException.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/changelog/IllegalOutputException.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/changelog/SvnChangeLogConsumer.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/changelog/SvnChangeLogConsumer.java?rev=885036&amp;r1=885035&amp;r2=885036&amp;view=diff
==============================================================================
--- 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/changelog/SvnChangeLogConsumer.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/changelog/SvnChangeLogConsumer.java
Fri Nov 27 22:20:04 2009
@@ -19,16 +19,15 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 import org.apache.maven.scm.ChangeFile;
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.svn.SvnChangeSet;
 import org.apache.maven.scm.util.AbstractConsumer;
 import org.apache.regexp.RE;
-import org.apache.regexp.RESyntaxException;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
 
 /**
  * @author &lt;a href="mailto:evenisse@apache.org"&gt;Emmanuel Venisse&lt;/a&gt;
@@ -79,21 +78,6 @@
         "------------------------------------" + "------------------------------------";
 
     /**
-     * The pattern used to match svn header lines
-     */
-    private static final String PATTERN = "^rev (\\d+):\\s+" + // revision number
-        "(\\w+)\\s+\\|\\s+" + // author username
-        "(\\d+-\\d+-\\d+ " + // date 2002-08-24
-        "\\d+:\\d+:\\d+) " + // time 16:01:00
-        "([\\-+])(\\d\\d)(\\d\\d)"; // gmt offset -0400
-
-    private static final String PATTERN2 = "^r(\\d+)\\s+\\|\\s+" +          // revision number
-        "(\\(\\S+\\s+\\S+\\)|\\S+)\\s+\\|\\s+" + // author username
-        "(\\d+-\\d+-\\d+ " +             // date 2002-08-24
-        "\\d+:\\d+:\\d+) " +             // time 16:01:00
-        "([\\-+])(\\d\\d)(\\d\\d)";      // gmt offset -0400
-
-    /**
      * Current status of the parser
      */
     private int status = GET_HEADER;
@@ -121,11 +105,23 @@
     /**
      * The regular expression used to match header lines
      */
-    private RE headerRegexp;
-
-    private RE headerRegexp2;
+    private static final RE HEADER_REG_EXP =
+        new RE("^(.+) \\| (.+) \\| (.+) \\|.*$");
+    
+    private static final int REVISION_GROUP = 1;
+    private static final int AUTHOR_GROUP = 2;
+    private static final int DATE_GROUP = 3;
+    
+    private static final RE REVISION_REG_EXP1 = new RE("rev (\\d+):");
+    
+    private static final RE REVISION_REG_EXP2 = new RE("r(\\d+)");
+    
+    private static final RE DATE_REG_EXP = new RE(
+        "(\\d+-\\d+-\\d+ " +             // date 2002-08-24
+        "\\d+:\\d+:\\d+) " +             // time 16:01:00
+        "([\\-+])(\\d\\d)(\\d\\d)");     // gmt offset -0400);)
 
-    private String userDateFormat;
+    private final String userDateFormat;
 
     /**
      * Default constructor.
@@ -135,18 +131,6 @@
         super( logger );
 
         this.userDateFormat = userDateFormat;
-
-        try
-        {
-            headerRegexp = new RE( PATTERN );
-            headerRegexp2 = new RE( PATTERN2 );
-        }
-        catch ( RESyntaxException ex )
-        {
-            throw new RuntimeException(
-                            "INTERNAL ERROR: Could not create regexp to parse svn log file.
This shouldn't happen. Something is probably wrong with the oro installation.",
-                            ex );
-        }
     }
 
     public List getModifications()
@@ -196,28 +180,45 @@
      */
     private void processGetHeader( String line )
     {
-        if ( !headerRegexp.match( line ) )
+        if ( !HEADER_REG_EXP.match(line) )
         {
-            if ( !headerRegexp2.match( line ) )
-            {
-                return;
-            }
-            else
-            {
-                headerRegexp = headerRegexp2;
-            }
+            // The header line is not found. Intentionally do nothing.
+            return;
         }
 
-        currentRevision = headerRegexp.getParen( 1 );
+        currentRevision = getRevision(HEADER_REG_EXP.getParen(
+                REVISION_GROUP ));
 
         currentChange = new SvnChangeSet();
 
-        currentChange.setAuthor( headerRegexp.getParen( 2 ) );
+        currentChange.setAuthor( HEADER_REG_EXP.getParen( AUTHOR_GROUP ) );
 
-        currentChange.setDate( parseDate() );
+        currentChange.setDate( getDate(HEADER_REG_EXP.getParen( DATE_GROUP )) );
 
         status = GET_FILE;
     }
+    
+    /**
+     * Gets the svn revision, from the svn log revision output.
+     * 
+     * @param revisionOutput
+     * @return the svn revision
+     */
+    private String getRevision(final String revisionOutput)
+    {
+        if (REVISION_REG_EXP1.match(revisionOutput))
+        {
+            return REVISION_REG_EXP1.getParen(1);
+        }
+        else if (REVISION_REG_EXP2.match(revisionOutput))
+        {
+            return REVISION_REG_EXP2.getParen(1);
+        }
+        else
+        {
+          throw new IllegalOutputException(revisionOutput);
+        }
+    }
 
     /**
      * Process the current input line in the GET_FILE state.  This state
@@ -270,16 +271,26 @@
     }
 
     /**
-     * Converts the date timestamp from the svn output into a date
+     * Converts the date time stamp from the svn output into a date
      * object.
-     *
-     * @return A date representing the timestamp of the log entry.
+     * 
+     * @param dateOutput The date output from an svn log command.
+     * @return A date representing the time stamp of the log entry.
      */
-    private Date parseDate()
+    private Date getDate(final String dateOutput)
     {
-        StringBuffer date = new StringBuffer().append( headerRegexp.getParen( 3 ) ).append(
" GMT" )
-            .append( headerRegexp.getParen( 4 ) ).append( headerRegexp.getParen( 5 ) ).append(
':' )
-            .append( headerRegexp.getParen( 6 ) );
+        if (!DATE_REG_EXP.match(dateOutput))
+        {
+            throw new IllegalOutputException(dateOutput);
+        }
+      
+        final StringBuffer date = new StringBuffer();
+        date.append(DATE_REG_EXP.getParen( 1 ));
+        date.append(" GMT");
+        date.append(DATE_REG_EXP.getParen( 2 ));
+        date.append(DATE_REG_EXP.getParen( 3 ));
+        date.append(':');
+        date.append(DATE_REG_EXP.getParen( 4 ));
 
         return parseDate( date.toString(), userDateFormat, SVN_TIMESTAMP_PATTERN );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java?rev=885036&amp;r1=885035&amp;r2=885036&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogConsumerTest.java
Fri Nov 27 22:20:04 2009
@@ -19,18 +19,19 @@
  * under the License.
  */
 
-import org.apache.maven.scm.ChangeFile;
-import org.apache.maven.scm.ChangeSet;
-import org.apache.maven.scm.log.DefaultLog;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.logging.Logger;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.log.DefaultLog;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.logging.Logger;
+
 /**
  * @author &lt;a href="mailto:evenisse@apache.org"&gt;Emmanuel Venisse&lt;/a&gt;
  * @version $Id$
@@ -39,6 +40,8 @@
     extends PlexusTestCase
 {
     Logger logger;
+    SvnChangeLogConsumer consumer;
+    
 
     protected void setUp()
         throws Exception
@@ -46,6 +49,99 @@
         super.setUp();
 
         logger = getContainer().getLogger();
+        consumer = new SvnChangeLogConsumer( new DefaultLog(), null );
+    }
+    
+    /**
+     * Initial modifications should be empty.
+     */
+    public void testGetModifications_Initial()
+    {
+        assertTrue("Initial modifications should be empty", consumer.getModifications().isEmpty());
+    }
+    
+    /**
+     * Valid svn log output should have expected values.
+     * 
+     * @throws Exception if any problem occurs.
+     */
+    public void testConsumeLine_ValidOutput()
+        throws Exception
+    {
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogValidOutput.txt"
);
+
+        consumeLog( svnLog );
+
+        final ChangeSet entry = (ChangeSet) consumer.getModifications().get( 0 );
+
+        final List changedFiles = entry.getFiles();
+        final String revision = ( (ChangeFile) changedFiles.get( 0 ) ).getRevision();
+
+        assertEquals( "Valid revision expected", "15", revision );
+        assertEquals( "Valid num changed files expected", 2, changedFiles.size() );
+        assertEquals( "Valid name expected", "unconventional author output (somedata)", entry.getAuthor()
);
+        assertEquals( "Valid date expected", "2002-08-26", entry.getDateFormatted() );
+        assertEquals( "Valid comment expected", "Minor formatting changes.\n", entry.getComment()
);
+    }
+    
+    /**
+     * Svn log output with an invalid reason should throw an IllegalOutputException.
+     * 
+     * @throws Exception
+     */
+    public void testConsumeLine_InvalidReason()
+        throws Exception
+    {
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogInvalidReason.txt"
);
+
+        try
+        {
+            consumeLog( svnLog );
+            fail( "Svn log output with an invalid reason should throw IllegalOutputException"
);
+        }
+        catch ( final IllegalOutputException e )
+        {
+            assertTrue( true );
+        }
+    }
+    
+    /**
+     * Svn log output with an invalid date should throw an IllegalOutputException.
+     * 
+     * @throws Exception
+     */
+    public void testConsumeLine_InvalidDate()
+        throws Exception
+    {
+        final File svnLog = getTestFile( "/src/test/resources/svn/changelog/svnlogInvalidDate.txt"
);
+        try
+        {
+            consumeLog( svnLog );
+            fail( "Svn log output with an invalid date should throw IllegalOutputException"
);
+        }
+        catch ( final IllegalOutputException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    /**
+     * Consumes change log information stored in a file.
+     * 
+     * @param logFile the file.
+     * @throws IOException if a problem occurs.
+     */
+    private void consumeLog( final File logFile )
+        throws IOException
+    {
+        final BufferedReader reader = new BufferedReader( new FileReader( logFile ) );
+        String line = reader.readLine();
+
+        while ( line != null )
+        {
+            consumer.consumeLine( line );
+            line = reader.readLine();
+        }
     }
 
     public void testConsumerWithPattern1()
@@ -53,8 +149,6 @@
     {
         StringBuffer out = new StringBuffer();
 
-        SvnChangeLogConsumer consumer = new SvnChangeLogConsumer( new DefaultLog(), null
);
-
         File f = getTestFile( "/src/test/resources/svn/changelog/svnlog.txt" );
 
         BufferedReader r = new BufferedReader( new FileReader( f ) );
@@ -118,8 +212,6 @@
     {
         StringBuffer out = new StringBuffer();
 
-        SvnChangeLogConsumer consumer = new SvnChangeLogConsumer( new DefaultLog(), null
);
-
         File f = getTestFile( "/src/test/resources/svn/changelog/svnlog2.txt" );
 
         BufferedReader r = new BufferedReader( new FileReader( f ) );

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt?rev=885036&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
Fri Nov 27 22:20:04 2009
@@ -0,0 +1,3 @@
+------------------------------------------------------------------------
+r15 | unconventional author output (somedata) | invalid date | 3 lines
+------------------------------------------------------------------------
\ No newline at end of file

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidDate.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt?rev=885036&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
Fri Nov 27 22:20:04 2009
@@ -0,0 +1,3 @@
+------------------------------------------------------------------------
+invalid revision | unconventional author output (somedata) | 2002-08-26 14:33:26 -0400 (Mon,
26 Aug 2002) | 3 lines
+------------------------------------------------------------------------
\ No newline at end of file

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogInvalidReason.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt?rev=885036&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
Fri Nov 27 22:20:04 2009
@@ -0,0 +1,15 @@
+------------------------------------------------------------------------
+r15 | unconventional author output (somedata) | 2002-08-26 14:33:26 -0400 (Mon, 26 Aug 2002)
| 3 lines
+Changed paths:
+   M /poolserver/trunk/build.xml
+   M /poolserver/trunk/project.properties
+
+Minor formatting changes.
+------------------------------------------------------------------------
+r15 | unconventional author output (somedata) | 2002-08-26 14:33:26 -0400 (Mon, 26 Aug 2002)
| 3 lines
+Changed paths:
+   M /poolserver/trunk/build.xml
+   M /poolserver/trunk/project.properties
+
+Minor formatting changes.
+------------------------------------------------------------------------
\ No newline at end of file

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/resources/svn/changelog/svnLogValidOutput.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885035 - /maven/scm/trunk/pom.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091127220637.1733D2388996@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091127220637-1733D2388996@eris-apache-org%3e</id>
<updated>2009-11-27T22:06:37Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri Nov 27 22:06:36 2009
New Revision: 885035

URL: http://svn.apache.org/viewvc?rev=885035&amp;view=rev
Log:
downgrade javadoc plugin version due to MJAVADOC-275

Modified:
    maven/scm/trunk/pom.xml

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=885035&amp;r1=885034&amp;r2=885035&amp;view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Fri Nov 27 22:06:36 2009
@@ -270,6 +270,12 @@
           &lt;artifactId&gt;modello-maven-plugin&lt;/artifactId&gt;
           &lt;version&gt;1.0-alpha-21&lt;/version&gt;
         &lt;/plugin&gt;
+        &lt;!--  due to MJAVADOC-275 --&gt;
+        &lt;plugin&gt;
+          &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
+          &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;
+          &lt;version&gt;2.5&lt;/version&gt;
+        &lt;/plugin&gt;        
       &lt;/plugins&gt;
     &lt;/pluginManagement&gt;
 




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r885033 - /maven/scm/trunk/pom.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091127220023.C5A072388A18@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091127220023-C5A072388A18@eris-apache-org%3e</id>
<updated>2009-11-27T22:00:23Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri Nov 27 22:00:23 2009
New Revision: 885033

URL: http://svn.apache.org/viewvc?rev=885033&amp;view=rev
Log:
upgrade to last parent

Modified:
    maven/scm/trunk/pom.xml

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=885033&amp;r1=885032&amp;r2=885033&amp;view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Fri Nov 27 22:00:23 2009
@@ -25,7 +25,7 @@
   &lt;parent&gt;
     &lt;groupId&gt;org.apache.maven&lt;/groupId&gt;
     &lt;artifactId&gt;maven-parent&lt;/artifactId&gt;
-    &lt;version&gt;13&lt;/version&gt;
+    &lt;version&gt;15&lt;/version&gt;
     &lt;relativePath&gt;../pom/maven/pom.xml&lt;/relativePath&gt;
   &lt;/parent&gt;
 




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r881560 - /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</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200911.mbox/%3c20091117220026.2C98E238899C@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091117220026-2C98E238899C@eris-apache-org%3e</id>
<updated>2009-11-17T22:00:26Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Tue Nov 17 22:00:25 2009
New Revision: 881560

URL: http://svn.apache.org/viewvc?rev=881560&amp;view=rev
Log:
[SCM-480] adopt SvnStatusConsumer to work with latest SVN output format changes

thanks to Victor Volle!

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

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?rev=881560&amp;r1=881559&amp;r2=881560&amp;view=diff
==============================================================================
--- 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 Nov 17 22:00:25 2009
@@ -81,7 +81,7 @@
 
         String statusString = line.substring( 0, 1 );
 
-        String file = line.substring( 7 );
+        String file = line.substring( 7 ).trim();
 
         ScmFileStatus status;
 




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r831139 - /maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200910.mbox/%3c20091029225158.7F7AB23888BD@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091029225158-7F7AB23888BD@eris-apache-org%3e</id>
<updated>2009-10-29T22:51:58Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu Oct 29 22:51:57 2009
New Revision: 831139

URL: http://svn.apache.org/viewvc?rev=831139&amp;view=rev
Log:
restore 1.4 compatibility

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java?rev=831139&amp;r1=831138&amp;r2=831139&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
Thu Oct 29 22:51:57 2009
@@ -362,8 +362,8 @@
     private String parseHostAndPort( RepositoryUrl repoUrl, String url ) 
         throws ScmException
     {
-        StringBuilder host = new StringBuilder();
-        StringBuilder port = new StringBuilder();
+        StringBuffer host = new StringBuffer();
+        StringBuffer port = new StringBuffer();
         
         int i = 0;
         boolean isPort = false;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r823147 [2/2] - in /maven/scm/trunk: maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/ maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/ maven-scm-p...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200910.mbox/%3c20091008123925.91BA423888DB@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091008123925-91BA423888DB@eris-apache-org%3e</id>
<updated>2009-10-08T12:39:24Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkout/GitCheckOutCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkout/GitCheckOutCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkout/GitCheckOutCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkout/GitCheckOutCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+
 import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.tck.command.checkout.CheckOutCommandTckTest;
 
@@ -33,7 +34,7 @@
     public String getScmUrl()
         throws Exception
     {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
+        return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
     }
 
     /** {@inheritDoc} */
@@ -42,4 +43,5 @@
     {
         GitScmTestUtils.initRepo( "src/test/resources/repository/", getRepositoryRoot(),
getWorkingDirectory() );
     }
+    
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitDiffCommandTckTest
+public abstract class GitDiffCommandTckTest
     extends DiffCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/list/GitListCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/list/GitListCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/list/GitListCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/list/GitListCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitListCommandTckTest
+public abstract class GitListCommandTckTest
     extends ListCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/status/GitStatusCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/status/GitStatusCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/status/GitStatusCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/status/GitStatusCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitStatusCommandTckTest
+public abstract class GitStatusCommandTckTest
     extends StatusCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/tag/GitTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/tag/GitTagCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/tag/GitTagCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/tag/GitTagCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitTagCommandTckTest
+public abstract class GitTagCommandTckTest
     extends TagCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/update/GitUpdateCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/update/GitUpdateCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/update/GitUpdateCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/update/GitUpdateCommandTckTest.java
Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitUpdateCommandTckTest
+public abstract class GitUpdateCommandTckTest
     extends UpdateCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/src/site/apt/git.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/apt/git.apt?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/src/site/apt/git.apt (original)
+++ maven/scm/trunk/src/site/apt/git.apt Thu Oct  8 12:39:23 2009
@@ -36,7 +36,7 @@
 
 * SCM Url
 
-    For all URLs below, we use a colon (:) as separator. If you use a colon for one of the
variables (e.g. a windows path), then use a pipe (|) as separator.
+    For all URLs below, we use a colon (:) as separator. If you use a colon for one of the
variables (e.g. a windows path), then use a pipe (|) as separator. The separator for the port
has to be a colon in any case since this part is specified in the git URL specification. See
man git-fetch.
 
 -------
 scm:git:git://server_name[:port]/path_to_repository
@@ -46,7 +46,7 @@
 scm:git:file://[hostname]/path_to_repository
 -------
 
-* Examples
+ * Examples
 
 -------
 scm:git:git://github.com/path_to_repository
@@ -56,6 +56,27 @@
 scm:git:file://localhost/path_to_repository
 -------
 
+* Different Fetch and Push URLs
+
+  In some cases a different URL has to be used for read and write operations. This can happen
if e.g. fetch is performed via the http protocol, but writing to the repository is only possible
via ssh. In this case both URLs may be written into the &lt;developerConnection&gt; tag. The
fetch URL has to be prefixed with &lt;&lt;&lt;[fetch=]&gt;&gt;&gt; and the push URL with &lt;&lt;&lt;[push=]&gt;&gt;&gt;

+
+ * Example:
+
+-------
+&lt;developerConnection&gt;scm:git:[fetch=]http://mywebserver.org/path_to_repository[push=]ssh://username@otherserver:8898/~/repopath.git&lt;/developerConnection&gt;
+-------
+
+* Working with branches
+
+  Since version 1.3, we assume that the name of the branch in the upstream repo is the same
as the name of the current local branch. So whenever you invoke a maven-scm action which has
to access the upstream repository, e.g. start a release, you should be on that very branch.

+
+  In other words: If no branch is specified manually, every git-fetch, git-pull, git-push,
etc will always work on the branch in the upstream repository which has the same branch name
as your current local branch
+
+-------
+git push pushUrl currentBranch:currentBranch
+-------
+
+
 * Provider Configuration
 
   The provider configuration is defined in ${user.home}/.scm/git-settings.xml.




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r823147 [1/2] - in /maven/scm/trunk: maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/ maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/ maven-scm-p...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200910.mbox/%3c20091008123925.8E20823888CF@eris.apache.org%3e"/>
<id>urn:uuid:%3c20091008123925-8E20823888CF@eris-apache-org%3e</id>
<updated>2009-10-08T12:39:24Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Thu Oct  8 12:39:23 2009
New Revision: 823147

URL: http://svn.apache.org/viewvc?rev=823147&amp;view=rev
Log:
[SCM-488] fail to release if not on a remote HEAD
This was mainly caused by a wrong git-pull instead of using git-checkout.
Very similar to SCM-502

[SCM-498] instead of simply using "origin" we will now use fetch and push URLs as specified in the connection URL
* The sanity checks have been removed because they are way too tight.
E.g. it has not been possible to use an URL like httpuser@server.com
because the default protocol is git in this case and not http.
   
* The GitScmProviderRepository#getUrl() has been replaced with 2 functions
getFetchUrl() and getPushURL()
    
* The whole URL parsing algorithm has been fixed and should now be in sync
with the URL format documented in git-fetch.
    
* URL reconstruction now happens at runtime. So any setUser and setPassword
after the creation of the ScmProvider will get used.
    
* a few test cases have been fixed. Additional tests for fetch/push have
been added.
    
* No usage of "origin" as remote shortcut anymore. They all have been
replaced with either getFetchUrl() or getPushUrl() accordingly.

* We now also specify the branch when pushing to the upstream repository or fetching from it.

[SCM-502]  when checking out a tag we must do a git-fetch instead of a git-pull
* This has do be done since the tag may be on another branch as the current
branch. Performing a git-pull failed in some cases witha 'cannot merge'
exception and if not it may have created an invalid merge in your local repository.
Also a tag in git may be on multiple branches. This happens if the branching
happens after the tag got created.
    
* Checking out a tag will now create a 'detached HEAD' as specified by the
git documentation.


Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java   (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitChangeSet.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/list/GitListCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitExeBranchCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitExeDiffCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitExeStatusCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitExeTagCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitExeUpdateCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/branch/GitBranchCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkout/GitCheckOutCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/diff/GitDiffCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/list/GitListCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/status/GitStatusCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/tag/GitTagCommandTckTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/update/GitUpdateCommandTckTest.java
    maven/scm/trunk/src/site/apt/git.apt

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java Thu Oct  8 12:39:23 2009
@@ -129,7 +129,6 @@
         }
 
         return new TfsScmProviderRepository( tfsUrl, username, password, serverPath, workspace );
-
     }
 
     protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java Thu Oct  8 12:39:23 2009
@@ -19,13 +19,6 @@
  * under the License.
  */
 
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-import org.apache.maven.scm.ScmFile;
-import org.apache.maven.scm.ScmFileStatus;
-import org.apache.maven.scm.ScmTagParameters;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 import org.codehaus.plexus.util.cli.Commandline;

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java Thu Oct  8 12:39:23 2009
@@ -86,14 +86,22 @@
     public ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter )
         throws ScmRepositoryException
     {
-        ScmUrlParserResult result = parseScmUrl( scmSpecificUrl );
-
-        if ( result.messages.size() &gt; 0 )
+        try
         {
-            throw new ScmRepositoryException( "The scm url is invalid.", result.messages );
+            ScmUrlParserResult result = parseScmUrl( scmSpecificUrl, delimiter );
+    
+            if ( result.messages.size() &gt; 0 )
+            {
+                throw new ScmRepositoryException( "The scm url is invalid.", result.messages );
+            }
+    
+            return result.repository;
+        }
+        catch ( ScmException e )
+        {
+            // XXX We should allow throwing of SCMException.
+            throw new ScmRepositoryException( "Error creating the scm repository", e );
         }
-
-        return result.repository;
     }
 
     /** {@inheritDoc} */
@@ -122,7 +130,7 @@
         catch ( ScmException e )
         {
             // XXX We should allow throwing of SCMException.
-            throw new ScmRepositoryException( "Error executing info command", e );
+            throw new ScmRepositoryException( "Error creating the scm repository", e );
         }
     }
 
@@ -158,70 +166,12 @@
      * The git-submodule(1) command is available since Git 1.5.3, so modules will
      * be activated in a later stage
      */
-    private ScmUrlParserResult parseScmUrl( String scmSpecificUrl )
+    private ScmUrlParserResult parseScmUrl( String scmSpecificUrl, char delimiter )
+        throws ScmException
     {
         ScmUrlParserResult result = new ScmUrlParserResult();
 
-        String url = scmSpecificUrl;
-
-        // ----------------------------------------------------------------------
-        // Do some sanity checking of the git url
-        // ----------------------------------------------------------------------
-
-        if ( url.startsWith( GitScmProviderRepository.PROTOCOL_FILE ) )
-        {
-            if ( !url.startsWith( GitScmProviderRepository.PROTOCOL_FILE + "://" ) )
-            {
-                result.messages.add( "A git 'file' url must be on the form 'file://[hostname]/'." );
-
-                return result;
-            }
-        }
-        else if ( url.startsWith( GitScmProviderRepository.PROTOCOL_HTTPS ) )
-        {
-            if ( !url.startsWith( GitScmProviderRepository.PROTOCOL_HTTPS + "://" ) )
-            {
-                result.messages.add( "A git 'http' url must be on the form 'https://'." );
-
-                return result;
-            }
-        }
-        else if ( url.startsWith( GitScmProviderRepository.PROTOCOL_HTTP ) )
-        {
-            if ( !url.startsWith( GitScmProviderRepository.PROTOCOL_HTTP + "://" ) )
-            {
-                result.messages.add( "A git 'http' url must be on the form 'http://'." );
-
-                return result;
-            }
-        }
-        else if ( url.startsWith( GitScmProviderRepository.PROTOCOL_SSH ) )
-        {
-            if ( !url.startsWith( GitScmProviderRepository.PROTOCOL_SSH + "://" ) )
-            {
-                result.messages.add( "A git 'ssh' url must be on the form 'ssh://'." );
-
-                return result;
-            }
-        }
-        else if ( url.startsWith( GitScmProviderRepository.PROTOCOL_GIT ) )
-        {
-            if ( ( !url.startsWith( GitScmProviderRepository.PROTOCOL_GIT + "://" ) )
-                &amp;&amp; ( !url.startsWith( GitScmProviderRepository.PROTOCOL_GIT + "@" ) ) )
-            {
-                result.messages.add( "A git 'git' url must be on the form 'git://'." );
-
-                return result;
-            }
-        }
-        else
-        {
-            result.messages.add( url + " url isn't a valid git URL." );
-
-            return result;
-        }
-
-        result.repository = new GitScmProviderRepository( url );
+        result.repository = new GitScmProviderRepository( scmSpecificUrl );
 
         return result;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitChangeSet.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitChangeSet.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitChangeSet.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/GitChangeSet.java Thu Oct  8 12:39:23 2009
@@ -65,6 +65,7 @@
     }
 
     /** {@inheritDoc} */
+    /*X TODO maybe we can drop the whole class?
     public boolean containsFilename( String filename, ScmProviderRepository repository )
     {
         GitScmProviderRepository repo = (GitScmProviderRepository) repository;
@@ -93,4 +94,5 @@
 
         return false;
     }
+    */
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepository.java Thu Oct  8 12:39:23 2009
@@ -19,24 +19,28 @@
  * under the License.
  */
 
+import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
 
 /**
  * @author &lt;a href="mailto:evenisse@apache.org"&gt;Emmanuel Venisse&lt;/a&gt;
+ * @author &lt;a href="mailto:struberg@apache.org"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
 public class GitScmProviderRepository
     extends ScmProviderRepositoryWithHost
 {
-    /** */
-    private String url;
-
-    /**
-     * the protocol to use
-     */
-    private String protocol;
-
+    
+    /** sequence used to delimit the fetch URL */ 
+    public static final String URL_DELIMITER_FETCH = "[fetch=]";
+    
+    /** sequence used to delimit the push URL */ 
+    public static final String URL_DELIMITER_PUSH = "[push=]";
+
+    /** this trails every protocol */
+    public static final String PROTOCOL_SEPARATOR = "://";
+    
     /** use local file as transport*/
     public static final String PROTOCOL_FILE = "file";
 
@@ -56,13 +60,87 @@
      * TODO implement! */
     public static final String PROTOCOL_RSYNC = "rsync";
 
+    /** 
+     * No special protocol specified. Git will either use git://
+     * or ssh:// depending on whether we work locally or over the network 
+     */
+    public static final String PROTOCOL_NONE = "";
+
+    /** this may either 'git' or 'jgit' depending on the underlying implementation being used */
+    private String provider;
+    
+    /** the URL used to fetch from the upstream repository */
+    private RepositoryUrl fetchInfo;
+
+    /** the URL used to push to the upstream repository */
+    private RepositoryUrl pushInfo;
 
     public GitScmProviderRepository( String url )
+        throws ScmException
     {
-        parseUrl( url );
+        if ( url == null )
+        {
+            throw new ScmException( "url must not be null" );
+        }
+        
+        if ( url.startsWith( URL_DELIMITER_FETCH  ) )
+        {
+            String fetch = url.substring( URL_DELIMITER_FETCH.length() );
+
+            int indexPushDelimiter = fetch.indexOf( URL_DELIMITER_PUSH );
+            if ( indexPushDelimiter &gt;= 0 )
+            {
+                String push = fetch.substring( indexPushDelimiter + URL_DELIMITER_PUSH.length() );
+                pushInfo = parseUrl( push );
+                
+                fetch = fetch.substring( 0, indexPushDelimiter );
+            }
+            
+            fetchInfo = parseUrl( fetch );
+
+            if ( pushInfo == null )
+            {
+                pushInfo = fetchInfo;
+            }
+        }
+        else  if ( url.startsWith( URL_DELIMITER_PUSH ) )
+        {
+            String push = url.substring( URL_DELIMITER_PUSH.length() );
+
+            int indexFetchDelimiter = push.indexOf( URL_DELIMITER_FETCH );
+            if ( indexFetchDelimiter &gt;= 0 )
+            {
+                String fetch = push.substring( indexFetchDelimiter + URL_DELIMITER_FETCH.length() );
+                fetchInfo = parseUrl( fetch );
+                
+                push = push.substring( 0, indexFetchDelimiter );
+            }
+            
+            pushInfo = parseUrl( push );
+            
+            if ( fetchInfo == null )
+            {
+                fetchInfo = pushInfo;
+            }
+        }
+        else
+        {
+            fetchInfo = pushInfo = parseUrl( url );
+        }
+        
+        // set the default values for backward compatibility from the push url
+        // because it's more likely that the push URL contains 'better' credentials
+        setUser( pushInfo.getUserName() );
+        setPassword( pushInfo.getPassword() );
+        setHost( pushInfo.getHost() );
+        if ( pushInfo.getPort() != null &amp;&amp; pushInfo.getPort().length() &gt; 0 )
+        {
+            setPort( Integer.parseInt( pushInfo.getPort() ) );
+        }
     }
 
     public GitScmProviderRepository( String url, String user, String password )
+        throws ScmException
     {
         this( url );
 
@@ -71,206 +149,285 @@
         setPassword( password );
     }
 
-    public String getUrl()
+    /** 
+     * @return either 'git' or 'jgit' depending on the underlying implementation being used 
+     */
+    public String getProvider()
     {
-        return url;
+        return provider;
     }
-
-    private void setProtocol( String protocol )
+    
+    public RepositoryUrl getFetchInfo()
     {
-        this.protocol = protocol;
+        return fetchInfo;
     }
-
+    
+    public RepositoryUrl getPushInfo()
+    {
+        return pushInfo;
+    }
+    
+    
     /**
-     * @return the protocol used in this repository (file, http, https, git, ...)
+     * @return the URL used to fetch from the upstream repository 
      */
-    public String getProtocol()
+    public String getFetchUrl()
     {
-        return protocol;
+        return getUrl( fetchInfo );
     }
+   
+    /**
+     * @return the URL used to push to the upstream repository 
+     */
+    public String getPushUrl()
+    {
+        return getUrl( pushInfo );
+    }
+   
 
-    private void parseUrl( String url )
+    /**
+     * Parse the given url string and store all the extracted
+     * information in a {@code RepositoryUrl}
+     * @param url to parse
+     * @return filled with the information from the given URL
+     * @throws ScmException
+     */
+    private RepositoryUrl parseUrl( String url )
+        throws ScmException
     {
-        if ( url.startsWith( PROTOCOL_FILE ) )
+        RepositoryUrl repoUrl = new RepositoryUrl();
+        
+        url = parseProtocol( repoUrl, url );
+        url = parseUserInfo( repoUrl, url );
+        url = parseHostAndPort( repoUrl, url );
+        // the rest of the url must be the path to the repository on the server
+        repoUrl.setPath( url );
+        return repoUrl;
+    }
+        
+    
+     
+    /**
+     * 
+     * @param repoUrl
+     * @return
+     */
+    private String getUrl( RepositoryUrl repoUrl )
+    {
+        StringBuffer urlSb = new StringBuffer( repoUrl.getProtocol() );
+        boolean urlSupportsUserInformation = false;
+
+        if ( PROTOCOL_SSH.equals( repoUrl.getProtocol() )   || 
+             PROTOCOL_RSYNC.equals( repoUrl.getProtocol() ) ||  
+             PROTOCOL_GIT.equals( repoUrl.getProtocol() )   ||
+             PROTOCOL_NONE.equals(  repoUrl.getProtocol() )   )
         {
-            setProtocol( PROTOCOL_FILE );
+            urlSupportsUserInformation = true;
         }
-        else if ( url.startsWith( PROTOCOL_HTTPS ) )
+
+        if ( repoUrl.getProtocol() != null &amp;&amp; repoUrl.getProtocol().length() &gt; 0 )
         {
-            setProtocol( PROTOCOL_HTTPS );
+            urlSb.append( "://" );
         }
-        else if ( url.startsWith( PROTOCOL_HTTP ) )
+        
+        // add user information if given and allowed for the protocol
+        if ( urlSupportsUserInformation )
         {
-            setProtocol( PROTOCOL_HTTP );
+            String userName = repoUrl.getUserName();
+            // if specified on the commandline or other configuration, we take this.
+            if ( getUser() != null &amp;&amp; getUser().length() &gt; 0 ) 
+            {
+                userName = getUser();
+            }
+            
+            String password = repoUrl.getPassword();
+            if ( getPassword() != null &amp;&amp; getPassword().length() &gt; 0 )
+            {
+                password = getPassword();
+            }
+            //X TODO passphrase handling is missing!
+            
+            if ( userName != null &amp;&amp; userName.length() &gt; 0 )
+            {
+                urlSb.append( userName );
+    
+                if ( password != null &amp;&amp; password.length() &gt; 0 )
+                {
+                    urlSb.append( ':' ).append( password );
+                }
+    
+                 urlSb.append( '@' );
+            }
         }
-        else if ( url.startsWith( PROTOCOL_SSH ) )
+
+        // add host and port information
+        urlSb.append( repoUrl.getHost() );
+        if ( repoUrl.getPort() != null &amp;&amp; repoUrl.getPort().length() &gt; 0 )
         {
-            setProtocol( PROTOCOL_SSH );
+            urlSb.append( ':' ).append( repoUrl.getPort() );
         }
-        else if ( url.startsWith( PROTOCOL_GIT ) )
+
+        // finaly we add the path to the repo on the host
+        urlSb.append( repoUrl.getPath() );
+        
+        return urlSb.toString();
+    }
+
+    /**
+     * Parse the protocol from the given url and fill it into the given RepositoryUrl.
+     * @param repoUrl
+     * @param url
+     * @return the given url with the protocol parts removed
+     */
+    private String parseProtocol( RepositoryUrl repoUrl, String url )
+        throws ScmException
+    {
+        // extract the protocol
+        if ( url.startsWith( PROTOCOL_FILE + PROTOCOL_SEPARATOR ) )
         {
-            setProtocol( PROTOCOL_GIT );
+            repoUrl.setProtocol( PROTOCOL_FILE );
         }
-        else if ( url.startsWith( PROTOCOL_RSYNC ) )
+        else if ( url.startsWith( PROTOCOL_HTTPS + PROTOCOL_SEPARATOR ) )
         {
-            setProtocol( PROTOCOL_RSYNC );
+            repoUrl.setProtocol( PROTOCOL_HTTPS );
         }
-
-        if ( getProtocol() == null )
+        else if ( url.startsWith( PROTOCOL_HTTP + PROTOCOL_SEPARATOR ) )
         {
-            return;
+            repoUrl.setProtocol( PROTOCOL_HTTP );
         }
-
-        String urlPath = url.substring( getProtocol().length() );
-
-        if ( urlPath.startsWith( "://" ) )
+        else if ( url.startsWith( PROTOCOL_SSH + PROTOCOL_SEPARATOR ) )
         {
-            urlPath = urlPath.substring( 3 );
+            repoUrl.setProtocol( PROTOCOL_SSH );
         }
-        int indexAt = urlPath.indexOf( "@" );
-
-        if ( indexAt &gt; 0 )
+        else if ( url.startsWith( PROTOCOL_GIT + PROTOCOL_SEPARATOR ) )
         {
-            String userPassword = urlPath.substring( 0, indexAt );
-            if ( userPassword.indexOf( ":" ) &lt; 0 )
-            {
-                setUser( userPassword );
-            }
-            else
-            {
-                setUser( userPassword.substring( 0, userPassword.indexOf( ":" ) ) );
-                setPassword( userPassword.substring( userPassword.indexOf( ":" ) + 1 ) );
-            }
+            repoUrl.setProtocol( PROTOCOL_GIT );
+        }
+        else if ( url.startsWith( PROTOCOL_RSYNC + PROTOCOL_SEPARATOR ) )
+        {
+            repoUrl.setProtocol( PROTOCOL_RSYNC );
+        }
+        else
+        {
+            // when no protocol is specified git will pick either ssh:// or git://
+            // depending on whether we work locally or over the network
+            repoUrl.setProtocol( PROTOCOL_NONE );
+            return url;
+        }
+       
+        url = url.substring( repoUrl.getProtocol().length() + 3 );
 
-            urlPath = urlPath.substring( indexAt + 1 );
+        return url;
+    }
 
-            if ( PROTOCOL_SSH.equals( getProtocol() ) )
+    /**
+     * Parse the user information from the given url and fill 
+     * user name and password into the given RepositoryUrl.
+     * @param repoUrl
+     * @param url
+     * @return the given url with the user parts removed
+     */
+    private String parseUserInfo( RepositoryUrl repoUrl, String url )
+        throws ScmException
+    {
+        // extract user information
+        int indexAt = url.indexOf( "@" );
+        if ( indexAt &gt;= 0 )
+        {
+            String userInfo = url.substring( 0, indexAt );
+            int indexPwdSep = userInfo.indexOf( ":" ); 
+            if ( indexPwdSep &lt; 0 )
             {
-                StringBuffer urlSb = new StringBuffer( getProtocol() );
-
-                urlSb.append( "://" );
-
-                if ( getUser() != null )
-                {
-                     urlSb.append( getUser() );
-
-                     if ( getPassword() != null )
-                     {
-                         urlSb.append( ':' ).append( getPassword() );
-                     }
-
-                     urlSb.append( '@' );
-                }
-
-                urlSb.append( urlPath );
-
-                this.url = urlSb.toString();
+                repoUrl.setUserName( userInfo );
             }
             else
             {
-                this.url = getProtocol() + "://" + urlPath;
+                repoUrl.setUserName( userInfo.substring( 0, indexPwdSep ) );
+                repoUrl.setPassword( userInfo.substring( indexPwdSep + 1 ) );
             }
-        }
-        else
-        {
-            this.url = getProtocol() + "://"  + urlPath;
-        }
-
-        if ( !PROTOCOL_FILE.equals( getProtocol() ) )
-        {
-            int indexSlash = urlPath.indexOf( "/" );
 
-            String hostPort = urlPath;
+            url = url.substring( indexAt + 1 );
+        }
+        return url;
+    }
 
-            if ( indexSlash &gt; 0 )
+    /**
+     * Parse server and port from the given url and fill it into the 
+     * given RepositoryUrl.
+     * @param repoUrl
+     * @param url
+     * @return the given url with the server parts removed
+     * @throws ScmException 
+     */
+    private String parseHostAndPort( RepositoryUrl repoUrl, String url ) 
+        throws ScmException
+    {
+        StringBuilder host = new StringBuilder();
+        StringBuilder port = new StringBuilder();
+        
+        int i = 0;
+        boolean isPort = false;
+        
+        while ( i &lt; url.length() )
+        {
+            char c = url.charAt( i );
+            
+            if ( c == ':' )
             {
-                hostPort = urlPath.substring( 0, indexSlash );
+                i++;
+                isPort = true;
+                continue;
             }
 
-            int indexColon = hostPort.indexOf( ":" );
+            if ( c == '/' || c == '\\' || c == '~' )
+            {
+                // if we find a slash (backslash for windows compatibility)
+                // or a home sign (~) then we are finished
+                break;
+            }
 
-            if ( indexColon &gt; 0 )
+            if ( isPort )
             {
-                boolean sshGitDev = false;
-                // url = scm:git:git@github.com:22:olamy/scm-git-test-one-module.git
-                if ( hostPort.startsWith( "@" ) )
+                if ( ! Character.isDigit( c ) )
                 {
-                    setHost( hostPort.substring( 1, indexColon ) );
+                    // this seems not to be a port, so it must be the start of the the path block   
+                    i--; // because the ':' seems to belong to the path in this case
+                    break;
                 }
                 else
                 {
-                    setHost( hostPort.substring( 0, indexColon ) );
+                    port.append( c );
+                    i++;
+                    continue;
                 }
-                String port = hostPort.substring( indexColon + 1 );
-
-                if ( port.indexOf( ":" ) &gt; 0 )
-                {
-                    port = port.substring( 0, port.indexOf( ":" ) );
-                    sshGitDev = true;
-                }
-                
-                // url = scm:git:git@github.com:olamy/scm-git-test-one-module.git -&gt; Nan
-                try
-                {
-                    setPort( Integer.parseInt( port ) );
-                }
-                catch ( NumberFormatException e )
-                {
-                    if ( !PROTOCOL_GIT.equals( getProtocol() ) )
-                    {
-                        throw e;
-                    }
-                    sshGitDev = true;
-                }
-                if (sshGitDev)
-                {
-                    this.url = "git" + urlPath;
-                }
-            }
-            else
-            {
-                setHost( hostPort );
             }
 
+            // otherwise this must still be part of the host
+            host.append( c );
+            i++;
         }
-    }
 
-    /** {@inheritDoc} */
-    public ScmProviderRepository getParent()
-    {
-        String newUrl = getUrl().substring( getProtocol().length() );
-
-        while ( newUrl.endsWith( "/." ) )
-        {
-            newUrl = newUrl.substring( 0, newUrl.length() - 1 );
-        }
-
-        while ( newUrl.endsWith( "/" ) )
-        {
-            newUrl = newUrl.substring( 0, newUrl.length() );
-        }
+        repoUrl.setHost( host.toString() );
+        repoUrl.setPort( port.toString() );
 
-        int i = newUrl.lastIndexOf( "/" );
+        url = url.substring( i );
 
-        if ( i &lt; 0 )
-        {
-            return null;
-        }
-        newUrl = newUrl.substring( 0, i );
-
-        return new GitScmProviderRepository( getProtocol() + newUrl, getUser(), getPassword() );
+        return url;
     }
 
+
     /** {@inheritDoc} */
     public String getRelativePath( ScmProviderRepository ancestor )
     {
         if ( ancestor instanceof GitScmProviderRepository )
         {
             GitScmProviderRepository gitAncestor = (GitScmProviderRepository) ancestor;
+            
+            //X TODO review!
+            String url = getFetchUrl();
+            String path = url.replaceFirst( gitAncestor.getFetchUrl() + "/", "" );
 
-            String path = getUrl().replaceFirst( gitAncestor.getUrl() + "/", "" );
-
-            if ( !path.equals( getUrl() ) )
+            if ( !path.equals( url ) )
             {
                 return path;
             }
@@ -281,7 +438,13 @@
     /** {@inheritDoc} */
     public String toString()
     {
-        return getUrl();
+        // yes we really like to check if those are the exact same instance!
+        if ( fetchInfo == pushInfo )
+        {
+            return getUrl( fetchInfo ); 
+        }
+        return URL_DELIMITER_FETCH + getUrl( fetchInfo ) + 
+               URL_DELIMITER_PUSH + getUrl( pushInfo );
     }
 
 }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java?rev=823147&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java Thu Oct  8 12:39:23 2009
@@ -0,0 +1,112 @@
+package org.apache.maven.scm.provider.git.repository;
+
+/*
+ * 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.
+ */
+
+/**
+ * This class is a container which holds information about 
+ * repository URL. 
+ * @author &lt;a href="mailto:struberg@apache.org"&gt;Mark Struberg&lt;/a&gt;
+ * @version $Id$
+ * @since 1.3
+ */
+public class RepositoryUrl {
+
+
+    /** the protocol used to access the upstream repository */
+    private String protocol;
+    
+    /** the server to access the upstream repository */
+    private String host;
+    
+    /** the port to access the upstream repository */
+    private String port;
+    
+    /** the path on the server to access the upstream repository */
+    private String path;
+    
+    /** the user name from the repository URL */
+    private String userName;
+    
+    /** the password from the repository URL */
+    private String password;
+    
+    public String getProtocol() 
+    {
+        return protocol;
+    }
+
+    public void setProtocol( String protocol ) 
+    {
+        this.protocol = protocol;
+    }
+
+    public String getHost()
+    {
+        return host;
+    }
+
+    public void setHost( String host )
+    {
+        this.host = host;
+    }
+
+    public String getPort()
+    {
+        return port;
+    }
+
+    public void setPort( String port )
+    {
+        this.port = port;
+    }
+
+    public String getPath()
+    {
+        return path;
+    }
+
+    public void setPath( String path )
+    {
+        this.path = path;
+    }
+
+    public String getUserName()
+    {
+        return userName;
+    }
+
+    public void setUserName( String userName )
+    {
+        this.userName = userName;
+    }
+
+    public String getPassword()
+    {
+        return password;
+    }
+
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    
+    
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/repository/RepositoryUrl.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/test/java/org/apache/maven/scm/provider/git/repository/GitScmProviderRepositoryTest.java Thu Oct  8 12:39:23 2009
@@ -48,112 +48,108 @@
     public void testLegalFileURL()
         throws Exception
     {
-        testUrl( "scm:git:file:///tmp/repo", "file:///tmp/repo", null, null, null );
+        testUrl( "scm:git:file:///tmp/repo", null, "file:///tmp/repo", null, null, null, null, 0 );
+    }
+
+    public void testLegalFileHomeURL()
+    throws Exception
+    {
+        testUrl( "scm:git:file://~/repo", null, "file://~/repo", null, null, null, null, 0 );
+    }
+
+    public void testLegalSshHomeURL()
+    throws Exception
+    {
+        testUrl( "scm:git:ssh://~/repo", null, "ssh://~/repo", null, null, null, null, 0 );
     }
 
     public void testLegalLocalhostFileURL()
         throws Exception
     {
-        testUrl( "scm:git:file://localhost/tmp/repo", "file://localhost/tmp/repo", null, null, null );
+        testUrl( "scm:git:file://localhost/tmp/repo", null, "file://localhost/tmp/repo", null, null, null, "localhost", 0 );
     }
 
     public void testLegalHistnameFileURL()
         throws Exception
     {
-        testUrl( "scm:git:file://my_server/tmp/repo", "file://my_server/tmp/repo", null, null, null );
+        testUrl( "scm:git:file://my_server/tmp/repo", null, "file://my_server/tmp/repo", null, null, null, "my_server", 0 );
     }
 
     public void testLegalHttpURL()
         throws Exception
     {
-        testUrl( "scm:git:http://gitrepos.apache.org", "http://gitrepos.apache.org", null, null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:http://gitrepos.apache.org", null, "http://gitrepos.apache.org", null, null,
+                 null, "gitrepos.apache.org", 0 );
     }
 
     public void testLegalHttpURLWithUser()
         throws Exception
     {
-        testUrl( "scm:git:http://user@gitrepos.apache.org", "http://gitrepos.apache.org", "user", null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:http://user@gitrepos.apache.org", null, "http://gitrepos.apache.org", null, "user",
+                 null, "gitrepos.apache.org", 0 );
     }
 
     public void testLegalHttpURLWithUserPassword()
         throws Exception
     {
-        testUrl( "scm:git:http://user:password@gitrepos.apache.org", "http://gitrepos.apache.org", "user",
-                 "password", "gitrepos.apache.org" );
+        testUrl( "scm:git:http://user:password@gitrepos.apache.org", null, "http://gitrepos.apache.org", null,
+                 "user", "password", "gitrepos.apache.org", 0 );
     }
 
     public void testLegalHttpsURL()
         throws Exception
     {
-        testUrl( "scm:git:https://gitrepos.apache.org", "https://gitrepos.apache.org", null, null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:https://gitrepos.apache.org", null, "https://gitrepos.apache.org", null, null,
+                 null, "gitrepos.apache.org", 0 );
     }
 
     public void testLegalHttpsURLWithUser()
         throws Exception
     {
-        testUrl( "scm:git:https://user@gitrepos.apache.org", "https://gitrepos.apache.org", "user", null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:https://user@gitrepos.apache.org", null, "https://gitrepos.apache.org", null, "user",
+                 null, "gitrepos.apache.org", 0 );
     }
         
     public void testLegalHttpsURLWithUserPassword()
         throws Exception
     {
-        testUrl( "scm:git:https://user:password@gitrepos.apache.org", "https://gitrepos.apache.org", "user",
-                 "password", "gitrepos.apache.org" );
+        testUrl( "scm:git:https://user:password@gitrepos.apache.org", null, "https://gitrepos.apache.org", null,
+                 "user", "password", "gitrepos.apache.org", 0 );
     }
 
     public void testLegalSshURLWithUser()
     throws Exception
     {
-        testUrl( "scm:git:ssh://user@gitrepos.apache.org", "ssh://user@gitrepos.apache.org", "user", null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:ssh://user@gitrepos.apache.org", null, "ssh://user@gitrepos.apache.org", null, "user",
+                 null, "gitrepos.apache.org", 0 );
     }
 
     public void testLegalSshURLWithUserPassword()
     throws Exception
     {
-        testUrl( "scm:git:ssh://user:password@gitrepos.apache.org", "ssh://user:password@gitrepos.apache.org", "user",
-                 "password", "gitrepos.apache.org" );
+        testUrl( "scm:git:ssh://user:password@gitrepos.apache.org", null, "ssh://user:password@gitrepos.apache.org",  
+                 null, "user", "password", "gitrepos.apache.org", 0 );
     }
     
     public void testLegalGitURL()
         throws Exception
     {
-        testUrl( "scm:git:git://gitrepos.apache.org", "git://gitrepos.apache.org", null, null,
-                 "gitrepos.apache.org" );
+        testUrl( "scm:git:git://gitrepos.apache.org", null, "git://gitrepos.apache.org", null, null,
+                 null, "gitrepos.apache.org", 0 );
     }
     
     public void testGitDevURL()
         throws Exception, ScmRepositoryException
     {
-        try
-        {
-            testUrl( "scm:git:git@github.com:olamy/scm-git-test-one-module.git",
-                     "git@github.com:olamy/scm-git-test-one-module.git", null, null, "github.com" );
-        }
-        catch ( ScmRepositoryException e )
-        {
-            fail( e.getValidationMessages().toString() );
-            throw new Exception( e.getMessage(), e );
-        }
+        testUrl( "scm:git:git@github.com:olamy/scm-git-test-one-module.git",
+                 null, "git@github.com:olamy/scm-git-test-one-module.git", null, "git" , null, "github.com", 0 );
     }
 
     public void testGitDevURLWIthPort()
         throws Exception, ScmRepositoryException
     {
-        try
-        {
-            testUrl( "scm:git:git@github.com:222:olamy/scm-git-test-one-module.git",
-                     "git@github.com:222:olamy/scm-git-test-one-module.git", null, "github.com", 222 );
-        }
-        catch ( ScmRepositoryException e )
-        {
-            fail( e.getValidationMessages().toString() );
-            throw new Exception( e.getMessage(), e );
-        }
+        testUrl( "scm:git:git@github.com:222:olamy/scm-git-test-one-module.git",
+                 null, "git@github.com:222:olamy/scm-git-test-one-module.git", null, "git", null, "github.com", 222 );
     }     
 
     
@@ -162,27 +158,51 @@
         throws Exception
     {
         testUrl( "scm:git:http://username@gitrepos.apache.org:8800/pmgt/trunk",
-                 "http://gitrepos.apache.org:8800/pmgt/trunk", "username", "gitrepos.apache.org", 8800 );
+                 null, "http://gitrepos.apache.org:8800/pmgt/trunk", 
+                 null, "username", null, "gitrepos.apache.org", 8800 );
 
         testUrl( "scm:git:https://username@gitrepos.apache.org:20443/pmgt/trunk",
-                 "https://gitrepos.apache.org:20443/pmgt/trunk", "username", "gitrepos.apache.org", 8080 );
+                 null, "https://gitrepos.apache.org:20443/pmgt/trunk", 
+                 null, "username", null, "gitrepos.apache.org", 20443 );
         
         testUrl( "scm:git:git://username@gitrepos.apache.org:8800/pmgt/trunk",
-                 "git://gitrepos.apache.org:8800/pmgt/trunk", "username", "gitrepos.apache.org", 8800 );
+                 null, "git://username@gitrepos.apache.org:8800/pmgt/trunk", 
+                 null, "username", null, "gitrepos.apache.org", 8800 );
         
         testUrl( "scm:git:ssh://username@gitrepos.apache.org:8080/pmgt/trunk",
-                 "ssh://username@gitrepos.apache.org:8080/pmgt/trunk", "username", "gitrepos.apache.org", 8080 );
+                 null, "ssh://username@gitrepos.apache.org:8080/pmgt/trunk", 
+                 null, "username", null, "gitrepos.apache.org", 8080 );
 
         testUrl( "scm:git:ssh://username:password@gitrepos.apache.org/pmgt/trunk",
-                 "ssh://username:password@gitrepos.apache.org/pmgt/trunk", 
-                 "username", "password", "gitrepos.apache.org" );
+                 null, "ssh://username:password@gitrepos.apache.org/pmgt/trunk", 
+                 null, "username", "password", "gitrepos.apache.org", 0 );
     }
 
     // ----------------------------------------------------------------------
+    // the following tests are for combined fetch + push URLs
+    // ----------------------------------------------------------------------
+
+    public void testHttpFetchSshPushUrl()
+        throws Exception
+    {
+        testUrl( "scm:git:[fetch=]http://git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git", 
+                 "[fetch=]http://git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git", 
+                 "http://git.apache.org/myprj.git", 
+                 "ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git", "myuser", "mypassword", "git.apache.org", 0 );
+
+        testUrl( "scm:git:[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git[fetch=]http://git.apache.org/myprj.git", 
+                 "[fetch=]http://git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git", 
+                 "http://git.apache.org/myprj.git", 
+                 "ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git", "myuser", "mypassword", "git.apache.org", 0 );
+    }
+    
+    // ----------------------------------------------------------------------
     // Testing illegal URLs
     // ----------------------------------------------------------------------
 
-    public void testIllegalFileUrl()
+    //X in fact this url is perfectly valid from a technical perspective
+    //X it will be interpreted by git as git://file/tmp/git
+    public void nottestIllegalFileUrl()
         throws Exception
     {
         testIllegalUrl( "file:/tmp/git" );
@@ -192,8 +212,10 @@
     //
     // ----------------------------------------------------------------------
 
-    private GitScmProviderRepository testUrl( String scmUrl, String expectedUrl, String expectedUser,
-                                              String expectedPassword, String expectedHost )
+    private GitScmProviderRepository testUrl( String scmUrl, String expectedToString, 
+                                              String expectedFetchUrl, String expectedPushUrl,
+                                              String expectedUser, String expectedPassword, 
+                                              String expectedHost, int expectedPort )
         throws Exception, ScmRepositoryException
     {
         ScmRepository repository = scmManager.makeScmRepository( scmUrl );
@@ -207,26 +229,36 @@
 
         GitScmProviderRepository providerRepository = (GitScmProviderRepository) repository.getProviderRepository();
 
-        assertEquals( "url is incorrect", expectedUrl, providerRepository.getUrl() );
+        assertEquals( "fetch url is incorrect", expectedFetchUrl, providerRepository.getFetchUrl() );
+        
+        if ( expectedPushUrl != null )
+        {
+            assertEquals( "push url is incorrect", expectedPushUrl, providerRepository.getPushUrl() );
+        }
 
-        assertEquals( "url string is incorrect", "git:" + expectedUrl, repository.toString() );
+        if ( expectedToString != null )
+        {
+            assertEquals( "toString is incorrect", "git:" + expectedToString, repository.toString() );
+        }
+        else
+        {
+            assertEquals( "toString is incorrect", "git:" + expectedFetchUrl, repository.toString() );
+        }
 
         assertEquals( "User is incorrect", expectedUser, providerRepository.getUser() );
 
         assertEquals( "Password is incorrect", expectedPassword, providerRepository.getPassword() );
 
-        assertEquals( "Host is incorrect", expectedHost, providerRepository.getHost() );
+        assertEquals( "Host is incorrect", expectedHost == null ? "" : expectedHost, providerRepository.getHost() );
+        
+        if ( expectedPort &gt; 0 )
+        {
+            assertEquals( "Port is incorrect", expectedPort, providerRepository.getPort() );
+        }
 
         return providerRepository;
     }
 
-    private void testUrl( String scmUrl, String expectedUrl, String expectedUser, String expectedHost,
-                          int expectedPort )
-        throws Exception
-    {
-        testUrl( scmUrl, expectedUrl, expectedUser, null, expectedHost );
-    }
-
     private void testIllegalUrl( String url )
         throws Exception
     {
@@ -242,7 +274,7 @@
         }
     }
 
-    public void testGetParent()
+    public void testGetParent() throws Exception
     {
         new GitScmProviderRepository( "http://gitrepos.apache.org" );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitBranchCommand.java Thu Oct  8 12:39:23 2009
@@ -25,6 +25,7 @@
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.command.branch.AbstractBranchCommand;
 import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
 import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
@@ -117,10 +118,32 @@
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push" );
 
-        cl.createArg().setValue( "origin" );
+        cl.createArg().setValue( repository.getPushUrl() );
         cl.createArg().setValue( branch );
 
         return cl;
     }
 
+    /**
+     * Helper function to detect the current branch 
+     */
+    public static String getCurrentBranch( ScmLogger logger, GitScmProviderRepository repository, ScmFileSet fileSet )
+        throws ScmException
+    {
+        Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "symbolic-ref" );
+        cl.createArg().setValue( "HEAD" );
+
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+        GitCurrentBranchConsumer cbConsumer = new GitCurrentBranchConsumer( logger );
+        int exitCode;
+
+        exitCode = GitCommandLineUtils.execute( cl, cbConsumer, stderr, logger );
+
+        if ( exitCode != 0 )
+        {
+            throw new ScmException( "Detecting the current branch failed: " + stderr.getOutput() );
+        }
+     
+        return cbConsumer.getBranchName();
+    }
 }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java?rev=823147&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java Thu Oct  8 12:39:23 2009
@@ -0,0 +1,67 @@
+package org.apache.maven.scm.provider.git.gitexe.command.branch;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.util.AbstractConsumer;
+
+/**
+ * This logger parses the output of &lt;i&gt;git symbolic-ref HEAD&lt;/i&gt;
+ * to determine the current branch.
+ * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
+ * @version $Id$
+ */
+public class GitCurrentBranchConsumer
+    extends AbstractConsumer
+{
+    
+    private final static String BRANCH_INDICATOR = "refs/heads/";
+    
+    private String branch;
+    
+    /**
+     * Default constructor.
+     */
+    public GitCurrentBranchConsumer( ScmLogger logger )
+    {
+        super( logger );
+    }
+
+    public String getBranchName()
+    {
+        return branch;
+    }
+
+    // ----------------------------------------------------------------------
+    // StreamConsumer Implementation
+    // ----------------------------------------------------------------------
+
+    /** {@inheritDoc} */
+    public void consumeLine( String line )
+    {
+        line = line.trim();
+        
+        if ( line.startsWith( BRANCH_INDICATOR ) )
+        {
+            branch = line.substring( BRANCH_INDICATOR.length() );
+        }
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitCurrentBranchConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java Thu Oct  8 12:39:23 2009
@@ -26,12 +26,14 @@
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.git.command.GitCommand;
 import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
 import org.apache.maven.scm.provider.git.util.GitUtil;
 import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
 import org.apache.maven.scm.provider.git.gitexe.command.add.GitAddCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusCommand;
 import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusConsumer;
 import org.codehaus.plexus.util.FileUtils;
@@ -120,7 +122,7 @@
                                              false );
             }
 
-            Commandline cl = createPushCommandLine( repository, fileSet, version );
+            Commandline cl = createPushCommandLine( getLogger(), repository, fileSet, version );
 
             exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
             if ( exitCode != 0 )
@@ -174,13 +176,22 @@
     //
     // ----------------------------------------------------------------------
 
-    public static Commandline createPushCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet,
-                                                     ScmVersion version )
+    public static Commandline createPushCommandLine( ScmLogger logger, GitScmProviderRepository repository,
+                                                     ScmFileSet fileSet, ScmVersion version )
         throws ScmException
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push" );
 
-        //X TODO handle version
+        String branch = GitBranchCommand.getCurrentBranch( logger, repository, fileSet );
+        
+        if ( branch == null || branch.length() == 0)
+        {
+            throw new ScmException( "Could not detect the current branch. Don't know where I should push to!" );
+        }
+        
+        cl.createArg().setValue( repository.getPushUrl() );
+        
+        cl.createArg().setValue( branch + ":" + branch );
 
         return cl;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java Thu Oct  8 12:39:23 2009
@@ -60,8 +60,8 @@
     {
         GitScmProviderRepository repository = (GitScmProviderRepository) repo;
 
-        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getProtocol() )
-            &amp;&amp; repository.getUrl().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
+        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getFetchInfo().getProtocol() )
+            &amp;&amp; repository.getFetchInfo().getPath().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
         {
             throw new ScmException( "remote repository must not be the working directory" );
         }
@@ -151,7 +151,7 @@
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory.getParentFile(), "clone" );
 
-        cl.createArg().setValue( repository.getUrl() );
+        cl.createArg().setValue( repository.getFetchUrl() );
 
         cl.createArg().setFile( workingDirectory );
 
@@ -164,24 +164,35 @@
     private Commandline createPullCommand( GitScmProviderRepository repository, File workingDirectory,
                                            ScmVersion version )
     {
-        Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
-
-        cl.createArg().setValue( repository.getUrl() );
+        Commandline cl;
 
         if ( version != null &amp;&amp; StringUtils.isNotEmpty( version.getName() ) )
         {
             if ( version instanceof ScmTag )
             {
-                cl.createArg().setValue( "tag" );
-                cl.createArg().setValue( version.getName() );
+                // A tag will not be pulled but we only fetch all the commits from the upstream repo
+                // This is done because checking out a tag might not happen on the current branch
+                // but create a 'detached HEAD'.
+                // In fact, a tag in git may be in multiple branches. This occurs if 
+                // you create a branch after the tag has been created 
+                cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "fetch" );
+
+                cl.createArg().setValue( repository.getFetchUrl() );
             }
             else
             {
+                cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
+
+                cl.createArg().setValue( repository.getFetchUrl() );
+
                 cl.createArg().setValue( version.getName() + ":" + version.getName() );
             }
         }
         else
         {
+            cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
+
+            cl.createArg().setValue( repository.getFetchUrl() );
             cl.createArg().setValue( "master" );
         }
         return cl;

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/list/GitListCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/list/GitListCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/list/GitListCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/list/GitListCommand.java Thu Oct  8 12:39:23 2009
@@ -49,8 +49,8 @@
     {
         GitScmProviderRepository repository = (GitScmProviderRepository) repo;
 
-        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getProtocol() )
-            &amp;&amp; repository.getUrl().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
+        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getFetchInfo().getProtocol() )
+            &amp;&amp; repository.getFetchInfo().getPath().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
         {
             throw new ScmException( "remote repository must not be the working directory" );
         }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java Thu Oct  8 12:39:23 2009
@@ -159,7 +159,7 @@
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push" );
 
-        cl.createArg().setValue( "origin" );
+        cl.createArg().setValue( repository.getPushUrl() );
         cl.createArg().setValue( tag );
 
         return cl;

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommand.java Thu Oct  8 12:39:23 2009
@@ -53,8 +53,8 @@
     {
         GitScmProviderRepository repository = (GitScmProviderRepository) repo;
 
-        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getProtocol() )
-            &amp;&amp; repository.getUrl().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
+        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getFetchInfo().getProtocol() )
+            &amp;&amp; repository.getFetchInfo().getPath().indexOf( fileSet.getBasedir().getPath() ) &gt;= 0 )
         {
             throw new ScmException( "remote repository must not be the working directory" );
         }
@@ -111,7 +111,7 @@
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
         
-        cl.createArg().setLine( "origin" );
+        cl.createArg().setLine( repository.getFetchUrl() );
 
         // now set the branch where we would like to pull from
         if ( scmVersion instanceof ScmBranch )

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitExeBranchCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitExeBranchCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitExeBranchCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/branch/GitExeBranchCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.branch.GitBranchCommandTckTest;
 
 /**
@@ -27,4 +28,11 @@
 public class GitExeBranchCommandTckTest
     extends GitBranchCommandTckTest
 {
+    /** {@inheritDoc} */
+    public String getScmUrl()
+        throws Exception
+    {
+        return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+    }
+
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -1,5 +1,6 @@
 package org.apache.maven.scm.provider.git.gitexe.command.changelog;
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.changelog.GitChangeLogCommandTckTest;
 
 /*
@@ -27,5 +28,10 @@
 public class GitExeChangeLogCommandTckTest
     extends GitChangeLogCommandTckTest
 {
-    // no-op
+    /** {@inheritDoc} */
+    public String getScmUrl()
+        throws Exception
+    {
+        return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+    }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.checkin.GitCheckInCommandTckTest;
 
 /**
@@ -28,4 +29,10 @@
 public class GitExeCheckInCommandTckTest
     extends GitCheckInCommandTckTest
 {
+        /** {@inheritDoc} */
+        public String getScmUrl()
+            throws Exception
+        {
+            return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+        }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitExeDiffCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitExeDiffCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitExeDiffCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/diff/GitExeDiffCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.diff.GitDiffCommandTckTest;
 
 /**
@@ -27,4 +28,10 @@
 public class GitExeDiffCommandTckTest
     extends GitDiffCommandTckTest
 {
+        /** {@inheritDoc} */
+        public String getScmUrl()
+            throws Exception
+        {
+            return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+        }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitExeStatusCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitExeStatusCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitExeStatusCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/status/GitExeStatusCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.status.GitStatusCommandTckTest;
 
 /**
@@ -28,4 +29,10 @@
 public class GitExeStatusCommandTckTest
     extends GitStatusCommandTckTest
 {
+        /** {@inheritDoc} */
+        public String getScmUrl()
+            throws Exception
+        {
+            return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+        }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitExeTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitExeTagCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitExeTagCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitExeTagCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.tag.GitTagCommandTckTest;
 
 /**
@@ -30,4 +31,10 @@
 public class GitExeTagCommandTckTest
     extends GitTagCommandTckTest
 {
+        /** {@inheritDoc} */
+        public String getScmUrl()
+            throws Exception
+        {
+            return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+        }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitExeUpdateCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitExeUpdateCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitExeUpdateCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitExeUpdateCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.maven.scm.provider.git.GitScmTestUtils;
 import org.apache.maven.scm.provider.git.command.update.GitUpdateCommandTckTest;
 
 /**
@@ -28,4 +29,10 @@
 public class GitExeUpdateCommandTckTest
     extends GitUpdateCommandTckTest
 {
+        /** {@inheritDoc} */
+        public String getScmUrl()
+            throws Exception
+        {
+            return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" );
+        }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommandTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/update/GitUpdateCommandTest.java Thu Oct  8 12:39:23 2009
@@ -38,13 +38,13 @@
     public void testCommandLineNoBranch()
         throws Exception
     {
-        testCommandLine( "scm:git:http://foo.com/git", null, "git pull origin master" );
+        testCommandLine( "scm:git:http://foo.com/git", null, "git pull http://foo.com/git master" );
     }
 
     public void testCommandLineWithBranch()
     throws Exception
     {
-        testCommandLine( "scm:git:http://foo.com/git", new ScmBranch( "mybranch" ), "git pull origin mybranch" );
+        testCommandLine( "scm:git:http://foo.com/git", new ScmBranch( "mybranch" ), "git pull http://foo.com/git mybranch" );
     }
 
 

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java Thu Oct  8 12:39:23 2009
@@ -63,12 +63,15 @@
 
         FileUtils.copyDirectoryStructure( src, repository );
 
+        // now let's get rid of all .svn directories in the copied folder
+        deleteAllDirectories( repository, ".svn" );
+
         FileUtils.deleteDirectory( workingDirectory );
 
         Assert.assertTrue( workingDirectory.mkdirs() );
     }
 
-    public static String getScmUrl( File repositoryRootFile )
+    public static String getScmUrl( File repositoryRootFile, String provider )
         throws CommandLineException
     {
         String repositoryRoot = repositoryRootFile.getAbsolutePath();
@@ -101,6 +104,32 @@
             repositoryRoot = "/" + StringUtils.replace( repositoryRoot, "\\", "/" );
         }
 
-        return "scm:git:file://" + repositoryRoot;
+        return "scm:" + provider + ":file://" + repositoryRoot;
+    }
+    
+    
+    public static void deleteAllDirectories( File startDirectory, String pattern ) 
+    throws IOException
+    {
+        if ( startDirectory.isDirectory() ) 
+        {
+            File[] childs = startDirectory.listFiles();
+            for ( int i = 0; i &lt; childs.length; i++ )
+            {
+                File child = childs[ i ];
+                if ( child.isDirectory() )
+                {
+                    if ( child.getName().equals( pattern ) )
+                    {
+                        FileUtils.deleteDirectory( child );
+                    }
+                    else
+                    {
+                        deleteAllDirectories( child, pattern );
+                    }
+                }
+            }
+        }
     }
+
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/branch/GitBranchCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/branch/GitBranchCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/branch/GitBranchCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/branch/GitBranchCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -26,17 +26,10 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitBranchCommandTckTest
+public abstract class GitBranchCommandTckTest
     extends BranchCommandTckTest
 {
     /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
-
-    /** {@inheritDoc} */
     public void initRepo()
         throws Exception
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/changelog/GitChangeLogCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -25,15 +25,9 @@
 /**
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  */
-public class GitChangeLogCommandTckTest
+public abstract class GitChangeLogCommandTckTest
     extends ChangeLogCommandTckTest
 {
-    /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
 
     /** {@inheritDoc} */
     public void initRepo()

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java?rev=823147&amp;r1=823146&amp;r2=823147&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java Thu Oct  8 12:39:23 2009
@@ -26,15 +26,9 @@
  * @author &lt;a href="mailto:struberg@yahoo.de"&gt;Mark Struberg&lt;/a&gt;
  * @version $Id$
  */
-public class GitCheckInCommandTckTest
+public abstract class GitCheckInCommandTckTest
     extends CheckInCommandTckTest
 {
-    /** {@inheritDoc} */
-    public String getScmUrl()
-        throws Exception
-    {
-        return GitScmTestUtils.getScmUrl( getRepositoryRoot() );
-    }
 
     /** {@inheritDoc} */
     public void initRepo()




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r811161 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer: ChangedFileConsumer.java FileListConsumer.java ServerFileListConsumer.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200909.mbox/%3c20090903224456.208DF2388896@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090903224456-208DF2388896@eris-apache-org%3e</id>
<updated>2009-09-03T22:44:55Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu Sep  3 22:44:55 2009
New Revision: 811161

URL: http://svn.apache.org/viewvc?rev=811161&amp;view=rev
Log:
restore 1.4 compatibility.

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java?rev=811161&amp;r1=811160&amp;r2=811161&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
Thu Sep  3 22:44:55 2009
@@ -26,6 +26,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;
 
 public class ChangedFileConsumer
@@ -53,7 +54,7 @@
 
     public void consumeLine( String line )
     {
-        if ( line.contains( ":" ) )
+        if ( line.indexOf( ":" ) &gt;= 0 )
         {
             String[] s = line.split( ":", 2 );
             if ( s.length &gt; 1 )

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java?rev=811161&amp;r1=811160&amp;r2=811161&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
Thu Sep  3 22:44:55 2009
@@ -53,7 +53,7 @@
         {
             currentDir = "";
         }
-        else if ( !currentDir.equals( "" ) &amp;&amp; line.contains( " " ) )
+        else if ( !currentDir.equals( "" ) &amp;&amp; line.indexOf( " " ) &gt;= 0 )
         {
             String filename = line.split( " " )[1];
             files.add( getScmFile( filename ) );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java?rev=811161&amp;r1=811160&amp;r2=811161&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
Thu Sep  3 22:44:55 2009
@@ -21,6 +21,7 @@
 
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
+import org.codehaus.plexus.util.StringUtils;
 
 public class ServerFileListConsumer
     extends FileListConsumer
@@ -29,7 +30,8 @@
     {
         if ( filename.startsWith( "$" ) )
         {
-            filename = filename.replace( "$", "" );
+            filename = StringUtils.replace( filename, "$", "", -1 );
+            //filename = filename.replace( "$", "" );
         }
         String path = currentDir + "/" + filename;
         return new ScmFile( path, ScmFileStatus.UNKNOWN );




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r809106 - in /maven/scm/trunk/src/site: apt/scms-overview.apt apt/tfs.apt site.xml xdoc/matrix.xml</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090829093147.087C323888DC@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090829093147-087C323888DC@eris-apache-org%3e</id>
<updated>2009-08-29T09:31:46Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Sat Aug 29 09:31:45 2009
New Revision: 809106

URL: http://svn.apache.org/viewvc?rev=809106&amp;view=rev
Log:
[SCM-461] add TFS documentation to the maven-scm site

Added:
    maven/scm/trunk/src/site/apt/tfs.apt   (with props)
Modified:
    maven/scm/trunk/src/site/apt/scms-overview.apt
    maven/scm/trunk/src/site/site.xml
    maven/scm/trunk/src/site/xdoc/matrix.xml

Modified: maven/scm/trunk/src/site/apt/scms-overview.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/apt/scms-overview.apt?rev=809106&amp;r1=809105&amp;r2=809106&amp;view=diff
==============================================================================
--- maven/scm/trunk/src/site/apt/scms-overview.apt (original)
+++ maven/scm/trunk/src/site/apt/scms-overview.apt Sat Aug 29 09:31:45 2009
@@ -58,6 +58,8 @@
 
   * {{{vss.html}Visual Source Safe}}
 
+  * {{{tfs.html}Team Foundation Server}}
+
 * Not implemented SCM's
 
     This is a list of all the known SCM's that are not implemented currently.

Added: maven/scm/trunk/src/site/apt/tfs.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/apt/tfs.apt?rev=809106&amp;view=auto
==============================================================================
--- maven/scm/trunk/src/site/apt/tfs.apt (added)
+++ maven/scm/trunk/src/site/apt/tfs.apt Sat Aug 29 09:31:45 2009
@@ -0,0 +1,50 @@
+ ------
+ SCM Implementation: TFS - Team Foundation Server
+ ------
+Mark Struberg
+ ------
+ 2009-08-24
+ ------
+
+~~ 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.
+
+~~ NOTE: For help with the syntax of this file, see:
+~~ http://maven.apache.org/doxia/references/apt-format.html
+
+SCM Implementation: TFS - Team Foundation Server
+
+* General Info
+
+    Link : {{http://www.microsoft.com/germany/visualstudio/products/team-system/}}
+
+    License : Commercial
+
+* SCM Url
+
+    For all URLs below, we use a colon (:) as separator. If you use a colon for one of the
variables (e.g. a windows path), then use a pipe (|) as separator.
+
+-------
+scm:tfs:[[domain\\]username[;password]@]http[s]://server_name[:port]:workspace:$/TeamProject/Path/To/Project
+-------
+
+* Examples
+
+-------
+scm:tfs:https://tfs10.codeplex.com:/maventest/ExampleProject
+-------
+

Propchange: maven/scm/trunk/src/site/apt/tfs.apt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/src/site/apt/tfs.apt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/site.xml?rev=809106&amp;r1=809105&amp;r2=809106&amp;view=diff
==============================================================================
--- maven/scm/trunk/src/site/site.xml (original)
+++ maven/scm/trunk/src/site/site.xml Sat Aug 29 09:31:45 2009
@@ -49,6 +49,7 @@
         &lt;item name="StarTeam" href="/starteam.html"/&gt;
         &lt;item name="Subversion" href="/subversion.html"/&gt;
         &lt;item name="Visual Source Safe" href="/vss.html"/&gt;
+        &lt;item name="Team Foundation Server" href="/tfs.html"/&gt;
       &lt;/item&gt;
       &lt;item name="Guides" href="/guide/index.html" collapse="true"&gt;
         &lt;item name="How to use Maven-SCM in my application" href="/guide/usage.html"/&gt;

Modified: maven/scm/trunk/src/site/xdoc/matrix.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/xdoc/matrix.xml?rev=809106&amp;r1=809105&amp;r2=809106&amp;view=diff
==============================================================================
--- maven/scm/trunk/src/site/xdoc/matrix.xml (original)
+++ maven/scm/trunk/src/site/xdoc/matrix.xml Sat Aug 29 09:31:45 2009
@@ -458,6 +458,57 @@
             &lt;/td&gt;
           &lt;/tr&gt;
           &lt;tr&gt;
+            &lt;td&gt; Microsoft TFS &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/forbidden.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/check.gif" /&gt;
+            &lt;/td&gt;
+            &lt;td&gt;
+              &lt;img src="./images/error.gif" /&gt;
+            &lt;/td&gt;
+          &lt;/tr&gt;
+          &lt;tr&gt;
             &lt;td&gt; Microsoft VSS &lt;/td&gt;
             &lt;td&gt;
               &lt;img src="./images/check.gif" /&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807382 - /maven/scm/trunk/src/main/</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824211451.5BC5E2388871@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824211451-5BC5E2388871@eris-apache-org%3e</id>
<updated>2009-08-24T21:14:51Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Mon Aug 24 21:14:50 2009
New Revision: 807382

URL: http://svn.apache.org/viewvc?rev=807382&amp;view=rev
Log:
not needed anymore as we upgrade parent version


Removed:
    maven/scm/trunk/src/main/



</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807378 - /maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824210703.7330F2388895@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824210703-7330F2388895@eris-apache-org%3e</id>
<updated>2009-08-24T21:07:03Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Mon Aug 24 21:07:03 2009
New Revision: 807378

URL: http://svn.apache.org/viewvc?rev=807378&amp;view=rev
Log:
align name with other providers

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml?rev=807378&amp;r1=807377&amp;r2=807378&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml Mon Aug 24 21:07:03
2009
@@ -31,7 +31,7 @@
 
   &lt;artifactId&gt;maven-scm-provider-tfs&lt;/artifactId&gt;
 
-  &lt;name&gt;TFS SCM Provider&lt;/name&gt;
+  &lt;name&gt;Maven SCM TFS Provider&lt;/name&gt;
   &lt;url&gt;http://labs.teamprise.com/maven&lt;/url&gt;
 
   &lt;description&gt;A Maven 2 SCM Provider for Microsoft Visual Studio Team Foundation Server.&lt;/description&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807376 - in /maven/scm/trunk: maven-scm-providers/pom.xml pom.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824210150.F29DD23888E7@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824210150-F29DD23888E7@eris-apache-org%3e</id>
<updated>2009-08-24T21:01:50Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Mon Aug 24 21:01:50 2009
New Revision: 807376

URL: http://svn.apache.org/viewvc?rev=807376&amp;view=rev
Log:
upgrade maven-parent reference to take advantage of new source-release configuration.
add tfs provider in reactor


Modified:
    maven/scm/trunk/maven-scm-providers/pom.xml
    maven/scm/trunk/pom.xml

Modified: maven/scm/trunk/maven-scm-providers/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/pom.xml?rev=807376&amp;r1=807375&amp;r2=807376&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/pom.xml Mon Aug 24 21:01:50 2009
@@ -48,6 +48,7 @@
     &lt;module&gt;maven-scm-providers-svn&lt;/module&gt;
     &lt;module&gt;maven-scm-provider-synergy&lt;/module&gt;
     &lt;module&gt;maven-scm-provider-vss&lt;/module&gt;
+    &lt;module&gt;maven-scm-provider-tfs&lt;/module&gt;
   &lt;/modules&gt;
 
   &lt;dependencyManagement&gt;

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=807376&amp;r1=807375&amp;r2=807376&amp;view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Mon Aug 24 21:01:50 2009
@@ -25,7 +25,7 @@
   &lt;parent&gt;
     &lt;groupId&gt;org.apache.maven&lt;/groupId&gt;
     &lt;artifactId&gt;maven-parent&lt;/artifactId&gt;
-    &lt;version&gt;11&lt;/version&gt;
+    &lt;version&gt;13&lt;/version&gt;
     &lt;relativePath&gt;../pom/maven/pom.xml&lt;/relativePath&gt;
   &lt;/parent&gt;
 
@@ -323,33 +323,5 @@
         &lt;/plugins&gt;
       &lt;/reporting&gt;
     &lt;/profile&gt;
-    &lt;profile&gt;
-      &lt;id&gt;release&lt;/id&gt;
-      &lt;build&gt;
-        &lt;plugins&gt;
-          &lt;plugin&gt;
-            &lt;!-- Using this plugin configuration to produce a buildable project source
distro,
-                 per the discussion on members@ASF regarding what constitutes a valid release.
-            --&gt;
-            &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;
-            &lt;executions&gt;
-              &lt;execution&gt;
-                &lt;id&gt;make-project-src-distro&lt;/id&gt;
-                &lt;phase&gt;package&lt;/phase&gt;
-                &lt;goals&gt;
-                  &lt;goal&gt;single&lt;/goal&gt;
-                &lt;/goals&gt;
-                &lt;configuration&gt;
-                  &lt;descriptors&gt;
-                   &lt;descriptor&gt;src/main/assembly/source-release.xml&lt;/descriptor&gt;
-                  &lt;/descriptors&gt;
-                  &lt;tarLongFileMode&gt;gnu&lt;/tarLongFileMode&gt;
-                &lt;/configuration&gt;
-              &lt;/execution&gt;
-            &lt;/executions&gt;
-          &lt;/plugin&gt;
-        &lt;/plugins&gt;
-      &lt;/build&gt;
-    &lt;/profile&gt;    
   &lt;/profiles&gt;
 &lt;/project&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807366 - in /maven/scm/trunk: maven-scm-client/pom.xml maven-scm-providers/maven-scm-providers-standard/pom.xml pom.xml</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824203356.A19C52388891@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824203356-A19C52388891@eris-apache-org%3e</id>
<updated>2009-08-24T20:33:56Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Mon Aug 24 20:33:56 2009
New Revision: 807366

URL: http://svn.apache.org/viewvc?rev=807366&amp;view=rev
Log:
[SCM-461] add maven-scm-provider-tfs to the list of known scm providers

Modified:
    maven/scm/trunk/maven-scm-client/pom.xml
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml
    maven/scm/trunk/pom.xml

Modified: maven/scm/trunk/maven-scm-client/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-client/pom.xml?rev=807366&amp;r1=807365&amp;r2=807366&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-client/pom.xml (original)
+++ maven/scm/trunk/maven-scm-client/pom.xml Mon Aug 24 20:33:56 2009
@@ -92,6 +92,10 @@
       &lt;groupId&gt;org.apache.maven.scm&lt;/groupId&gt;
       &lt;artifactId&gt;maven-scm-provider-vss&lt;/artifactId&gt;
     &lt;/dependency&gt;
+    &lt;dependency&gt;
+      &lt;groupId&gt;org.apache.maven.scm&lt;/groupId&gt;
+      &lt;artifactId&gt;maven-scm-provider-tfs&lt;/artifactId&gt;
+    &lt;/dependency&gt;
     &lt;!-- end providers declaration --&gt;
   &lt;/dependencies&gt;
 

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml?rev=807366&amp;r1=807365&amp;r2=807366&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml Mon Aug 24 20:33:56
2009
@@ -94,5 +94,10 @@
       &lt;artifactId&gt;maven-scm-provider-vss&lt;/artifactId&gt;
       &lt;scope&gt;runtime&lt;/scope&gt;
     &lt;/dependency&gt;
+    &lt;dependency&gt;
+      &lt;groupId&gt;org.apache.maven.scm&lt;/groupId&gt;
+      &lt;artifactId&gt;maven-scm-provider-tfs&lt;/artifactId&gt;
+      &lt;scope&gt;runtime&lt;/scope&gt;
+    &lt;/dependency&gt;
   &lt;/dependencies&gt;
 &lt;/project&gt;

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=807366&amp;r1=807365&amp;r2=807366&amp;view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Mon Aug 24 20:33:56 2009
@@ -199,6 +199,11 @@
         &lt;artifactId&gt;maven-scm-provider-vss&lt;/artifactId&gt;
         &lt;version&gt;1.3-SNAPSHOT&lt;/version&gt;
       &lt;/dependency&gt;
+      &lt;dependency&gt;
+        &lt;groupId&gt;org.apache.maven.scm&lt;/groupId&gt;
+        &lt;artifactId&gt;maven-scm-provider-tfs&lt;/artifactId&gt;
+        &lt;version&gt;1.3-SNAPSHOT&lt;/version&gt;
+      &lt;/dependency&gt;
       &lt;!-- end providers declaration --&gt;
 
       &lt;!-- Plexus --&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807356 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src: main/java/org/apache/maven/scm/provider/tfs/command/ main/java/org/apache/maven/scm/provider/tfs/command/consumer/ test/java/org/apache/maven/scm/provider/tfs/com...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824194919.C7FC723888D4@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824194919-C7FC723888D4@eris-apache-org%3e</id>
<updated>2009-08-24T19:49:18Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Mon Aug 24 19:49:17 2009
New Revision: 807356

URL: http://svn.apache.org/viewvc?rev=807356&amp;view=rev
Log:
[SCM-461] codingstyle and minor issues fixed

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java   (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java Mon Aug 24 19:49:17 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.scm.command.add.AddScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 public class TfsAddCommand
     extends AbstractAddCommand
@@ -35,16 +36,21 @@
         throws ScmException
     {
         TfsCommand command = createCommand( r, f );
+        
         FileListConsumer fileConsumer = new FileListConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+
         int status = command.execute( fileConsumer, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new AddScmResult( command.getCommandline(), "Error code for TFS add command - " + status,
+        {
+            return new AddScmResult( command.getCommandString(), "Error code for TFS add command - " + status,
                                      err.getOutput(), false );
-        return new AddScmResult( command.getCommandline(), fileConsumer.getFiles() );
+        }
+        
+        return new AddScmResult( command.getCommandString(), fileConsumer.getFiles() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
     {
         TfsCommand command = new TfsCommand( "add", r, f, getLogger() );        
         command.addArgument( f );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java Mon Aug 24 19:49:17 2009
@@ -43,13 +43,13 @@
         int status = command.execute( out, err );
         if ( status != 0 || err.hasBeenFed() )
         {
-            return new BranchScmResult( command.getCommandline(), "Error code for TFS branch command - " + status,
+            return new BranchScmResult( command.getCommandString(), "Error code for TFS branch command - " + status,
                                         err.getOutput(), false );
         }
-        return new BranchScmResult( command.getCommandline(), new ArrayList() );
+        return new BranchScmResult( command.getCommandString(), new ArrayList() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String branch )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String branch )
     {
         TfsCommand command = new TfsCommand( "branch", r, f, getLogger() );
         command.addArgument( f.getBasedir().getAbsolutePath() );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java Mon Aug 24 19:49:17 2009
@@ -20,29 +20,19 @@
  */
 
 import java.io.File;
-import java.text.DateFormat;
-import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import org.apache.maven.scm.ChangeFile;
-import org.apache.maven.scm.ChangeSet;
 import org.apache.maven.scm.ScmBranch;
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
 import org.apache.maven.scm.command.changelog.ChangeLogSet;
-import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
-import org.apache.maven.scm.util.AbstractConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.TfsChangeLogConsumer;
 
 public class TfsChangeLogCommand
     extends AbstractChangeLogCommand
@@ -72,11 +62,11 @@
             int status = command.execute( out, err );
 
             if ( status != 0 || ( !out.hasBeenFed() &amp;&amp; err.hasBeenFed() ) )
-                return new ChangeLogScmResult( command.getCommandline(), "Error code for TFS changelog command - "
+                return new ChangeLogScmResult( command.getCommandString(), "Error code for TFS changelog command - "
                     + status, err.getOutput(), false );
             changeLogs.addAll( out.getLogs() );
         }
-        return new ChangeLogScmResult( command.getCommandline(), new ChangeLogSet( changeLogs, startDate, endDate ) );
+        return new ChangeLogScmResult( command.getCommandString(), new ChangeLogSet( changeLogs, startDate, endDate ) );
 
     }
 
@@ -89,171 +79,3 @@
     }
 }
 
-class TfsChangeLogConsumer
-    extends AbstractConsumer
-{
-
-    private static final String PATTERN =
-        "^[^:]*:[ \t]([0-9]*)\n" + "[^:]*:[ \t](.*)\n[^:]*:[ \t](.*)\n"
-            + "[^:]*:((?:\n.*)*)\n\n[^\n :]*:(?=\n  )((?:\n[ \t]+.*)*)";
-
-    private static final String PATTERN_ITEM = "\n  ([^$]+) (\\$/.*)";
-
-    ArrayList logs = new ArrayList();
-
-    String buffer = "";
-
-    boolean fed = false;
-
-    public TfsChangeLogConsumer( ScmLogger logger )
-    {
-        super( logger );
-    }
-
-    public void consumeLine( String line )
-    {
-        fed = true;
-        if ( line.startsWith( "-----" ) )
-        {
-            addChangeLog();
-        }
-        buffer += line + "\n";
-    }
-
-    public List getLogs()
-    {
-        addChangeLog();
-        return logs;
-    }
-
-    private void addChangeLog()
-    {
-        if ( !buffer.equals( "" ) )
-        {
-            Pattern p = Pattern.compile( PATTERN );
-            Matcher m = p.matcher( buffer );
-            if ( m.find() )
-            {
-                String revision = m.group( 1 ).trim();
-                String username = m.group( 2 ).trim();
-                String dateString = m.group( 3 ).trim();
-                String comment = m.group( 4 ).trim();
-                Pattern itemPattern = Pattern.compile( PATTERN_ITEM );
-                Matcher itemMatcher = itemPattern.matcher( m.group( 5 ) );
-                List files = new ArrayList();
-                while ( itemMatcher.find() )
-                {
-                    ChangeFile file = new ChangeFile( itemMatcher.group( 2 ).trim(), revision );
-                    files.add( file );
-                }
-                Date date;
-                try
-                {
-                    date = parseDate( dateString );
-                }
-                catch ( ParseException e )
-                {
-                    getLogger().error( "Date parse error", e );
-                    throw new RuntimeException( e );
-                }
-
-                ChangeSet change = new ChangeSet( date, comment, username, files );
-                logs.add( change );
-            }
-            buffer = "";
-        }
-    }
-
-    public boolean hasBeenFed()
-    {
-        return fed;
-    }
-
-    protected static Date parseDate( String dateString )
-        throws ParseException
-    {
-        Date date = null;
-        try
-        {
-            // Use the depricated Date.parse method as this is very good at
-            // detecting
-            // dates commonly output by the US and UK standard locales of
-            // dotnet that
-            // are output by the Microsoft command line client.
-            date = new Date( Date.parse( dateString ) );
-        }
-        catch ( IllegalArgumentException e )
-        {
-            // ignore - parse failed.
-        }
-        if ( date == null )
-        {
-            // The old fashioned way did not work. Let's try it using a more
-            // complex
-            // alternative.
-            DateFormat[] formats = createDateFormatsForLocaleAndTimeZone( null, null );
-            return parseWithFormats( dateString, formats );
-        }
-        return date;
-    }
-
-    private static Date parseWithFormats( String input, DateFormat[] formats )
-        throws ParseException
-    {
-        ParseException parseException = null;
-        for ( int i = 0; i &lt; formats.length; i++ )
-        {
-            try
-            {
-                return formats[i].parse( input );
-            }
-            catch ( ParseException ex )
-            {
-                parseException = ex;
-            }
-        }
-
-        throw parseException;
-    }
-
-    /**
-     * Build an array of DateFormats that are commonly used for this locale and timezone.
-     */
-    private static DateFormat[] createDateFormatsForLocaleAndTimeZone( Locale locale, TimeZone timeZone )
-    {
-        if ( locale == null )
-        {
-            locale = Locale.getDefault();
-        }
-
-        if ( timeZone == null )
-        {
-            timeZone = TimeZone.getDefault();
-        }
-
-        List formats = new ArrayList();
-
-        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
-        {
-            for ( int timeStyle = DateFormat.FULL; timeStyle &lt;= DateFormat.SHORT; timeStyle++ )
-            {
-                DateFormat df = DateFormat.getDateTimeInstance( dateStyle, timeStyle, locale );
-                if ( timeZone != null )
-                {
-                    df.setTimeZone( timeZone );
-                }
-                formats.add( df );
-            }
-        }
-
-        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
-        {
-            DateFormat df = DateFormat.getDateInstance( dateStyle, locale );
-            df.setTimeZone( timeZone );
-            formats.add( df );
-        }
-
-        return (DateFormat[]) formats.toArray( new DateFormat[formats.size()] );
-    }
-
-}

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java Mon Aug 24 19:49:17 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 public class TfsCheckInCommand
     extends AbstractCheckInCommand
@@ -38,19 +39,24 @@
         TfsCommand command = createCommand( r, f, m );
         FileListConsumer fileConsumer = new FileListConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         int status = command.execute( fileConsumer, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new CheckInScmResult( command.getCommandline(), "Error code for TFS checkin command - " + status,
+        {
+            return new CheckInScmResult( command.getCommandString(), "Error code for TFS checkin command - " + status,
                                          err.getOutput(), false );
-        return new CheckInScmResult( command.getCommandline(), fileConsumer.getFiles() );
+        }
+        return new CheckInScmResult( command.getCommandString(), fileConsumer.getFiles() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String m )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String m )
     {
         TfsCommand command = new TfsCommand( "checkin", r, f, getLogger() );
         command.addArgument( "-noprompt" );
         if ( m != null &amp;&amp; !m.equals( "" ) )
+        {
             command.addArgument( "-comment:" + m + "" );
+        }
         command.addArgument( f );
         return command;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java Mon Aug 24 19:49:17 2009
@@ -19,21 +19,15 @@
  * under the License.
  */
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
-import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 // Usage: mvn scm:checkout -DcheckoutDirectory=&lt;dir&gt;
 public class TfsCheckOutCommand
@@ -52,14 +46,18 @@
         // Try creating workspace
         boolean workspaceProvided = workspace != null &amp;&amp; !workspace.trim().equals( "" );
         if ( workspaceProvided )
+        {
             createWorkspace( r, f, workspace, tfsUrl );
+        }
 
         TfsCommand command;
         int status;
 
         if ( workspaceProvided )
+        {
             status = executeUnmapCommand( r, f );
-
+        }
+        
         ErrorStreamConsumer out = new ErrorStreamConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
         if ( workspaceProvided )
@@ -71,36 +69,51 @@
             command.addArgument( f.getBasedir().getAbsolutePath() );
             status = command.execute( out, err );
             if ( status != 0 || err.hasBeenFed() )
-                return new CheckOutScmResult( command.getCommandline(),
+            {
+                return new CheckOutScmResult( command.getCommandString(),
                                               "Error code for TFS checkout (workfold map) command - " + status,
                                               err.getOutput(), false );
+            }
         }
         FileListConsumer fileConsumer = new FileListConsumer();
         err = new ErrorStreamConsumer();
         command = createGetCommand( r, f, v, recursive );
         status = command.execute( fileConsumer, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new CheckOutScmResult( command.getCommandline(), "Error code for TFS checkout (get) command - "
+        {
+            return new CheckOutScmResult( command.getCommandString(), "Error code for TFS checkout (get) command - "
                 + status, err.getOutput(), false );
-        return new CheckOutScmResult( command.getCommandline(), fileConsumer.getFiles() );
+        }
+        
+        return new CheckOutScmResult( command.getCommandString(), fileConsumer.getFiles() );
     }
 
-    TfsCommand createGetCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v, boolean recursive )
+    public TfsCommand createGetCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v, boolean recursive )
     {
         TfsCommand command = new TfsCommand( "get", r, f, getLogger() );
         if ( recursive )
+        {
             command.addArgument( "-recursive" );
+        }
+        
         command.addArgument( "-force" );
+        
         if ( v != null &amp;&amp; !v.equals( "" ) )
         {
             String vType = "";
             if ( v.getType().equals( "Tag" ) )
+            {
                 vType = "L";
+            }
             if ( v.getType().equals( "Revision" ) )
+            {
                 vType = "C";
+            }
             command.addArgument( "-version:" + vType + v.getName() );
         }
+        
         command.addArgument( f.getBasedir().getAbsolutePath() );
+        
         return command;
     }
 
@@ -112,10 +125,12 @@
         String workspace = tfsRepo.getWorkspace();
         ErrorStreamConsumer out = new ErrorStreamConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         TfsCommand command = new TfsCommand( "workfold", r, null, getLogger() );
         command.addArgument( "-workspace:" + workspace );
         command.addArgument( "-unmap" );
         command.addArgument( url );
+        
         return command.execute( out, err );
     }
 
@@ -130,58 +145,8 @@
         command.addArgument( "-comment:Creating workspace for maven command" );
         command.addArgument( "-server:" + url );
         command.addArgument( workspace );
-        int status = command.execute( out, err );
-    }
-
-}
-
-class FileListConsumer
-    implements StreamConsumer
-{
-
-    boolean fed = false;
-
-    String currentDir = "";
-
-    ArrayList files = new ArrayList();
-
-    public void consumeLine( String line )
-    {
-        fed = true;
-        if ( line.endsWith( ":" ) )
-        {
-            currentDir = line.substring( 0, line.lastIndexOf( ':' ) );
-            ScmFile scmFile = new ScmFile( currentDir, ScmFileStatus.CHECKED_OUT );
-            if ( !files.contains( scmFile ) )
-                files.add( scmFile );
-        }
-        else if ( line.trim().equals( "" ) )
-        {
-            currentDir = "";
-        }
-        else if ( !currentDir.equals( "" ) &amp;&amp; line.contains( " " ) )
-        {
-            String filename = line.split( " " )[1];
-            files.add( getScmFile( filename ) );
-        }
-        else
-        {
-            files.add( getScmFile( line ) );
-        }
+        
+        command.execute( out, err );
     }
 
-    protected ScmFile getScmFile( String filename )
-    {
-        return new ScmFile( new File( currentDir, filename ).getAbsolutePath(), ScmFileStatus.CHECKED_OUT );
-    }
-
-    public List getFiles()
-    {
-        return files;
-    }
-
-    public boolean hasBeenFed()
-    {
-        return fed;
-    }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java Mon Aug 24 19:49:17 2009
@@ -28,6 +28,7 @@
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 import org.codehaus.plexus.util.cli.CommandLineException;
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 import org.codehaus.plexus.util.cli.Commandline;
@@ -39,18 +40,22 @@
 
     private ScmLogger logger;
 
-    Commandline command;
+    private Commandline command;
 
     public TfsCommand( String cmd, ScmProviderRepository r, ScmFileSet f, ScmLogger logger )
     {
         command = new Commandline();
         command.setExecutable( "tf" );
         if ( f != null )
+        {
             command.setWorkingDirectory( f.getBasedir().getAbsolutePath() );
-        command.createArgument().setValue( cmd );
+        }
+        
+        command.createArg().setValue( cmd );
+        
         if ( r.getUser() != null )
         {
-            command.createArgument().setValue( "-login:" + r.getUser() + "," + r.getPassword() );
+            command.createArg().setValue( "-login:" + r.getUser() + "," + r.getPassword() );
         }
         this.logger = logger;
     }
@@ -60,18 +65,20 @@
         info( "files: " + f.getBasedir().getAbsolutePath() );
         Iterator iter = f.getFileList().iterator();
         while ( iter.hasNext() )
-            command.createArgument().setValue( ( (File) iter.next() ).getPath() );
+        {
+            command.createArg().setValue( ( (File) iter.next() ).getPath() );
+        }
     }
 
     public void addArgument( String s )
     {
-        command.createArgument().setValue( s );
+        command.createArg().setValue( s );
     }
 
     public int execute( StreamConsumer out, ErrorStreamConsumer err )
         throws ScmException
     {
-        info( "Command line - " + getCommandline() );
+        info( "Command line - " + getCommandString() );
         int status;
         try
         {
@@ -79,7 +86,7 @@
         }
         catch ( CommandLineException e )
         {
-            throw new ScmException( "Error while executing TFS command line - " + getCommandline(), e );
+            throw new ScmException( "Error while executing TFS command line - " + getCommandString(), e );
         }
         info( "err - " + err.getOutput() );
         if ( out instanceof StringStreamConsumer )
@@ -100,10 +107,14 @@
         return status;
     }
 
-    public String getCommandline()
+    public String getCommandString()
     {
         return command.toString();
     }
+    
+    public Commandline getCommandline() {
+        return command;
+    }
 
     private void info( String message )
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java Mon Aug 24 19:49:17 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.scm.command.edit.EditScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 //Usage: mvn scm:edit -DworkingDirectory=&lt;dir&gt; -Dincludes=*
 public class TfsEditCommand
@@ -37,12 +38,17 @@
     {
         FileListConsumer out = new FileListConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         TfsCommand command = createCommand( r, f );
         int status = command.execute( out, err );
+        
         if ( status != 0 || err.hasBeenFed() )
-            return new EditScmResult( command.getCommandline(), "Error code for TFS edit command - " + status,
+        {
+            return new EditScmResult( command.getCommandString(), "Error code for TFS edit command - " + status,
                                       err.getOutput(), false );
-        return new EditScmResult( command.getCommandline(), out.getFiles() );
+        }
+        
+        return new EditScmResult( command.getCommandString(), out.getFiles() );
     }
 
     protected TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java Mon Aug 24 19:49:17 2009
@@ -20,14 +20,14 @@
  */
 
 import org.apache.maven.scm.ScmException;
-import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.ScmVersion;
 import org.apache.maven.scm.command.list.AbstractListCommand;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.ServerFileListConsumer;
 
 public class TfsListCommand
     extends AbstractListCommand
@@ -38,33 +38,28 @@
     {
         FileListConsumer out = new ServerFileListConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         TfsCommand command = createCommand( r, f, recursive );
         int status = command.execute( out, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new ListScmResult( command.getCommandline(), "Error code for TFS list command - " + status,
+        {
+            return new ListScmResult( command.getCommandString(), "Error code for TFS list command - " + status,
                                       err.getOutput(), false );
-        return new ListScmResult( command.getCommandline(), out.getFiles() );
+        }
+        
+        return new ListScmResult( command.getCommandString(), out.getFiles() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, boolean recursive )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, boolean recursive )
     {
         TfsCommand command = new TfsCommand( "dir", r, f, getLogger() );
         if ( recursive )
+        {
             command.addArgument( "-recursive" );
+        }
         command.addArgument( f );
         return command;
     }
 
 }
 
-class ServerFileListConsumer
-    extends FileListConsumer
-{
-    protected ScmFile getScmFile( String filename )
-    {
-        if ( filename.startsWith( "$" ) )
-            filename = filename.replace( "$", "" );
-        String path = currentDir + "/" + filename;
-        return new ScmFile( path, ScmFileStatus.UNKNOWN );
-    }
-}

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java Mon Aug 24 19:49:17 2009
@@ -19,22 +19,17 @@
  * under the License.
  */
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 
 import org.apache.maven.scm.ScmException;
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileSet;
-import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.command.status.AbstractStatusCommand;
 import org.apache.maven.scm.command.status.StatusScmResult;
-import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ChangedFileConsumer;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
-import org.codehaus.plexus.util.cli.StreamConsumer;
 
 public class TfsStatusCommand
     extends AbstractStatusCommand
@@ -48,10 +43,13 @@
         TfsCommand command = createCommand( tfsRepo, f );
         ChangedFileConsumer out = new ChangedFileConsumer( getLogger() );
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         int status = command.execute( out, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new StatusScmResult( command.getCommandline(), "Error code for TFS status command - " + status,
+        {
+            return new StatusScmResult( command.getCommandString(), "Error code for TFS status command - " + status,
                                         err.getOutput(), false );
+        }
         Iterator iter = out.getChangedFiles().iterator();
         getLogger().debug( "Iterating" );
         while ( iter.hasNext() )
@@ -59,16 +57,18 @@
             ScmFile file = (ScmFile) iter.next();
             getLogger().debug( file.getPath() + ":" + file.getStatus() );
         }
-        return new StatusScmResult( command.getCommandline(), out.getChangedFiles() );
+        return new StatusScmResult( command.getCommandString(), out.getChangedFiles() );
     }
 
-    TfsCommand createCommand( TfsScmProviderRepository r, ScmFileSet f )
+    public TfsCommand createCommand( TfsScmProviderRepository r, ScmFileSet f )
     {
         String url = r.getServerPath();
         String workspace = r.getWorkspace();
         TfsCommand command = new TfsCommand( "status", r, f, getLogger() );
         if ( workspace != null &amp;&amp; !workspace.trim().equals( "" ) )
+        {
             command.addArgument( "-workspace:" + workspace );
+        }
         command.addArgument( "-recursive" );
         command.addArgument( "-format:detailed" );
         command.addArgument( url );
@@ -76,81 +76,3 @@
     }
 }
 
-class ChangedFileConsumer
-    implements StreamConsumer
-{
-
-    private ScmLogger logger;
-
-    static final String KEY_CHANGE = "Change";
-
-    static final String KEY_LOCAL_ITEM = "Local item";
-
-    static final String CHANGE_EDIT = "edit";
-
-    static final String CHANGE_ADD = "add";
-
-    HashMap values = new HashMap();
-
-    ArrayList changedFiles = new ArrayList();
-
-    public ChangedFileConsumer( ScmLogger logger )
-    {
-        this.logger = logger;
-    }
-
-    public void consumeLine( String line )
-    {
-        if ( line.contains( ":" ) )
-        {
-            String[] s = line.split( ":", 2 );
-            if ( s.length &gt; 1 )
-                values.put( s[0].trim(), s[1].trim() );
-        }
-        if ( line.trim().equals( "" ) )
-        {
-            extractChangedFile();
-        }
-        logger.debug( "line -" + line );
-    }
-
-    private void extractChangedFile()
-    {
-        String change = getChange();
-        if ( change != null )
-        {
-            ScmFileStatus stat = ScmFileStatus.UNKNOWN;
-            if ( change.equals( ChangedFileConsumer.CHANGE_EDIT ) )
-                stat = ScmFileStatus.MODIFIED;
-            if ( change.equals( ChangedFileConsumer.CHANGE_ADD ) )
-                stat = ScmFileStatus.ADDED;
-            changedFiles.add( new ScmFile( getLocalPath(), stat ) );
-            values.clear();
-        }
-    }
-
-    public List getChangedFiles()
-    {
-        if ( values.size() &gt; 0 )
-        {
-            extractChangedFile();
-        }
-        return changedFiles;
-    }
-
-    private String getChange()
-    {
-        return (String) values.get( KEY_CHANGE );
-    }
-
-    private String getLocalPath()
-    {
-        String local = (String) values.get( KEY_LOCAL_ITEM );
-        if ( local != null )
-        {
-            local = local.split( "]", 2 )[1].trim();
-        }
-        return local;
-    }
-
-}

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java Mon Aug 24 19:49:17 2009
@@ -51,13 +51,15 @@
 
         int status = command.execute( out, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new TagScmResult( command.getCommandline(), "Error code for TFS label command - " + status,
+        {
+            return new TagScmResult( command.getCommandString(), "Error code for TFS label command - " + status,
                                      err.getOutput(), false );
-        return new TagScmResult( command.getCommandline(), f.getFileList() );
+        }
+        return new TagScmResult( command.getCommandString(), f.getFileList() );
 
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String tag,
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String tag,
                                         ScmTagParameters scmTagParameters )
     {
         TfsScmProviderRepository tfsRepo = (TfsScmProviderRepository) r;
@@ -70,7 +72,9 @@
         command.addArgument( "-child:replace" );
         String message = scmTagParameters.getMessage();
         if ( message != null &amp;&amp; !message.equals( "" ) )
+        {
             command.addArgument( "-comment:" + message );
+        }
         return command;
     }
 

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java Mon Aug 24 19:49:17 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.scm.command.unedit.UnEditScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 // Usage: mvn scm:unedit -DworkingDirectory=&lt;dir&gt; -Dincludes=*
 public class TfsUnEditCommand
@@ -40,12 +41,14 @@
         TfsCommand command = createCommand( r, f );
         int status = command.execute( out, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new UnEditScmResult( command.getCommandline(), "Error code for TFS unedit command - " + status,
+        {
+            return new UnEditScmResult( command.getCommandString(), "Error code for TFS unedit command - " + status,
                                         err.getOutput(), false );
-        return new UnEditScmResult( command.getCommandline(), out.getFiles() );
+        }
+        return new UnEditScmResult( command.getCommandString(), out.getFiles() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
     {
         TfsCommand command = new TfsCommand( "undo", r, f, getLogger() );
         command.addArgument( f );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java Mon Aug 24 19:49:17 2009
@@ -28,6 +28,7 @@
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
 import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 
 public class TfsUpdateCommand
     extends AbstractUpdateCommand
@@ -38,15 +39,18 @@
     {
         FileListConsumer fileConsumer = new FileListConsumer();
         ErrorStreamConsumer err = new ErrorStreamConsumer();
+        
         TfsCommand command = createCommand( r, f, v );
         int status = command.execute( fileConsumer, err );
         if ( status != 0 || err.hasBeenFed() )
-            return new UpdateScmResult( command.getCommandline(), "Error code for TFS update command - " + status,
+        {
+            return new UpdateScmResult( command.getCommandString(), "Error code for TFS update command - " + status,
                                         err.getOutput(), false );
-        return new UpdateScmResult( command.getCommandline(), fileConsumer.getFiles() );
+        }
+        return new UpdateScmResult( command.getCommandString(), fileConsumer.getFiles() );
     }
 
-    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v )
+    public TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v )
     {
         String serverPath = ( (TfsScmProviderRepository) r ).getServerPath();
         TfsCommand command = new TfsCommand( "get", r, f, getLogger() );
@@ -55,9 +59,13 @@
         {
             String vType = "";
             if ( v.getType().equals( "Tag" ) )
+            {
                 vType = "L";
+            }
             if ( v.getType().equals( "Revision" ) )
+            {
                 vType = "C";
+            }
             command.addArgument( "-version:" + vType + v.getName() );
         }
         return command;

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java?rev=807356&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java Mon Aug 24 19:49:17 2009
@@ -0,0 +1,108 @@
+package org.apache.maven.scm.provider.tfs.command.consumer;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+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;
+
+public class ChangedFileConsumer
+    implements StreamConsumer
+{
+
+    private ScmLogger logger;
+
+    private static final String KEY_CHANGE = "Change";
+
+    private static final String KEY_LOCAL_ITEM = "Local item";
+
+    private static final String CHANGE_EDIT = "edit";
+
+    private static final String CHANGE_ADD = "add";
+
+    private HashMap values = new HashMap();
+
+    private ArrayList changedFiles = new ArrayList();
+
+    public ChangedFileConsumer( ScmLogger logger )
+    {
+        this.logger = logger;
+    }
+
+    public void consumeLine( String line )
+    {
+        if ( line.contains( ":" ) )
+        {
+            String[] s = line.split( ":", 2 );
+            if ( s.length &gt; 1 )
+                values.put( s[0].trim(), s[1].trim() );
+        }
+        if ( line.trim().equals( "" ) )
+        {
+            extractChangedFile();
+        }
+        logger.debug( "line -" + line );
+    }
+
+    private void extractChangedFile()
+    {
+        String change = getChange();
+        if ( change != null )
+        {
+            ScmFileStatus stat = ScmFileStatus.UNKNOWN;
+            if ( change.equals( ChangedFileConsumer.CHANGE_EDIT ) )
+                stat = ScmFileStatus.MODIFIED;
+            if ( change.equals( ChangedFileConsumer.CHANGE_ADD ) )
+                stat = ScmFileStatus.ADDED;
+            changedFiles.add( new ScmFile( getLocalPath(), stat ) );
+            values.clear();
+        }
+    }
+
+    public List getChangedFiles()
+    {
+        if ( values.size() &gt; 0 )
+        {
+            extractChangedFile();
+        }
+        return changedFiles;
+    }
+
+    private String getChange()
+    {
+        return (String) values.get( KEY_CHANGE );
+    }
+
+    private String getLocalPath()
+    {
+        String local = (String) values.get( KEY_LOCAL_ITEM );
+        if ( local != null )
+        {
+            local = local.split( "]", 2 )[1].trim();
+        }
+        return local;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ChangedFileConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java?rev=807356&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java Mon Aug 24 19:49:17 2009
@@ -0,0 +1,81 @@
+package org.apache.maven.scm.provider.tfs.command.consumer;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+public class FileListConsumer
+    implements StreamConsumer
+{
+
+    private boolean fed = false;
+
+    protected String currentDir = "";
+
+    private ArrayList files = new ArrayList();
+
+    public void consumeLine( String line )
+    {
+        fed = true;
+        if ( line.endsWith( ":" ) )
+        {
+            currentDir = line.substring( 0, line.lastIndexOf( ':' ) );
+            ScmFile scmFile = new ScmFile( currentDir, ScmFileStatus.CHECKED_OUT );
+            if ( !files.contains( scmFile ) )
+            {
+                files.add( scmFile );
+            }
+        }
+        else if ( line.trim().equals( "" ) )
+        {
+            currentDir = "";
+        }
+        else if ( !currentDir.equals( "" ) &amp;&amp; line.contains( " " ) )
+        {
+            String filename = line.split( " " )[1];
+            files.add( getScmFile( filename ) );
+        }
+        else
+        {
+            files.add( getScmFile( line ) );
+        }
+    }
+
+    protected ScmFile getScmFile( String filename )
+    {
+        return new ScmFile( new File( currentDir, filename ).getAbsolutePath(), ScmFileStatus.CHECKED_OUT );
+    }
+
+    public List getFiles()
+    {
+        return files;
+    }
+
+    public boolean hasBeenFed()
+    {
+        return fed;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/FileListConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java?rev=807356&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java Mon Aug 24 19:49:17 2009
@@ -0,0 +1,37 @@
+package org.apache.maven.scm.provider.tfs.command.consumer;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+
+public class ServerFileListConsumer
+    extends FileListConsumer
+{
+    protected ScmFile getScmFile( String filename )
+    {
+        if ( filename.startsWith( "$" ) )
+        {
+            filename = filename.replace( "$", "" );
+        }
+        String path = currentDir + "/" + filename;
+        return new ScmFile( path, ScmFileStatus.UNKNOWN );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ServerFileListConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java?rev=807356&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java Mon Aug 24 19:49:17 2009
@@ -0,0 +1,204 @@
+package org.apache.maven.scm.provider.tfs.command.consumer;
+
+/*
+ * 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.
+ */
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.util.AbstractConsumer;
+
+public class TfsChangeLogConsumer
+    extends AbstractConsumer
+{
+
+    private static final String PATTERN =
+        "^[^:]*:[ \t]([0-9]*)\n" + "[^:]*:[ \t](.*)\n[^:]*:[ \t](.*)\n"
+            + "[^:]*:((?:\n.*)*)\n\n[^\n :]*:(?=\n  )((?:\n[ \t]+.*)*)";
+
+    private static final String PATTERN_ITEM = "\n  ([^$]+) (\\$/.*)";
+
+    ArrayList logs = new ArrayList();
+
+    String buffer = "";
+
+    boolean fed = false;
+
+    public TfsChangeLogConsumer( ScmLogger logger )
+    {
+        super( logger );
+    }
+
+    public void consumeLine( String line )
+    {
+        fed = true;
+        if ( line.startsWith( "-----" ) )
+        {
+            addChangeLog();
+        }
+        buffer += line + "\n";
+    }
+
+    public List getLogs()
+    {
+        addChangeLog();
+        return logs;
+    }
+
+    private void addChangeLog()
+    {
+        if ( !buffer.equals( "" ) )
+        {
+            Pattern p = Pattern.compile( PATTERN );
+            Matcher m = p.matcher( buffer );
+            if ( m.find() )
+            {
+                String revision = m.group( 1 ).trim();
+                String username = m.group( 2 ).trim();
+                String dateString = m.group( 3 ).trim();
+                String comment = m.group( 4 ).trim();
+                Pattern itemPattern = Pattern.compile( PATTERN_ITEM );
+                Matcher itemMatcher = itemPattern.matcher( m.group( 5 ) );
+                List files = new ArrayList();
+                while ( itemMatcher.find() )
+                {
+                    ChangeFile file = new ChangeFile( itemMatcher.group( 2 ).trim(), revision );
+                    files.add( file );
+                }
+                Date date;
+                try
+                {
+                    date = parseDate( dateString );
+                }
+                catch ( ParseException e )
+                {
+                    getLogger().error( "Date parse error", e );
+                    throw new RuntimeException( e );
+                }
+
+                ChangeSet change = new ChangeSet( date, comment, username, files );
+                logs.add( change );
+            }
+            buffer = "";
+        }
+    }
+
+    public boolean hasBeenFed()
+    {
+        return fed;
+    }
+
+    protected static Date parseDate( String dateString )
+        throws ParseException
+    {
+        Date date = null;
+        try
+        {
+            // Use the depricated Date.parse method as this is very good at
+            // detecting
+            // dates commonly output by the US and UK standard locales of
+            // dotnet that
+            // are output by the Microsoft command line client.
+            date = new Date( Date.parse( dateString ) );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            // ignore - parse failed.
+        }
+        if ( date == null )
+        {
+            // The old fashioned way did not work. Let's try it using a more
+            // complex
+            // alternative.
+            DateFormat[] formats = createDateFormatsForLocaleAndTimeZone( null, null );
+            return parseWithFormats( dateString, formats );
+        }
+        return date;
+    }
+
+    private static Date parseWithFormats( String input, DateFormat[] formats )
+        throws ParseException
+    {
+        ParseException parseException = null;
+        for ( int i = 0; i &lt; formats.length; i++ )
+        {
+            try
+            {
+                return formats[i].parse( input );
+            }
+            catch ( ParseException ex )
+            {
+                parseException = ex;
+            }
+        }
+
+        throw parseException;
+    }
+
+    /**
+     * Build an array of DateFormats that are commonly used for this locale and timezone.
+     */
+    private static DateFormat[] createDateFormatsForLocaleAndTimeZone( Locale locale, TimeZone timeZone )
+    {
+        if ( locale == null )
+        {
+            locale = Locale.getDefault();
+        }
+
+        if ( timeZone == null )
+        {
+            timeZone = TimeZone.getDefault();
+        }
+
+        List formats = new ArrayList();
+
+        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
+        {
+            for ( int timeStyle = DateFormat.FULL; timeStyle &lt;= DateFormat.SHORT; timeStyle++ )
+            {
+                DateFormat df = DateFormat.getDateTimeInstance( dateStyle, timeStyle, locale );
+                if ( timeZone != null )
+                {
+                    df.setTimeZone( timeZone );
+                }
+                formats.add( df );
+            }
+        }
+
+        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
+        {
+            DateFormat df = DateFormat.getDateInstance( dateStyle, locale );
+            df.setTimeZone( timeZone );
+            formats.add( df );
+        }
+
+        return (DateFormat[]) formats.toArray( new DateFormat[formats.size()] );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/TfsChangeLogConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java Mon Aug 24 19:49:17 2009
@@ -29,7 +29,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsAddCommand().createCommand( repo, getScmFileSet() ).command;
+        Commandline cmd = new TfsAddCommand().createCommand( repo, getScmFileSet() ).getCommandline();
         String expected = "tf add -login:user,password " + getFileList();
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java Mon Aug 24 19:49:17 2009
@@ -29,7 +29,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsBranchCommand().createCommand( repo, getScmFileSet(), "branch" ).command;
+        Commandline cmd = new TfsBranchCommand().createCommand( repo, getScmFileSet(), "branch" ).getCommandline();
         String path = getScmFileSet().getBasedir().getAbsolutePath();
         String expected = "tf branch -login:user,password " + path + " -checkin branch";
         assertCommandLine( expected, getWorkingDirectory(), cmd );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java Mon Aug 24 19:49:17 2009
@@ -24,6 +24,7 @@
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 import org.codehaus.plexus.util.cli.Commandline;
 
 public class TfsChangeLogCommandTest
@@ -43,7 +44,7 @@
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
         File f = new File( "file" );
-        Commandline cmd = new TfsChangeLogCommand().createCommand( repo, getScmFileSet(), f ).command;
+        Commandline cmd = new TfsChangeLogCommand().createCommand( repo, getScmFileSet(), f ).getCommandline();
         String expected = "tf history -login:user,password -format:detailed " + f.getName();
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java Mon Aug 24 19:49:17 2009
@@ -30,7 +30,7 @@
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
         Commandline cmd =
-            new TfsCheckInCommand().createCommand( repo, getScmFileSet(), "A comment of many words" ).command;
+            new TfsCheckInCommand().createCommand( repo, getScmFileSet(), "A comment of many words" ).getCommandline();
         String expected =
             "tf checkin -login:user,password -noprompt -comment:\"A comment of many words\" " + getFileList();
         assertCommandLine( expected, getWorkingDirectory(), cmd );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java Mon Aug 24 19:49:17 2009
@@ -25,6 +25,7 @@
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.ScmRevision;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 import org.codehaus.plexus.util.cli.Commandline;
 
 public class TfsCheckOutCommandTest
@@ -45,7 +46,7 @@
         TfsScmProviderRepository repo = getScmProviderRepository();
         ScmRevision rev = new ScmRevision( "revision" );
         String path = getScmFileSet().getBasedir().getAbsolutePath();
-        Commandline cmd = new TfsCheckOutCommand().createGetCommand( repo, getScmFileSet(), rev, true ).command;
+        Commandline cmd = new TfsCheckOutCommand().createGetCommand( repo, getScmFileSet(), rev, true ).getCommandline();
         String expected = "tf get -login:user,password -recursive -force -version:Crevision " + path;
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java Mon Aug 24 19:49:17 2009
@@ -27,6 +27,7 @@
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.ScmTagParameters;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.FileListConsumer;
 import org.codehaus.plexus.util.cli.Commandline;
 
 public class TfsEditCommandTest
@@ -45,7 +46,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsEditCommand().createCommand( repo, getScmFileSet() ).command;
+        Commandline cmd = new TfsEditCommand().createCommand( repo, getScmFileSet() ).getCommandline();
         String expected =
             "tf checkout -login:user,password " + getFileList();
         assertCommandLine( expected, getWorkingDirectory(), cmd );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java Mon Aug 24 19:49:17 2009
@@ -19,11 +19,10 @@
  * under the License.
  */
 
-import junit.framework.TestCase;
-
 import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ServerFileListConsumer;
 import org.codehaus.plexus.util.cli.Commandline;
 
 public class TfsListCommandTest
@@ -42,7 +41,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsListCommand().createCommand( repo, getScmFileSet(), true ).command;
+        Commandline cmd = new TfsListCommand().createCommand( repo, getScmFileSet(), true ).getCommandline();
         String expected = "tf dir -login:user,password -recursive " + getFileList();
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java Mon Aug 24 19:49:17 2009
@@ -26,6 +26,7 @@
 import org.apache.maven.scm.ScmFileStatus;
 import org.apache.maven.scm.log.DefaultLog;
 import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ChangedFileConsumer;
 import org.codehaus.plexus.util.cli.Commandline;
 
 public class TfsStatusCommandTest
@@ -47,7 +48,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsStatusCommand().createCommand( repo, getScmFileSet() ).command;
+        Commandline cmd = new TfsStatusCommand().createCommand( repo, getScmFileSet() ).getCommandline();
         String expected =
             "tf status -login:user,password -workspace:workspace -recursive -format:detailed " + repo.getServerPath();
         assertCommandLine( expected, getWorkingDirectory(), cmd );

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java Mon Aug 24 19:49:17 2009
@@ -31,7 +31,7 @@
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
         ScmTagParameters param = new ScmTagParameters( "Message of many words" );
-        Commandline cmd = new TfsTagCommand().createCommand( repo, getScmFileSet(), "tag", param ).command;
+        Commandline cmd = new TfsTagCommand().createCommand( repo, getScmFileSet(), "tag", param ).getCommandline();
         String expected =
             "tf label -login:user,password tag " + repo.getServerPath()
                 + " -recursive -child:replace -comment:\"Message of many words\"";

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java Mon Aug 24 19:49:17 2009
@@ -29,7 +29,7 @@
     public void testCommandline()
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
-        Commandline cmd = new TfsUnEditCommand().createCommand( repo, getScmFileSet() ).command;
+        Commandline cmd = new TfsUnEditCommand().createCommand( repo, getScmFileSet() ).getCommandline();
         String expected = "tf undo -login:user,password " + getFileList();
         assertCommandLine( expected, getWorkingDirectory(), cmd );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java?rev=807356&amp;r1=807355&amp;r2=807356&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java Mon Aug 24 19:49:17 2009
@@ -31,7 +31,7 @@
     {
         TfsScmProviderRepository repo = getScmProviderRepository();
         ScmRevision rev = new ScmRevision( "revision" );
-        Commandline cmd = new TfsUpdateCommand().createCommand( repo, getScmFileSet(), rev ).command;
+        Commandline cmd = new TfsUpdateCommand().createCommand( repo, getScmFileSet(), rev ).getCommandline();
         String path = repo.getServerPath();
         String expected = "tf get -login:user,password " + path + " -version:Crevision";
         assertCommandLine( expected, getWorkingDirectory(), cmd );




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807349 [2/2] - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/main/java/org/apache/maven/scm/ src/main/java/...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824194107.062DB238896F@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824194107-062DB238896F@eris-apache-org%3e</id>
<updated>2009-08-24T19:41:05Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,37 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsAddCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsAddCommand().createCommand( repo, getScmFileSet() ).command;
+        String expected = "tf add -login:user,password " + getFileList();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,38 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsBranchCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsBranchCommand().createCommand( repo, getScmFileSet(), "branch"
).command;
+        String path = getScmFileSet().getBasedir().getAbsolutePath();
+        String expected = "tf branch -login:user,password " + path + " -checkin branch";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,108 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsChangeLogCommandTest
+    extends TfsCommandTest
+{
+
+    private FileListConsumer consumer;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        consumer = new FileListConsumer();
+    }
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        File f = new File( "file" );
+        Commandline cmd = new TfsChangeLogCommand().createCommand( repo, getScmFileSet(),
f ).command;
+        String expected = "tf history -login:user,password -format:detailed " + f.getName();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCommand()
+    {
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing .tpattributes" );
+        consumer.consumeLine( "Replacing .classpath" );
+        consumer.consumeLine( "Replacing .myclasspath" );
+        consumer.consumeLine( "Replacing .project" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8\\.settings:" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing .tpignore" );
+        consumer.consumeLine( "Replacing about.html" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8\\bin:" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing build.properties" );
+        consumer.consumeLine( "Replacing customBuildCallbacks.xml" );
+        consumer.consumeLine( "" );
+
+        String exp1 = new File( "C:\\temp\\maven\\c8", ".classpath" ).getAbsolutePath();
+        String exp2 = new File( "C:\\temp\\maven\\c8", "build.properties" ).getAbsolutePath();
+        ScmFile expFile1 = new ScmFile( exp1, ScmFileStatus.CHECKED_OUT );
+        ScmFile expFile2 = new ScmFile( exp2, ScmFileStatus.CHECKED_OUT );
+
+        assertNotNull( consumer.getFiles() );
+        assertEquals( 11, consumer.getFiles().size() );
+        assertTrue( consumer.getFiles().contains( expFile1 ) );
+        assertTrue( consumer.getFiles().contains( expFile2 ) );
+    }
+
+    public void testMSCommand()
+    {
+        consumer.consumeLine( "c:\\temp\\maven:" );
+        consumer.consumeLine( "Replacing c10" );
+        consumer.consumeLine( "Replacing .classpath" );
+        consumer.consumeLine( "Replacing .myclasspath" );
+        consumer.consumeLine( "Replacing .project" );
+        consumer.consumeLine( "Replacing .settings" );
+        consumer.consumeLine( "Replacing .tpattributes" );
+        consumer.consumeLine( "Replacing .tpignore" );
+        consumer.consumeLine( "Replacing about.html" );
+        consumer.consumeLine( "Replacing bin" );
+        consumer.consumeLine( "Replacing build.properties" );
+
+        String exp1 = new File( "c:\\temp\\maven", ".classpath" ).getAbsolutePath();
+        String exp2 = new File( "c:\\temp\\maven", ".project" ).getAbsolutePath();
+        ScmFile expFile1 = new ScmFile( exp1, ScmFileStatus.CHECKED_OUT );
+        ScmFile expFile2 = new ScmFile( exp2, ScmFileStatus.CHECKED_OUT );
+
+        assertNotNull( consumer.getFiles() );
+        assertEquals( 11, consumer.getFiles().size() );
+        assertTrue( consumer.getFiles().contains( expFile1 ) );
+        assertTrue( consumer.getFiles().contains( expFile2 ) );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,40 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsCheckInCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd =
+            new TfsCheckInCommand().createCommand( repo, getScmFileSet(), "A comment of many
words" ).command;
+        String expected =
+            "tf checkin -login:user,password -noprompt -comment:\"A comment of many words\"
" + getFileList();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,109 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsCheckOutCommandTest
+    extends TfsCommandTest
+{
+
+    private FileListConsumer consumer;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        consumer = new FileListConsumer();
+    }
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        ScmRevision rev = new ScmRevision( "revision" );
+        String path = getScmFileSet().getBasedir().getAbsolutePath();
+        Commandline cmd = new TfsCheckOutCommand().createGetCommand( repo, getScmFileSet(),
rev, true ).command;
+        String expected = "tf get -login:user,password -recursive -force -version:Crevision
" + path;
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCommand()
+    {
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing .tpattributes" );
+        consumer.consumeLine( "Replacing .classpath" );
+        consumer.consumeLine( "Replacing .myclasspath" );
+        consumer.consumeLine( "Replacing .project" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8\\.settings:" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing .tpignore" );
+        consumer.consumeLine( "Replacing about.html" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8\\bin:" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "C:\\temp\\maven\\c8:" );
+        consumer.consumeLine( "Replacing build.properties" );
+        consumer.consumeLine( "Replacing customBuildCallbacks.xml" );
+        consumer.consumeLine( "" );
+
+        String exp1 = new File( "C:\\temp\\maven\\c8", ".classpath" ).getAbsolutePath();
+        String exp2 = new File( "C:\\temp\\maven\\c8", "build.properties" ).getAbsolutePath();
+        ScmFile expFile1 = new ScmFile( exp1, ScmFileStatus.CHECKED_OUT );
+        ScmFile expFile2 = new ScmFile( exp2, ScmFileStatus.CHECKED_OUT );
+        assertNotNull( consumer.getFiles() );
+        assertEquals( 11, consumer.getFiles().size() );
+        assertTrue( consumer.getFiles().contains( expFile1 ) );
+        assertTrue( consumer.getFiles().contains( expFile2 ) );
+    }
+
+    public void testMSCommand()
+    {
+        consumer.consumeLine( "c:\\temp\\maven:" );
+        consumer.consumeLine( "Replacing c10" );
+        consumer.consumeLine( "Replacing .classpath" );
+        consumer.consumeLine( "Replacing .myclasspath" );
+        consumer.consumeLine( "Replacing .project" );
+        consumer.consumeLine( "Replacing .settings" );
+        consumer.consumeLine( "Replacing .tpattributes" );
+        consumer.consumeLine( "Replacing .tpignore" );
+        consumer.consumeLine( "Replacing about.html" );
+        consumer.consumeLine( "Replacing bin" );
+        consumer.consumeLine( "Replacing build.properties" );
+
+        assertNotNull( consumer.getFiles() );
+        
+        String exp1 = new File( "c:\\temp\\maven", ".classpath" ).getAbsolutePath();
+        String exp2 = new File( "c:\\temp\\maven", ".project" ).getAbsolutePath();
+        ScmFile expFile1 = new ScmFile( exp1, ScmFileStatus.CHECKED_OUT );
+        ScmFile expFile2 = new ScmFile( exp2, ScmFileStatus.CHECKED_OUT );
+        assertEquals( 11, consumer.getFiles().size() );
+        assertTrue( consumer.getFiles().contains( expFile1 ) );
+        assertTrue( consumer.getFiles().contains(expFile2) );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,59 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+
+public class TfsCommandTest
+    extends ScmTestCase
+{
+
+    protected TfsScmProviderRepository getScmProviderRepository()
+    {
+        return new TfsScmProviderRepository( "http://tfsurl", "user", "password", "serverpath",
"workspace" );
+    }
+
+    protected String getFileList()
+    {
+        String path = "";
+        for ( Iterator i = getScmFileSet().getFileList().iterator(); i.hasNext(); )
+        {
+            File f = (File) i.next();
+            path += f.getName() + " ";
+        }
+        return path.trim();
+    }
+
+    protected ScmFileSet getScmFileSet()
+    {
+        return new ScmFileSet( getWorkingDirectory(), new File( "file" ) );
+    }
+
+    public void testFileList()
+    {
+        assertTrue( getScmFileSet().getFileList().size() &gt; 0 );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,70 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsEditCommandTest
+    extends TfsCommandTest
+{
+
+    private FileListConsumer consumer;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        consumer = new FileListConsumer();
+    }
+    
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsEditCommand().createCommand( repo, getScmFileSet() ).command;
+        String expected =
+            "tf checkout -login:user,password " + getFileList();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCommand()
+    {
+        consumer.consumeLine( ".classpath" );
+        consumer.consumeLine( ".project" );
+        consumer.consumeLine( "build.properties" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "META-INF:" );
+        consumer.consumeLine( "MANIFEST.MF" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "src\\pluginp:" );
+        consumer.consumeLine( "Activator.java" );
+
+        assertNotNull( consumer.getFiles() );
+        assertEquals( 7, consumer.getFiles().size() );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,84 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsListCommandTest
+    extends TfsCommandTest
+{
+
+    private ServerFileListConsumer consumer;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        consumer = new ServerFileListConsumer();
+    }
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsListCommand().createCommand( repo, getScmFileSet(), true
).command;
+        String expected = "tf dir -login:user,password -recursive " + getFileList();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testMSCommand()
+    {
+        consumer.consumeLine( "$/junk/com.teamprise.core/libs/xstream-1.1.3/lib:" );
+        consumer.consumeLine( "xpp3-1.1.3.4d_b4_min.jar" );
+        consumer.consumeLine( "xpp3-license.txt" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/com.teamprise.core/messages:" );
+        consumer.consumeLine( "$com" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/com.teamprise.core/messages/com:" );
+        consumer.consumeLine( "$teamprise" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/com.teamprise.core/messages/com/teamprise:" );
+        consumer.consumeLine( "$core" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/com.teamprise.core/messages/com/teamprise/core:" );
+        consumer.consumeLine( "$pguidance" );
+        consumer.consumeLine( "$workitem" );
+
+        assertNotNull( consumer.getFiles() );
+        assertEquals( 9, consumer.getFiles().size() );
+        assertTrue( consumer.getFiles().contains(
+                                                  new ScmFile(
+                                                               "$/junk/com.teamprise.core/libs/xstream-1.1.3/lib/xpp3-license.txt",
+                                                               ScmFileStatus.CHECKED_OUT
) ) );
+        assertTrue( consumer.getFiles().contains(
+                                                  new ScmFile( "$/junk/com.teamprise.core/messages/com",
+                                                               ScmFileStatus.CHECKED_OUT
) ) );
+        assertTrue( consumer.getFiles().contains(
+                                                  new ScmFile(
+                                                               "$/junk/com.teamprise.core/messages/com/teamprise/core/pguidance",
+                                                               ScmFileStatus.CHECKED_OUT
) ) );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,135 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.DefaultLog;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsStatusCommandTest
+    extends TfsCommandTest
+{
+
+    private ChangedFileConsumer consumer;
+
+    private Locale defaultLocale;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        consumer = new ChangedFileConsumer( new DefaultLog() );
+        defaultLocale = Locale.getDefault();
+    }
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsStatusCommand().createCommand( repo, getScmFileSet() ).command;
+        String expected =
+            "tf status -login:user,password -workspace:workspace -recursive -format:detailed
" + repo.getServerPath();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    protected void tearDown()
+        throws Exception
+    {
+        Locale.setDefault( defaultLocale );
+    }
+
+    public void testCommand()
+    {
+        consumer.consumeLine( "$/junk/pluginp/.classpath;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       Mar 12, 2009 2:18:31 AM" );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\.classpath"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/pluginp/.project;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       Mar 12, 2009 2:18:31 AM" );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\.project"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/pluginp/build.properties;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       Mar 12, 2009 2:18:31 AM" );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\build.properties"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/pluginp/META-INF/MANIFEST.MF;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       Mar 12, 2009 2:18:31 AM" );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\META-INF\\MANIFEST.MF"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+
+        List changedFiles = consumer.getChangedFiles();
+        assertNotNull( changedFiles );
+        assertEquals( 4, changedFiles.size() );
+        assertTrue( changedFiles.contains( new ScmFile( "C:\\temp\\maven\\c4\\.classpath",
ScmFileStatus.MODIFIED ) ) );
+        assertTrue( changedFiles.contains( new ScmFile( "C:\\temp\\maven\\c4\\META-INF\\MANIFEST.MF",
+                                                        ScmFileStatus.MODIFIED ) ) );
+    }
+
+    public void testLocale()
+    {
+        Locale.setDefault( Locale.GERMAN );
+        String date = "12.03.2009 02:18:31";
+        consumer.consumeLine( "$/junk/pluginp/.classpath;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       " + date );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\.classpath"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+        consumer.consumeLine( "$/junk/pluginp/.project;C1858" );
+        consumer.consumeLine( "  User:       CDESG\\subhash" );
+        consumer.consumeLine( "  Date:       " + date );
+        consumer.consumeLine( "  Lock:       none" );
+        consumer.consumeLine( "  Change:     edit" );
+        consumer.consumeLine( "  Workspace:  purinaTest" );
+        consumer.consumeLine( "  Local item: [SUBHASH-PC] C:\\temp\\maven\\c4\\.project"
);
+        consumer.consumeLine( "  File type:  windows-1252" );
+        consumer.consumeLine( "" );
+        List changedFiles = consumer.getChangedFiles();
+        assertNotNull( changedFiles );
+        assertEquals( 2, changedFiles.size() );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,41 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsTagCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        ScmTagParameters param = new ScmTagParameters( "Message of many words" );
+        Commandline cmd = new TfsTagCommand().createCommand( repo, getScmFileSet(), "tag",
param ).command;
+        String expected =
+            "tf label -login:user,password tag " + repo.getServerPath()
+                + " -recursive -child:replace -comment:\"Message of many words\"";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,37 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsUnEditCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        Commandline cmd = new TfsUnEditCommand().createCommand( repo, getScmFileSet() ).command;
+        String expected = "tf undo -login:user,password " + getFileList();
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
Mon Aug 24 19:41:04 2009
@@ -0,0 +1,40 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+public class TfsUpdateCommandTest
+    extends TfsCommandTest
+{
+
+    public void testCommandline()
+    {
+        TfsScmProviderRepository repo = getScmProviderRepository();
+        ScmRevision rev = new ScmRevision( "revision" );
+        Commandline cmd = new TfsUpdateCommand().createCommand( repo, getScmFileSet(), rev
).command;
+        String path = repo.getServerPath();
+        String expected = "tf get -login:user,password " + path + " -version:Crevision";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r807349 [1/2] - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/maven/ src/main/java/org/apache/maven/scm/ src/main/java/...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090824194106.F041E23888E7@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090824194106-F041E23888E7@eris-apache-org%3e</id>
<updated>2009-08-24T19:41:05Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Mon Aug 24 19:41:04 2009
New Revision: 807349

URL: http://svn.apache.org/viewvc?rev=807349&amp;view=rev
Log:
[SCM-461] add maven-scm-provider-tfs for the Microsoft Team Foundation Server SCM system
Contributed by Subhash Gopalakrishnan and Martin Woodward - txs!


Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsListCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommandTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/test/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommandTest.java   (with props)

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Aug 24 19:41:04 2009
@@ -0,0 +1,8 @@
+target
+.project
+.settings
+.classpath
+*.imp
+*.ipr
+.git
+.gitignore

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml Mon Aug 24 19:41:04 2009
@@ -0,0 +1,81 @@
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+
+&lt;!--
+  ~ 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.
+  --&gt;
+
+&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;
+
+  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
+  &lt;parent&gt;
+    &lt;groupId&gt;org.apache.maven.scm&lt;/groupId&gt;
+    &lt;artifactId&gt;maven-scm-providers&lt;/artifactId&gt;
+    &lt;version&gt;1.3-SNAPSHOT&lt;/version&gt;
+  &lt;/parent&gt;
+
+  &lt;artifactId&gt;maven-scm-provider-tfs&lt;/artifactId&gt;
+
+  &lt;name&gt;TFS SCM Provider&lt;/name&gt;
+  &lt;url&gt;http://labs.teamprise.com/maven&lt;/url&gt;
+
+  &lt;description&gt;A Maven 2 SCM Provider for Microsoft Visual Studio Team Foundation Server.&lt;/description&gt;
+
+  &lt;developers&gt;
+    &lt;developer&gt;
+      &lt;id&gt;martin&lt;/id&gt;
+      &lt;name&gt;Martin Woodward&lt;/name&gt;
+      &lt;email&gt;martin@teamprise.com&lt;/email&gt;
+      &lt;url&gt;http://www.woodwardweb.com&lt;/url&gt;
+      &lt;organization&gt;Teamprise&lt;/organization&gt;
+      &lt;organizationUrl&gt;http://www.teamprise.com&lt;/organizationUrl&gt;
+      &lt;roles&gt;
+        &lt;role&gt;developer&lt;/role&gt;
+      &lt;/roles&gt;
+      &lt;timezone&gt;0&lt;/timezone&gt;
+    &lt;/developer&gt;
+    &lt;developer&gt;
+      &lt;id&gt;subhashgo&lt;/id&gt;
+      &lt;name&gt;Subhash Gopalakrishnan&lt;/name&gt;
+      &lt;email&gt;subhash@teamprise.com&lt;/email&gt;
+      &lt;organization&gt;Teamprise&lt;/organization&gt;
+      &lt;organizationUrl&gt;http://www.teamprise.com&lt;/organizationUrl&gt;
+      &lt;roles&gt;
+        &lt;role&gt;developer&lt;/role&gt;
+      &lt;/roles&gt;
+      &lt;timezone&gt;+5.5&lt;/timezone&gt;
+    &lt;/developer&gt;
+  &lt;/developers&gt;
+
+  &lt;build&gt;
+    &lt;plugins&gt;
+      &lt;plugin&gt;
+        &lt;groupId&gt;org.codehaus.plexus&lt;/groupId&gt;
+        &lt;artifactId&gt;plexus-maven-plugin&lt;/artifactId&gt;
+        &lt;executions&gt;
+          &lt;execution&gt;
+            &lt;goals&gt;
+              &lt;goal&gt;descriptor&lt;/goal&gt;
+            &lt;/goals&gt;
+          &lt;/execution&gt;
+        &lt;/executions&gt;
+      &lt;/plugin&gt;
+    &lt;/plugins&gt;
+  &lt;/build&gt;
+
+&lt;/project&gt;

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,240 @@
+package org.apache.maven.scm.provider.tfs;
+
+/*
+ * 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.
+ */
+
+import java.net.URI;
+
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.command.edit.EditScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.command.list.ListScmResult;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.command.unedit.UnEditScmResult;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.provider.AbstractScmProvider;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.TfsAddCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsBranchCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsChangeLogCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsCheckInCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsCheckOutCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsEditCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsListCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsStatusCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsTagCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsUnEditCommand;
+import org.apache.maven.scm.provider.tfs.command.TfsUpdateCommand;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+
+/**
+ * @plexus.component role="org.apache.maven.scm.provider.ScmProvider" role-hint="tfs"
+ */
+public class TfsScmProvider
+    extends AbstractScmProvider
+{
+
+    public static final String TFS_URL_FORMAT =
+        "[[domain\\]username[;password]@]http[s]://server_name[:port]:workspace:$/TeamProject/Path/To/Project";
+
+    // ----------------------------------------------------------------------
+    // ScmProvider Implementation
+    // ----------------------------------------------------------------------
+
+    public String getScmType()
+    {
+        return "tfs";
+    }
+
+    public ScmProviderRepository makeProviderScmRepository( String scmUrl, char delimiter )
+        throws ScmRepositoryException
+    {
+        // Look for the TFS URL after any '@' delmiter used to pass
+        // usernames/password etc
+        // We deliberately look for the last '@' character as username could
+        // contain an '@' also.
+        int lastAtPos = scmUrl.lastIndexOf( '@' );
+        getLogger().info( "scmUrl - " + scmUrl );
+
+        String tfsUrl = ( lastAtPos &lt; 0 ) ? scmUrl : scmUrl.substring( lastAtPos + 1 );
+        String usernamePassword = ( lastAtPos &lt; 0 ) ? null : scmUrl.substring( 0, lastAtPos );
+
+        // Look for TFS path after the end of the TFS URL
+        int tfsPathPos = tfsUrl.lastIndexOf( delimiter + "$/" );
+        String serverPath = "$/";
+        if ( tfsPathPos &gt; 0 )
+        {
+            serverPath = tfsUrl.substring( tfsPathPos + 1 );
+            tfsUrl = tfsUrl.substring( 0, tfsPathPos );
+        }
+
+        // Look for workspace ater the end of the TFS URL
+        int workspacePos = tfsUrl.lastIndexOf( delimiter );
+        String workspace = tfsUrl.substring( workspacePos + 1 );
+        tfsUrl = tfsUrl.substring( 0, workspacePos );
+
+        try
+        {
+            // Use URI's validation to determine if valid URI.
+            URI tfsUri = URI.create( tfsUrl );
+            String scheme = tfsUri.getScheme();
+            getLogger().info( "Scheme - " + scheme );
+            if ( scheme == null || !( scheme.equalsIgnoreCase( "http" ) || scheme.equalsIgnoreCase( "https" ) ) )
+            {
+                throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. "
+                    + "The TFS Url syntax is " + TFS_URL_FORMAT );
+            }
+        }
+        catch ( IllegalArgumentException e )
+        {
+            throw new ScmRepositoryException( "TFS Url \"" + tfsUrl + "\" is not a valid URL. The TFS Url syntax is "
+                + TFS_URL_FORMAT );
+        }
+
+        String username = null;
+        String password = null;
+
+        if ( usernamePassword != null )
+        {
+            // Deliberately not using .split here in case password contains a
+            // ';'
+            int delimPos = usernamePassword.indexOf( ';' );
+            username = ( delimPos &lt; 0 ) ? usernamePassword : usernamePassword.substring( 0, delimPos );
+            password = ( delimPos &lt; 0 ) ? null : usernamePassword.substring( delimPos + 1 );
+        }
+
+        return new TfsScmProviderRepository( tfsUrl, username, password, serverPath, workspace );
+
+    }
+
+    protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
+                                            CommandParameters parameters )
+        throws ScmException
+    {
+        TfsChangeLogCommand command = new TfsChangeLogCommand();
+        command.setLogger( getLogger() );
+        return (ChangeLogScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
+                                          CommandParameters parameters )
+        throws ScmException
+    {
+        TfsCheckOutCommand command = new TfsCheckOutCommand();
+        command.setLogger( getLogger() );
+        return (CheckOutScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsEditCommand command = new TfsEditCommand();
+        command.setLogger( getLogger() );
+        return (EditScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsUnEditCommand command = new TfsUnEditCommand();
+        command.setLogger( getLogger() );
+        return (UnEditScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsStatusCommand command = new TfsStatusCommand();
+        command.setLogger( getLogger() );
+        return (StatusScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsUpdateCommand command = new TfsUpdateCommand();
+        command.setLogger( getLogger() );
+        return (UpdateScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
+                                        CommandParameters parameters )
+        throws ScmException
+    {
+        TfsCheckInCommand command = new TfsCheckInCommand();
+        command.setLogger( getLogger() );
+        return (CheckInScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsAddCommand command = new TfsAddCommand();
+        command.setLogger( getLogger() );
+        return (AddScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsTagCommand command = new TfsTagCommand();
+        command.setLogger( getLogger() );
+        return (TagScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsBranchCommand command = new TfsBranchCommand();
+        command.setLogger( getLogger() );
+        return (BranchScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        TfsListCommand command = new TfsListCommand();
+        command.setLogger( getLogger() );
+        return (ListScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        // Because tf launches only external diffs
+        return super.diff( repository, fileSet, parameters );
+    }
+
+    protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        // Use checkout instead
+        return super.export( repository, fileSet, parameters );
+    }
+
+}
\ No newline at end of file

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProvider.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,74 @@
+package org.apache.maven.scm.provider.tfs;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+
+public class TfsScmProviderRepository
+    extends ScmProviderRepository
+{
+    private final String tfsUrl;
+
+    private final String serverPath;
+
+    private final String workspace;
+
+    public TfsScmProviderRepository( String tfsUrl, String user, String password, String serverPath, String workspace )
+    {
+        super();
+        setUser( user );
+        setPassword( password );
+        this.tfsUrl = tfsUrl;
+        this.serverPath = serverPath;
+        this.workspace = workspace;
+    }
+
+    public String getTfsUrl()
+    {
+        return tfsUrl;
+    }
+
+    public String getWorkspace()
+    {
+        return workspace;
+    }
+
+    public String getServerPath()
+    {
+        return serverPath;
+    }
+
+    public String getUserPassword()
+    {
+        String userPassword = null;
+
+        if ( !StringUtils.isEmpty( getUser() ) )
+        {
+            userPassword = getUser();
+
+            if ( !StringUtils.isEmpty( getPassword() ) )
+            {
+                userPassword += ";" + getPassword();
+            }
+        }
+        return userPassword;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/TfsScmProviderRepository.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,54 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.add.AbstractAddCommand;
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+public class TfsAddCommand
+    extends AbstractAddCommand
+{
+
+    protected ScmResult executeAddCommand( ScmProviderRepository r, ScmFileSet f, String m, boolean b )
+        throws ScmException
+    {
+        TfsCommand command = createCommand( r, f );
+        FileListConsumer fileConsumer = new FileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        int status = command.execute( fileConsumer, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new AddScmResult( command.getCommandline(), "Error code for TFS add command - " + status,
+                                     err.getOutput(), false );
+        return new AddScmResult( command.getCommandline(), fileConsumer.getFiles() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
+    {
+        TfsCommand command = new TfsCommand( "add", r, f, getLogger() );        
+        command.addArgument( f );
+        return command;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsAddCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,62 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.branch.AbstractBranchCommand;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.codehaus.plexus.util.cli.CommandLineUtils.StringStreamConsumer;
+
+public class TfsBranchCommand
+    extends AbstractBranchCommand
+{
+
+    protected ScmResult executeBranchCommand( ScmProviderRepository r, ScmFileSet f, String branch, String message )
+        throws ScmException
+    {
+        TfsCommand command = createCommand( r, f, branch );
+        StringStreamConsumer out = new StringStreamConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+        {
+            return new BranchScmResult( command.getCommandline(), "Error code for TFS branch command - " + status,
+                                        err.getOutput(), false );
+        }
+        return new BranchScmResult( command.getCommandline(), new ArrayList() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String branch )
+    {
+        TfsCommand command = new TfsCommand( "branch", r, f, getLogger() );
+        command.addArgument( f.getBasedir().getAbsolutePath() );
+        command.addArgument( "-checkin" );
+        command.addArgument( branch );
+        return command;
+    }
+    
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsBranchCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,259 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.ScmBranch;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.apache.maven.scm.util.AbstractConsumer;
+
+public class TfsChangeLogCommand
+    extends AbstractChangeLogCommand
+{
+
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository r, ScmFileSet f, Date startDate,
+                                                          Date endDate, ScmBranch branch, String datePattern )
+        throws ScmException
+    {
+        ArrayList changeLogs = new ArrayList();
+        Iterator iter = f.getFileList().iterator();
+        if ( !iter.hasNext() )
+        {
+            ArrayList dir = new ArrayList();
+            // No files to iterate
+            dir.add( f.getBasedir() );
+            iter = dir.iterator();
+        }
+        TfsCommand command = null;
+        // tf history takes only one file arg
+        while ( iter.hasNext() )
+        {
+            TfsChangeLogConsumer out = new TfsChangeLogConsumer( getLogger() );
+            ErrorStreamConsumer err = new ErrorStreamConsumer();
+
+            command = createCommand( r, f, ( (File) iter.next() ) );
+            int status = command.execute( out, err );
+
+            if ( status != 0 || ( !out.hasBeenFed() &amp;&amp; err.hasBeenFed() ) )
+                return new ChangeLogScmResult( command.getCommandline(), "Error code for TFS changelog command - "
+                    + status, err.getOutput(), false );
+            changeLogs.addAll( out.getLogs() );
+        }
+        return new ChangeLogScmResult( command.getCommandline(), new ChangeLogSet( changeLogs, startDate, endDate ) );
+
+    }
+
+    protected TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, File file )
+    {
+        TfsCommand command = new TfsCommand( "history", r, f, getLogger() );
+        command.addArgument( "-format:detailed" );
+        command.addArgument( file.getName() );
+        return command;
+    }
+}
+
+class TfsChangeLogConsumer
+    extends AbstractConsumer
+{
+
+    private static final String PATTERN =
+        "^[^:]*:[ \t]([0-9]*)\n" + "[^:]*:[ \t](.*)\n[^:]*:[ \t](.*)\n"
+            + "[^:]*:((?:\n.*)*)\n\n[^\n :]*:(?=\n  )((?:\n[ \t]+.*)*)";
+
+    private static final String PATTERN_ITEM = "\n  ([^$]+) (\\$/.*)";
+
+    ArrayList logs = new ArrayList();
+
+    String buffer = "";
+
+    boolean fed = false;
+
+    public TfsChangeLogConsumer( ScmLogger logger )
+    {
+        super( logger );
+    }
+
+    public void consumeLine( String line )
+    {
+        fed = true;
+        if ( line.startsWith( "-----" ) )
+        {
+            addChangeLog();
+        }
+        buffer += line + "\n";
+    }
+
+    public List getLogs()
+    {
+        addChangeLog();
+        return logs;
+    }
+
+    private void addChangeLog()
+    {
+        if ( !buffer.equals( "" ) )
+        {
+            Pattern p = Pattern.compile( PATTERN );
+            Matcher m = p.matcher( buffer );
+            if ( m.find() )
+            {
+                String revision = m.group( 1 ).trim();
+                String username = m.group( 2 ).trim();
+                String dateString = m.group( 3 ).trim();
+                String comment = m.group( 4 ).trim();
+                Pattern itemPattern = Pattern.compile( PATTERN_ITEM );
+                Matcher itemMatcher = itemPattern.matcher( m.group( 5 ) );
+                List files = new ArrayList();
+                while ( itemMatcher.find() )
+                {
+                    ChangeFile file = new ChangeFile( itemMatcher.group( 2 ).trim(), revision );
+                    files.add( file );
+                }
+                Date date;
+                try
+                {
+                    date = parseDate( dateString );
+                }
+                catch ( ParseException e )
+                {
+                    getLogger().error( "Date parse error", e );
+                    throw new RuntimeException( e );
+                }
+
+                ChangeSet change = new ChangeSet( date, comment, username, files );
+                logs.add( change );
+            }
+            buffer = "";
+        }
+    }
+
+    public boolean hasBeenFed()
+    {
+        return fed;
+    }
+
+    protected static Date parseDate( String dateString )
+        throws ParseException
+    {
+        Date date = null;
+        try
+        {
+            // Use the depricated Date.parse method as this is very good at
+            // detecting
+            // dates commonly output by the US and UK standard locales of
+            // dotnet that
+            // are output by the Microsoft command line client.
+            date = new Date( Date.parse( dateString ) );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            // ignore - parse failed.
+        }
+        if ( date == null )
+        {
+            // The old fashioned way did not work. Let's try it using a more
+            // complex
+            // alternative.
+            DateFormat[] formats = createDateFormatsForLocaleAndTimeZone( null, null );
+            return parseWithFormats( dateString, formats );
+        }
+        return date;
+    }
+
+    private static Date parseWithFormats( String input, DateFormat[] formats )
+        throws ParseException
+    {
+        ParseException parseException = null;
+        for ( int i = 0; i &lt; formats.length; i++ )
+        {
+            try
+            {
+                return formats[i].parse( input );
+            }
+            catch ( ParseException ex )
+            {
+                parseException = ex;
+            }
+        }
+
+        throw parseException;
+    }
+
+    /**
+     * Build an array of DateFormats that are commonly used for this locale and timezone.
+     */
+    private static DateFormat[] createDateFormatsForLocaleAndTimeZone( Locale locale, TimeZone timeZone )
+    {
+        if ( locale == null )
+        {
+            locale = Locale.getDefault();
+        }
+
+        if ( timeZone == null )
+        {
+            timeZone = TimeZone.getDefault();
+        }
+
+        List formats = new ArrayList();
+
+        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
+        {
+            for ( int timeStyle = DateFormat.FULL; timeStyle &lt;= DateFormat.SHORT; timeStyle++ )
+            {
+                DateFormat df = DateFormat.getDateTimeInstance( dateStyle, timeStyle, locale );
+                if ( timeZone != null )
+                {
+                    df.setTimeZone( timeZone );
+                }
+                formats.add( df );
+            }
+        }
+
+        for ( int dateStyle = DateFormat.FULL; dateStyle &lt;= DateFormat.SHORT; dateStyle++ )
+        {
+            DateFormat df = DateFormat.getDateInstance( dateStyle, locale );
+            df.setTimeZone( timeZone );
+            formats.add( df );
+        }
+
+        return (DateFormat[]) formats.toArray( new DateFormat[formats.size()] );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsChangeLogCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,58 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+public class TfsCheckInCommand
+    extends AbstractCheckInCommand
+{
+
+    protected CheckInScmResult executeCheckInCommand( ScmProviderRepository r, ScmFileSet f, String m, ScmVersion v )
+        throws ScmException
+    {
+
+        TfsCommand command = createCommand( r, f, m );
+        FileListConsumer fileConsumer = new FileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        int status = command.execute( fileConsumer, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new CheckInScmResult( command.getCommandline(), "Error code for TFS checkin command - " + status,
+                                         err.getOutput(), false );
+        return new CheckInScmResult( command.getCommandline(), fileConsumer.getFiles() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String m )
+    {
+        TfsCommand command = new TfsCommand( "checkin", r, f, getLogger() );
+        command.addArgument( "-noprompt" );
+        if ( m != null &amp;&amp; !m.equals( "" ) )
+            command.addArgument( "-comment:" + m + "" );
+        command.addArgument( f );
+        return command;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckInCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,187 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+// Usage: mvn scm:checkout -DcheckoutDirectory=&lt;dir&gt;
+public class TfsCheckOutCommand
+    extends AbstractCheckOutCommand
+{
+
+    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v,
+                                                        boolean recursive )
+        throws ScmException
+    {
+        TfsScmProviderRepository tfsRepo = (TfsScmProviderRepository) r;
+        String url = tfsRepo.getServerPath();
+        String tfsUrl = tfsRepo.getTfsUrl();
+        String workspace = tfsRepo.getWorkspace();
+
+        // Try creating workspace
+        boolean workspaceProvided = workspace != null &amp;&amp; !workspace.trim().equals( "" );
+        if ( workspaceProvided )
+            createWorkspace( r, f, workspace, tfsUrl );
+
+        TfsCommand command;
+        int status;
+
+        if ( workspaceProvided )
+            status = executeUnmapCommand( r, f );
+
+        ErrorStreamConsumer out = new ErrorStreamConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        if ( workspaceProvided )
+        {
+            command = new TfsCommand( "workfold", r, null, getLogger() );
+            command.addArgument( "-workspace:" + workspace );
+            command.addArgument( "-map" );
+            command.addArgument( url );
+            command.addArgument( f.getBasedir().getAbsolutePath() );
+            status = command.execute( out, err );
+            if ( status != 0 || err.hasBeenFed() )
+                return new CheckOutScmResult( command.getCommandline(),
+                                              "Error code for TFS checkout (workfold map) command - " + status,
+                                              err.getOutput(), false );
+        }
+        FileListConsumer fileConsumer = new FileListConsumer();
+        err = new ErrorStreamConsumer();
+        command = createGetCommand( r, f, v, recursive );
+        status = command.execute( fileConsumer, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new CheckOutScmResult( command.getCommandline(), "Error code for TFS checkout (get) command - "
+                + status, err.getOutput(), false );
+        return new CheckOutScmResult( command.getCommandline(), fileConsumer.getFiles() );
+    }
+
+    TfsCommand createGetCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v, boolean recursive )
+    {
+        TfsCommand command = new TfsCommand( "get", r, f, getLogger() );
+        if ( recursive )
+            command.addArgument( "-recursive" );
+        command.addArgument( "-force" );
+        if ( v != null &amp;&amp; !v.equals( "" ) )
+        {
+            String vType = "";
+            if ( v.getType().equals( "Tag" ) )
+                vType = "L";
+            if ( v.getType().equals( "Revision" ) )
+                vType = "C";
+            command.addArgument( "-version:" + vType + v.getName() );
+        }
+        command.addArgument( f.getBasedir().getAbsolutePath() );
+        return command;
+    }
+
+    public int executeUnmapCommand( ScmProviderRepository r, ScmFileSet f )
+        throws ScmException
+    {
+        TfsScmProviderRepository tfsRepo = (TfsScmProviderRepository) r;
+        String url = tfsRepo.getServerPath();
+        String workspace = tfsRepo.getWorkspace();
+        ErrorStreamConsumer out = new ErrorStreamConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        TfsCommand command = new TfsCommand( "workfold", r, null, getLogger() );
+        command.addArgument( "-workspace:" + workspace );
+        command.addArgument( "-unmap" );
+        command.addArgument( url );
+        return command.execute( out, err );
+    }
+
+    private void createWorkspace( ScmProviderRepository r, ScmFileSet f, String workspace, String url )
+        throws ScmException
+    {
+        ErrorStreamConsumer out = new ErrorStreamConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        // Checkout dir may not exist yet
+        TfsCommand command = new TfsCommand( "workspace", r, null, getLogger() );
+        command.addArgument( "-new" );
+        command.addArgument( "-comment:Creating workspace for maven command" );
+        command.addArgument( "-server:" + url );
+        command.addArgument( workspace );
+        int status = command.execute( out, err );
+    }
+
+}
+
+class FileListConsumer
+    implements StreamConsumer
+{
+
+    boolean fed = false;
+
+    String currentDir = "";
+
+    ArrayList files = new ArrayList();
+
+    public void consumeLine( String line )
+    {
+        fed = true;
+        if ( line.endsWith( ":" ) )
+        {
+            currentDir = line.substring( 0, line.lastIndexOf( ':' ) );
+            ScmFile scmFile = new ScmFile( currentDir, ScmFileStatus.CHECKED_OUT );
+            if ( !files.contains( scmFile ) )
+                files.add( scmFile );
+        }
+        else if ( line.trim().equals( "" ) )
+        {
+            currentDir = "";
+        }
+        else if ( !currentDir.equals( "" ) &amp;&amp; line.contains( " " ) )
+        {
+            String filename = line.split( " " )[1];
+            files.add( getScmFile( filename ) );
+        }
+        else
+        {
+            files.add( getScmFile( line ) );
+        }
+    }
+
+    protected ScmFile getScmFile( String filename )
+    {
+        return new ScmFile( new File( currentDir, filename ).getAbsolutePath(), ScmFileStatus.CHECKED_OUT );
+    }
+
+    public List getFiles()
+    {
+        return files;
+    }
+
+    public boolean hasBeenFed()
+    {
+        return fed;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCheckOutCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,120 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.codehaus.plexus.util.cli.CommandLineUtils.StringStreamConsumer;
+
+public class TfsCommand
+{
+
+    private ScmLogger logger;
+
+    Commandline command;
+
+    public TfsCommand( String cmd, ScmProviderRepository r, ScmFileSet f, ScmLogger logger )
+    {
+        command = new Commandline();
+        command.setExecutable( "tf" );
+        if ( f != null )
+            command.setWorkingDirectory( f.getBasedir().getAbsolutePath() );
+        command.createArgument().setValue( cmd );
+        if ( r.getUser() != null )
+        {
+            command.createArgument().setValue( "-login:" + r.getUser() + "," + r.getPassword() );
+        }
+        this.logger = logger;
+    }
+
+    public void addArgument( ScmFileSet f )
+    {
+        info( "files: " + f.getBasedir().getAbsolutePath() );
+        Iterator iter = f.getFileList().iterator();
+        while ( iter.hasNext() )
+            command.createArgument().setValue( ( (File) iter.next() ).getPath() );
+    }
+
+    public void addArgument( String s )
+    {
+        command.createArgument().setValue( s );
+    }
+
+    public int execute( StreamConsumer out, ErrorStreamConsumer err )
+        throws ScmException
+    {
+        info( "Command line - " + getCommandline() );
+        int status;
+        try
+        {
+            status = CommandLineUtils.executeCommandLine( command, out, err );
+        }
+        catch ( CommandLineException e )
+        {
+            throw new ScmException( "Error while executing TFS command line - " + getCommandline(), e );
+        }
+        info( "err - " + err.getOutput() );
+        if ( out instanceof StringStreamConsumer )
+        {
+            StringStreamConsumer sc = (StringStreamConsumer) out;
+            debug( sc.getOutput() );
+        }
+        if ( out instanceof FileListConsumer )
+        {
+            FileListConsumer f = (FileListConsumer) out;
+            for ( Iterator i = f.getFiles().iterator(); i.hasNext(); )
+            {
+                ScmFile file = (ScmFile) i.next();
+                debug( file.getPath() );
+            }
+        }
+
+        return status;
+    }
+
+    public String getCommandline()
+    {
+        return command.toString();
+    }
+
+    private void info( String message )
+    {
+        if ( logger != null )
+            logger.info( message );
+    }
+
+    private void debug( String message )
+    {
+        if ( logger != null )
+            logger.debug( message );
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,54 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.edit.AbstractEditCommand;
+import org.apache.maven.scm.command.edit.EditScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+//Usage: mvn scm:edit -DworkingDirectory=&lt;dir&gt; -Dincludes=*
+public class TfsEditCommand
+    extends AbstractEditCommand
+{
+
+    protected ScmResult executeEditCommand( ScmProviderRepository r, ScmFileSet f )
+        throws ScmException
+    {
+        FileListConsumer out = new FileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        TfsCommand command = createCommand( r, f );
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new EditScmResult( command.getCommandline(), "Error code for TFS edit command - " + status,
+                                      err.getOutput(), false );
+        return new EditScmResult( command.getCommandline(), out.getFiles() );
+    }
+
+    protected TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
+    {
+        TfsCommand command = new TfsCommand( "checkout", r, f, getLogger() );
+        command.addArgument( f );
+        return command;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsEditCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,70 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.list.AbstractListCommand;
+import org.apache.maven.scm.command.list.ListScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+public class TfsListCommand
+    extends AbstractListCommand
+{
+
+    protected ListScmResult executeListCommand( ScmProviderRepository r, ScmFileSet f, boolean recursive, ScmVersion v )
+        throws ScmException
+    {
+        FileListConsumer out = new ServerFileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        TfsCommand command = createCommand( r, f, recursive );
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new ListScmResult( command.getCommandline(), "Error code for TFS list command - " + status,
+                                      err.getOutput(), false );
+        return new ListScmResult( command.getCommandline(), out.getFiles() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, boolean recursive )
+    {
+        TfsCommand command = new TfsCommand( "dir", r, f, getLogger() );
+        if ( recursive )
+            command.addArgument( "-recursive" );
+        command.addArgument( f );
+        return command;
+    }
+
+}
+
+class ServerFileListConsumer
+    extends FileListConsumer
+{
+    protected ScmFile getScmFile( String filename )
+    {
+        if ( filename.startsWith( "$" ) )
+            filename = filename.replace( "$", "" );
+        String path = currentDir + "/" + filename;
+        return new ScmFile( path, ScmFileStatus.UNKNOWN );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsListCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,156 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.command.status.AbstractStatusCommand;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+public class TfsStatusCommand
+    extends AbstractStatusCommand
+{
+
+    protected StatusScmResult executeStatusCommand( ScmProviderRepository r, ScmFileSet f )
+        throws ScmException
+    {
+        TfsScmProviderRepository tfsRepo = (TfsScmProviderRepository) r;
+
+        TfsCommand command = createCommand( tfsRepo, f );
+        ChangedFileConsumer out = new ChangedFileConsumer( getLogger() );
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new StatusScmResult( command.getCommandline(), "Error code for TFS status command - " + status,
+                                        err.getOutput(), false );
+        Iterator iter = out.getChangedFiles().iterator();
+        getLogger().debug( "Iterating" );
+        while ( iter.hasNext() )
+        {
+            ScmFile file = (ScmFile) iter.next();
+            getLogger().debug( file.getPath() + ":" + file.getStatus() );
+        }
+        return new StatusScmResult( command.getCommandline(), out.getChangedFiles() );
+    }
+
+    TfsCommand createCommand( TfsScmProviderRepository r, ScmFileSet f )
+    {
+        String url = r.getServerPath();
+        String workspace = r.getWorkspace();
+        TfsCommand command = new TfsCommand( "status", r, f, getLogger() );
+        if ( workspace != null &amp;&amp; !workspace.trim().equals( "" ) )
+            command.addArgument( "-workspace:" + workspace );
+        command.addArgument( "-recursive" );
+        command.addArgument( "-format:detailed" );
+        command.addArgument( url );
+        return command;
+    }
+}
+
+class ChangedFileConsumer
+    implements StreamConsumer
+{
+
+    private ScmLogger logger;
+
+    static final String KEY_CHANGE = "Change";
+
+    static final String KEY_LOCAL_ITEM = "Local item";
+
+    static final String CHANGE_EDIT = "edit";
+
+    static final String CHANGE_ADD = "add";
+
+    HashMap values = new HashMap();
+
+    ArrayList changedFiles = new ArrayList();
+
+    public ChangedFileConsumer( ScmLogger logger )
+    {
+        this.logger = logger;
+    }
+
+    public void consumeLine( String line )
+    {
+        if ( line.contains( ":" ) )
+        {
+            String[] s = line.split( ":", 2 );
+            if ( s.length &gt; 1 )
+                values.put( s[0].trim(), s[1].trim() );
+        }
+        if ( line.trim().equals( "" ) )
+        {
+            extractChangedFile();
+        }
+        logger.debug( "line -" + line );
+    }
+
+    private void extractChangedFile()
+    {
+        String change = getChange();
+        if ( change != null )
+        {
+            ScmFileStatus stat = ScmFileStatus.UNKNOWN;
+            if ( change.equals( ChangedFileConsumer.CHANGE_EDIT ) )
+                stat = ScmFileStatus.MODIFIED;
+            if ( change.equals( ChangedFileConsumer.CHANGE_ADD ) )
+                stat = ScmFileStatus.ADDED;
+            changedFiles.add( new ScmFile( getLocalPath(), stat ) );
+            values.clear();
+        }
+    }
+
+    public List getChangedFiles()
+    {
+        if ( values.size() &gt; 0 )
+        {
+            extractChangedFile();
+        }
+        return changedFiles;
+    }
+
+    private String getChange()
+    {
+        return (String) values.get( KEY_CHANGE );
+    }
+
+    private String getLocalPath()
+    {
+        String local = (String) values.get( KEY_LOCAL_ITEM );
+        if ( local != null )
+        {
+            local = local.split( "]", 2 )[1].trim();
+        }
+        return local;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsStatusCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,77 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+import org.codehaus.plexus.util.cli.CommandLineUtils.StringStreamConsumer;
+
+public class TfsTagCommand
+    extends AbstractTagCommand
+{
+
+    protected ScmResult executeTagCommand( ScmProviderRepository r, ScmFileSet f, String tag, String message )
+        throws ScmException
+    {
+        return executeTagCommand( r, f, tag, new ScmTagParameters( message ) );
+    }
+
+    protected ScmResult executeTagCommand( ScmProviderRepository r, ScmFileSet f, String tag,
+                                           ScmTagParameters scmTagParameters )
+        throws ScmException
+    {
+        TfsCommand command = createCommand( r, f, tag, scmTagParameters );
+
+        StringStreamConsumer out = new StringStreamConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new TagScmResult( command.getCommandline(), "Error code for TFS label command - " + status,
+                                     err.getOutput(), false );
+        return new TagScmResult( command.getCommandline(), f.getFileList() );
+
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, String tag,
+                                        ScmTagParameters scmTagParameters )
+    {
+        TfsScmProviderRepository tfsRepo = (TfsScmProviderRepository) r;
+        String url = tfsRepo.getServerPath();
+
+        TfsCommand command = new TfsCommand( "label", r, f, getLogger() );
+        command.addArgument( tag );
+        command.addArgument( url );
+        command.addArgument( "-recursive" );
+        command.addArgument( "-child:replace" );
+        String message = scmTagParameters.getMessage();
+        if ( message != null &amp;&amp; !message.equals( "" ) )
+            command.addArgument( "-comment:" + message );
+        return command;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,54 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.unedit.AbstractUnEditCommand;
+import org.apache.maven.scm.command.unedit.UnEditScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+// Usage: mvn scm:unedit -DworkingDirectory=&lt;dir&gt; -Dincludes=*
+public class TfsUnEditCommand
+    extends AbstractUnEditCommand
+{
+
+    protected ScmResult executeUnEditCommand( ScmProviderRepository r, ScmFileSet f )
+        throws ScmException
+    {
+        FileListConsumer out = new FileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        TfsCommand command = createCommand( r, f );
+        int status = command.execute( out, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new UnEditScmResult( command.getCommandline(), "Error code for TFS unedit command - " + status,
+                                        err.getOutput(), false );
+        return new UnEditScmResult( command.getCommandline(), out.getFiles() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f )
+    {
+        TfsCommand command = new TfsCommand( "undo", r, f, getLogger() );
+        command.addArgument( f );
+        return command;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUnEditCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,73 @@
+package org.apache.maven.scm.provider.tfs.command;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.changelog.ChangeLogCommand;
+import org.apache.maven.scm.command.update.AbstractUpdateCommand;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.TfsScmProviderRepository;
+import org.apache.maven.scm.provider.tfs.command.consumer.ErrorStreamConsumer;
+
+public class TfsUpdateCommand
+    extends AbstractUpdateCommand
+{
+
+    protected UpdateScmResult executeUpdateCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v )
+        throws ScmException
+    {
+        FileListConsumer fileConsumer = new FileListConsumer();
+        ErrorStreamConsumer err = new ErrorStreamConsumer();
+        TfsCommand command = createCommand( r, f, v );
+        int status = command.execute( fileConsumer, err );
+        if ( status != 0 || err.hasBeenFed() )
+            return new UpdateScmResult( command.getCommandline(), "Error code for TFS update command - " + status,
+                                        err.getOutput(), false );
+        return new UpdateScmResult( command.getCommandline(), fileConsumer.getFiles() );
+    }
+
+    TfsCommand createCommand( ScmProviderRepository r, ScmFileSet f, ScmVersion v )
+    {
+        String serverPath = ( (TfsScmProviderRepository) r ).getServerPath();
+        TfsCommand command = new TfsCommand( "get", r, f, getLogger() );
+        command.addArgument( serverPath );
+        if ( v != null &amp;&amp; !v.equals( "" ) )
+        {
+            String vType = "";
+            if ( v.getType().equals( "Tag" ) )
+                vType = "L";
+            if ( v.getType().equals( "Revision" ) )
+                vType = "C";
+            command.addArgument( "-version:" + vType + v.getName() );
+        }
+        return command;
+    }
+
+    protected ChangeLogCommand getChangeLogCommand()
+    {
+        TfsChangeLogCommand changeLogCommand = new TfsChangeLogCommand();
+        changeLogCommand.setLogger( getLogger() );
+        return changeLogCommand;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/TfsUpdateCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java?rev=807349&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java Mon Aug 24 19:41:04 2009
@@ -0,0 +1,41 @@
+package org.apache.maven.scm.provider.tfs.command.consumer;
+
+/*
+ * 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.
+ */
+
+import org.codehaus.plexus.util.cli.CommandLineUtils.StringStreamConsumer;
+
+public class ErrorStreamConsumer
+    extends StringStreamConsumer
+{
+
+    private boolean fed = false;
+
+    public void consumeLine( String line )
+    {
+        fed = true;
+        super.consumeLine( line );
+    }
+
+    public boolean hasBeenFed()
+    {
+        return fed;
+    }
+
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-tfs/src/main/java/org/apache/maven/scm/provider/tfs/command/consumer/ErrorStreamConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r806089 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command: BazaarConstants.java checkin/BazaarCheckInCommand.java</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090820084658.CA0392388895@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090820084658-CA0392388895@eris-apache-org%3e</id>
<updated>2009-08-20T08:46:58Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Thu Aug 20 08:46:58 2009
New Revision: 806089

URL: http://svn.apache.org/viewvc?rev=806089&amp;view=rev
Log:
[SCM-493] use --no-strict option while pushing. Otherwise bzr complains if there are other
local modifications than the currently added

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkin/BazaarCheckInCommand.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java?rev=806089&amp;r1=806088&amp;r2=806089&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
Thu Aug 20 08:46:58 2009
@@ -108,6 +108,8 @@
 
     public static final String NO_RECURSE_OPTION = "--no-recurse";
 
+    public static final String NO_STRICT_OPTION = "--no-strict";
+
     public static final String MESSAGE_OPTION = "--message";
 
     public static final String REVISION_OPTION = "--revision";

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkin/BazaarCheckInCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkin/BazaarCheckInCommand.java?rev=806089&amp;r1=806088&amp;r2=806089&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkin/BazaarCheckInCommand.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkin/BazaarCheckInCommand.java
Thu Aug 20 08:46:58 2009
@@ -97,7 +97,7 @@
         BazaarScmProviderRepository repository = (BazaarScmProviderRepository) repo;
         if ( !repository.getURI().equals( fileSet.getBasedir().getAbsolutePath() ) )
         {
-            String[] pushCmd = new String[] { BazaarConstants.PUSH_CMD, repository.getURI()
};
+            String[] pushCmd = new String[] { BazaarConstants.PUSH_CMD, BazaarConstants.NO_STRICT_OPTION,
repository.getURI() };
             result =
                 BazaarUtils.execute( new BazaarConsumer( getLogger() ), getLogger(), fileSet.getBasedir(),
pushCmd );
         }




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r806087 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src: main/java/org/apache/maven/scm/provider/bazaar/ main/java/org/apache/maven/scm/provider/bazaar/command/ main/java/org/apache/maven/scm/provider/bazaar/command/...</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090820084116.4FBA4238888E@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090820084116-4FBA4238888E@eris-apache-org%3e</id>
<updated>2009-08-20T08:41:15Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Thu Aug 20 08:41:15 2009
New Revision: 806087

URL: http://svn.apache.org/viewvc?rev=806087&amp;view=rev
Log:
[SCM-492] tagging support added
Submitted by: Johan Walles 
o applied with slight code reformatting - txs

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
  (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java?rev=806087&amp;r1=806086&amp;r2=806087&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
Thu Aug 20 08:41:15 2009
@@ -43,12 +43,12 @@
 
     private static final float PYTHON_REQ = 2.4f;
 
-    //Bazaar spesific
+    //Bazaar specific
     private static final String BAZAAR_VERSION_TAG = "bzr (bazaar-ng) ";
 
     private static final String BAZAAR_INSTALL_URL = "'http://bazaar-vcs.org/Installation'";
 
-    //Python spesific
+    //Python specific
     private static final String PYTHON_EXEC = "python";
 
     private static final String PYTHON_VERSION = "-V";

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java?rev=806087&amp;r1=806086&amp;r2=806087&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
Thu Aug 20 08:41:15 2009
@@ -30,6 +30,7 @@
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -41,6 +42,7 @@
 import org.apache.maven.scm.provider.bazaar.command.diff.BazaarDiffCommand;
 import org.apache.maven.scm.provider.bazaar.command.remove.BazaarRemoveCommand;
 import org.apache.maven.scm.provider.bazaar.command.status.BazaarStatusCommand;
+import org.apache.maven.scm.provider.bazaar.command.tag.BazaarTagCommand;
 import org.apache.maven.scm.provider.bazaar.command.update.BazaarUpdateCommand;
 import org.apache.maven.scm.provider.bazaar.repository.BazaarScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
@@ -205,6 +207,17 @@
     }
 
     /** {@inheritDoc} */
+    public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters
parameters )
+        throws ScmException
+    {
+        BazaarTagCommand command = new BazaarTagCommand();
+
+        command.setLogger( getLogger() );
+
+        return (TagScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    /** {@inheritDoc} */
     public UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet,
CommandParameters parameters )
         throws ScmException
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java?rev=806087&amp;r1=806086&amp;r2=806087&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
Thu Aug 20 08:41:15 2009
@@ -92,6 +92,16 @@
     public static final String REVNO_CMD = "revno";
 
     /**
+     * Create a tag
+     */
+    public static final String TAG_CMD = "tag";
+
+    /**
+     * List directory contents, bazaar style.
+     */
+    public static final String LS_CMD = "ls";
+    
+    /**
      * Show inventory of the current working copy or a revision
      */
     public static final String INVENTORY_CMD = "inventory";
@@ -104,7 +114,12 @@
 
     public static final String VERBOSE_OPTION = "--verbose";
 
+    /**
+     * Option to enable recursing into subdirectories.
+     */
+    public static final String RECURSIVE_OPTION = "--recursive";
+    
     public static final String VERSION = "version";
 
     public static final String CHECK = "check";
-}
+}
\ No newline at end of file

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java?rev=806087&amp;r1=806086&amp;r2=806087&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java
Thu Aug 20 08:41:15 2009
@@ -23,7 +23,6 @@
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.ScmVersion;
-import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -36,6 +35,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 
 /**
  * @author &lt;a href="mailto:torbjorn@smorgrav.org"&gt;Torbjï¿½rn Eikli Smï¿½rgrav&lt;/a&gt;
@@ -43,19 +43,12 @@
  */
 public class BazaarCheckOutCommand
     extends AbstractCheckOutCommand
-    implements Command
 {
     /** {@inheritDoc} */
     protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet
fileSet,
                                                         ScmVersion version, boolean recursive
)
         throws ScmException
     {
-
-        if ( version != null &amp;&amp; StringUtils.isNotEmpty( version.getName() ) )
-        {
-            throw new ScmException( "This provider can't handle tags." );
-        }
-
         BazaarScmProviderRepository repository = (BazaarScmProviderRepository) repo;
         String url = repository.getURI();
 
@@ -74,9 +67,17 @@
         }
 
         // Do the actual checkout
-        String[] checkoutCmd = new String[]{BazaarConstants.BRANCH_CMD, url, checkoutDir.getAbsolutePath()};
+        ArrayList checkoutCmd = new ArrayList();
+        checkoutCmd.add( BazaarConstants.BRANCH_CMD );
+        checkoutCmd.add( url );
+        checkoutCmd.add( checkoutDir.getAbsolutePath() );
+        if ( version != null &amp;&amp; StringUtils.isNotEmpty( version.getName() ) ) {
+             checkoutCmd.add( BazaarConstants.REVISION_OPTION );
+             checkoutCmd.add( "tag:" + version.getName() );
+        }
         BazaarConsumer checkoutConsumer = new BazaarConsumer( getLogger() );
-        BazaarUtils.execute( checkoutConsumer, getLogger(), checkoutDir.getParentFile(),
checkoutCmd );
+        BazaarUtils.execute( checkoutConsumer, getLogger(), checkoutDir.getParentFile(),
+                             (String[]) checkoutCmd.toArray( new String[0] ) );
 
         // Do inventory to find list of checkedout files
         String[] inventoryCmd = new String[]{BazaarConstants.INVENTORY_CMD};

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java?rev=806087&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
Thu Aug 20 08:41:15 2009
@@ -0,0 +1,77 @@
+/*
+ * 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.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import java.io.File;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+
+/**
+ * Parse output from "bzr ls".
+ * @author &lt;a href="mailto:johan.walles@gmail.com"&gt;Johan Walles&lt;/a&gt;
+ * @version $Id$
+ */
+class BazaarLsConsumer extends BazaarConsumer {
+    /**
+     * The root directory of this bazaar repository.
+     */
+    private File repositoryRoot;
+    
+    /**
+     * A list of the files found by ls.
+     */
+    private List files;
+    
+    /**
+     * Create a new "bzr ls" consumer.
+     * @param repositoryRoot The root directory of this bazaar repository.
+     * @param wantedStatus The status we'll report for the files listed.
+     */
+    public BazaarLsConsumer(ScmLogger logger,
+            File repositoryRoot,
+            ScmFileStatus wantedStatus) 
+    {
+        super( logger );
+        files = new LinkedList();
+    }
+    
+    public void doConsume( ScmFileStatus status, String trimmedLine ) {
+        if ( trimmedLine.endsWith( File.separator ) ) {
+            // Don't report directories
+            return;
+        }
+        
+        String path = new File( repositoryRoot, trimmedLine ).toString();
+        files.add( new ScmFile( path, ScmFileStatus.TAGGED ) );
+    }
+    
+    /**
+     * Answer what files were listed by bzr ls.
+     * @return A list of files listed by bzr ls.
+     */
+    public List getListedFiles() {
+        return files;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java?rev=806087&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
Thu Aug 20 08:41:15 2009
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.bazaar.BazaarUtils;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConstants;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+import org.apache.maven.scm.provider.bazaar.repository.BazaarScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author &lt;a href="mailto:johan.walles@gmail.com"&gt;Johan Walles&lt;/a&gt;
+ * @version $Id$
+ */
+public class BazaarTagCommand extends AbstractTagCommand {
+    protected ScmResult executeTagCommand( ScmProviderRepository repository,
+            ScmFileSet fileSet, String tagName,
+            ScmTagParameters scmTagParameters ) throws ScmException
+    {
+        if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) ) {
+            throw new ScmException( "tag name must be specified" );
+        }
+        
+        if ( !fileSet.getFileList().isEmpty() ) {
+            throw new ScmException( "tagging specific files is not allowed" );
+        }
+        
+        // Perform the tagging operation
+        File bazaarRoot = fileSet.getBasedir();
+        BazaarConsumer consumer = new BazaarConsumer( getLogger() );
+        String[] tagCmd = new String[] { BazaarConstants.TAG_CMD, tagName };
+        ScmResult tagResult = BazaarUtils.execute( consumer, getLogger(), bazaarRoot, tagCmd
);
+        if ( !tagResult.isSuccess() ) {
+            return new TagScmResult( null, tagResult );
+        }
+
+        // Do "bzr ls -R -r tag:tagName" to get a list of the tagged files
+        BazaarLsConsumer lsConsumer = 
+            new BazaarLsConsumer( getLogger(), bazaarRoot, ScmFileStatus.TAGGED );
+        String[] lsCmd = new String[] {
+                                       BazaarConstants.LS_CMD,
+                                       BazaarConstants.RECURSIVE_OPTION,
+                                       BazaarConstants.REVISION_OPTION,
+                                       "tag:" + tagName
+                                       };
+        ScmResult lsResult = BazaarUtils.execute(lsConsumer, getLogger(), bazaarRoot, lsCmd);
+        if ( !lsResult.isSuccess() ) {
+            return new TagScmResult( null, lsResult );
+        }
+        
+        // Push new tags to parent branch if any
+        BazaarScmProviderRepository bazaarRepository = (BazaarScmProviderRepository) repository;
+        if ( !bazaarRepository.getURI().equals( fileSet.getBasedir().getAbsolutePath() )
)
+        {
+            String[] pushCmd = new String[] { BazaarConstants.PUSH_CMD, bazaarRepository.getURI()
};
+            ScmResult pushResult =
+                BazaarUtils.execute( new BazaarConsumer( getLogger() ), getLogger(), fileSet.getBasedir(),
pushCmd );
+            if ( !pushResult.isSuccess() ) {
+                return new TagScmResult( null, pushResult );
+            }
+        }
+        
+        return new TagScmResult( lsConsumer.getListedFiles(), tagResult );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java?rev=806087&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
Thu Aug 20 08:41:15 2009
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import org.apache.maven.scm.provider.bazaar.BazaarRepoUtils;
+import org.apache.maven.scm.tck.command.tag.TagCommandTckTest;
+
+/**
+ * Tests for bzr tag command requiring an actual bzr client.
+ * 
+ * @author &lt;a href="mailto:johan.walles@gmail.com"&gt;Johan Walles&lt;/a&gt;
+ */
+public class BazaarTagCommandTckTest extends TagCommandTckTest {
+    public String getScmUrl() throws Exception {
+        return BazaarRepoUtils.getScmUrl();
+    }
+    
+    public void initRepo() throws Exception {
+        BazaarRepoUtils.initRepo();
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r804401 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src: main/java/org/apache/maven/scm/provider/bazaar/repository/ test/java/org/apache/maven/scm/provider/bazaar/repository/</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090814224624.9AF972388895@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090814224624-9AF972388895@eris-apache-org%3e</id>
<updated>2009-08-14T22:46:24Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Fri Aug 14 22:46:24 2009
New Revision: 804401

URL: http://svn.apache.org/viewvc?rev=804401&amp;view=rev
Log:
SCM-489 add support for the protocols bzr, bzr+ssh, ssh

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepository.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepositoryTest.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepository.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepository.java?rev=804401&amp;r1=804400&amp;r2=804401&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepository.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepository.java
Fri Aug 14 22:46:24 2009
@@ -44,6 +44,13 @@
 
     private static final String HTTPS = "https://";
 
+    private static final String BZR = "bzr://";
+
+    private static final String BZR_SSH = "bzr+ssh://";
+
+    /** this is basically an abbreviation of {@value #BZR_SSH} */
+    private static final String SSH = "ssh://";
+
     private static final String UNKNOWN = "";
 
     private final String path;
@@ -140,6 +147,18 @@
         {
             prot = HTTPS;
         }
+        else if ( url.startsWith( BZR ) )
+        {
+            prot = BZR;
+        }
+        else if ( url.startsWith( BZR_SSH ) )
+        {
+            prot = BZR_SSH;
+        }
+        else if ( url.startsWith( SSH ) )
+        {
+            prot = SSH;
+        }
 
         return prot;
     }
@@ -273,7 +292,13 @@
 
     private boolean needsAuthentication()
     {
-        return SFTP.equals( protocol ) || FTP.equals( protocol ) || HTTPS.equals( protocol
) || AFTP.equals( protocol );
+        return SFTP.equals( protocol ) || 
+               FTP.equals( protocol ) || 
+               HTTPS.equals( protocol ) || 
+               AFTP.equals( protocol ) ||
+               BZR.equals( protocol ) ||
+               BZR_SSH.equals( protocol ) ||
+               SSH.equals( protocol );
     }
 
     /** {@inheritDoc} */

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepositoryTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepositoryTest.java?rev=804401&amp;r1=804400&amp;r2=804401&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepositoryTest.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/repository/BazaarScmProviderRepositoryTest.java
Fri Aug 14 22:46:24 2009
@@ -116,6 +116,34 @@
         assertNull( repo.validateURI() );
     }
 
+    public void testBzrRepo() {
+        testAuthenticationProtocolRepo( "bzr" );
+    }
+
+    public void testBzrPlusSshRepo() {
+        testAuthenticationProtocolRepo( "bzr+ssh" );
+    }
+
+    public void testSshRepo() {
+        testAuthenticationProtocolRepo( "ssh" );
+    }
+
+    private void testAuthenticationProtocolRepo(String protocol) {
+        String url = protocol + "://myserver.net/testroot/myproject/trunk/";
+        BazaarScmProviderRepository repo = new BazaarScmProviderRepository( url );
+
+        repo.setPassword( "Password" );
+        repo.setUser( "User" );
+        repo.setPassphrase( "Passphrase" );
+        assertNull( repo.validateURI() );
+
+        assertEquals( protocol +  "://User:Password@myserver.net/testroot/myproject/trunk/",
repo.getURI() );
+        assertNull( repo.validateURI() );
+        repo.setPort( 4776 );
+        assertEquals( protocol + "://User:Password@myserver.net:4776/testroot/myproject/trunk/",
repo.getURI() );
+        assertNull( repo.validateURI() );
+   
+    }
     /**
      * @throws Exception
      */




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r804398 - /maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java</title>
<author><name>struberg@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090814223149.4B27E2388895@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090814223149-4B27E2388895@eris-apache-org%3e</id>
<updated>2009-08-14T22:31:49Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: struberg
Date: Fri Aug 14 22:31:48 2009
New Revision: 804398

URL: http://svn.apache.org/viewvc?rev=804398&amp;view=rev
Log:
SCM-490 add the identifier status 'adding'. This is needed for bzr add.

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java?rev=804398&amp;r1=804397&amp;r2=804398&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConsumer.java
Fri Aug 14 22:31:48 2009
@@ -67,6 +67,7 @@
     static
     {
         IDENTIFIERS.put( "added", ScmFileStatus.ADDED );
+        IDENTIFIERS.put( "adding", ScmFileStatus.ADDED );
         IDENTIFIERS.put( "unknown", ScmFileStatus.UNKNOWN );
         IDENTIFIERS.put( "modified", ScmFileStatus.MODIFIED );
         IDENTIFIERS.put( "removed", ScmFileStatus.DELETED );




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r802384 - in /maven/scm/trunk/maven-scm-plugin/src/site: apt/index.apt site.xml</title>
<author><name>vsiveton@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090808140137.46F7E2388893@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090808140137-46F7E2388893@eris-apache-org%3e</id>
<updated>2009-08-08T14:01:37Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: vsiveton
Date: Sat Aug  8 14:01:36 2009
New Revision: 802384

URL: http://svn.apache.org/viewvc?rev=802384&amp;view=rev
Log:
o fixed ambiguous links
o added Doxia xsd

Modified:
    maven/scm/trunk/maven-scm-plugin/src/site/apt/index.apt
    maven/scm/trunk/maven-scm-plugin/src/site/site.xml

Modified: maven/scm/trunk/maven-scm-plugin/src/site/apt/index.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/apt/index.apt?rev=802384&amp;r1=802383&amp;r2=802384&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/site/apt/index.apt (original)
+++ maven/scm/trunk/maven-scm-plugin/src/site/apt/index.apt Sat Aug  8 14:01:36 2009
@@ -35,58 +35,58 @@
 
 The SCM Plugin has 16 goals:
 
- * {{{branch-mojo.html}scm:branch}} - branch the project
+ * {{{./branch-mojo.html}scm:branch}} - branch the project
 
- * {{{validate-mojo.html}scm:validate}} - validate the scm information in the pom
+ * {{{./validate-mojo.html}scm:validate}} - validate the scm information in the pom
 
- * {{{add-mojo.html}scm:add}} - command to add file
+ * {{{./add-mojo.html}scm:add}} - command to add file
 
- * {{{unedit-mojo.html}scm:unedit}} - command to stop editing the working copy
+ * {{{./unedit-mojo.html}scm:unedit}} - command to stop editing the working copy
 
- * {{{export-mojo.html}scm:export}} - command to get a fresh exported copy
+ * {{{./export-mojo.html}scm:export}} - command to get a fresh exported copy
 
- * {{{bootstrap-mojo.html}scm:bootstrap}} - command to checkout and build a project
+ * {{{./bootstrap-mojo.html}scm:bootstrap}} - command to checkout and build a project
 
- * {{{changelog-mojo.html}scm:changelog}} - command to show the source code revisions
+ * {{{./changelog-mojo.html}scm:changelog}} - command to show the source code revisions
 
- * {{{list-mojo.html}scm:list}} - command for get the list of project files
+ * {{{./list-mojo.html}scm:list}} - command for get the list of project files
 
- * {{{checkin-mojo.html}scm:checkin}} - command for commiting changes
+ * {{{./checkin-mojo.html}scm:checkin}} - command for commiting changes
 
- * {{{checkout-mojo.html}scm:checkout}} - command for getting the source code
+ * {{{./checkout-mojo.html}scm:checkout}} - command for getting the source code
 
- * {{{status-mojo.html}scm:status}} - command for showing the scm status of the working copy
+ * {{{./status-mojo.html}scm:status}} - command for showing the scm status of the working
copy
 
- * {{{update-mojo.html}scm:update}} - command for updating the working copy with the latest
changes
+ * {{{./update-mojo.html}scm:update}} - command for updating the working copy with the latest
changes
 
- * {{{diff-mojo.html}scm:diff}} - command for showing the difference of the working copy
with the remote one
+ * {{{./diff-mojo.html}scm:diff}} - command for showing the difference of the working copy
with the remote one
 
- * {{{update-subprojects-mojo.html}scm:update-subprojects}} - command for updating all projects
in a multi project build
+ * {{{./update-subprojects-mojo.html}scm:update-subprojects}} - command for updating all
projects in a multi project build
 
- * {{{edit-mojo.html}scm:edit}} - command for starting edit on the working copy
+ * {{{./edit-mojo.html}scm:edit}} - command for starting edit on the working copy
 
- * {{{tag-mojo.html}scm:tag}} - command for tagging a certain revision
+ * {{{./tag-mojo.html}scm:tag}} - command for tagging a certain revision
 
  []
 
 * Usage
 
-  General instructions on how to use the SCM Plugin can be found on the {{{usage.html}usage
page}}. Some more
+  General instructions on how to use the SCM Plugin can be found on the {{{./usage.html}usage
page}}. Some more
   specific use cases are described in the examples given below. Last but not least, users
occasionally contribute
   additional examples, tips or errata to the
   {{{http://docs.codehaus.org/display/MAVENUSER/SCM+Plugin}plugin's wiki page}}.
 
   In case you still have questions regarding the plugin's usage, please feel
-  free to contact the {{{mail-lists.html}user mailing list}}. The posts to the mailing list
are archived and could
+  free to contact the {{{./mail-lists.html}user mailing list}}. The posts to the mailing
list are archived and could
   already contain the answer to your question as part of an older thread. Hence, it is also
worth browsing/searching
-  the {{{mail-lists.html}mail archive}}.
+  the {{{./mail-lists.html}mail archive}}.
 
   If you feel like the plugin is missing a feature or has a defect, you can fill a feature
request or bug report in our
-  {{{issue-tracking.html}issue tracker}}. When creating a new issue, please provide a comprehensive
description of your
+  {{{./issue-tracking.html}issue tracker}}. When creating a new issue, please provide a comprehensive
description of your
   concern. Especially for fixing bugs it is crucial that the developers can reproduce your
problem. For this reason,
   entire debug logs, POMs or most preferably little demo projects attached to the issue are
very much appreciated.
   Of course, patches are welcome, too. Contributors can check out the project from our
-  {{{source-repository.html}source repository}} and will find supplementary information in
the
+  {{{./source-repository.html}source repository}} and will find supplementary information
in the
   {{{http://maven.apache.org/guides/development/guide-helping.html}guide to helping with
Maven}}.
 
 * Examples
@@ -94,8 +94,8 @@
   To provide you with better understanding on some usages of the Maven SCM Plugin,
   you can take a look into the following examples:
 
- * {{{examples/bootstrapping-with-pom.html}Bootstrapping using a POM file}}
+ * {{{./examples/bootstrapping-with-pom.html}Bootstrapping using a POM file}}
 
- * {{{examples/scm-advance-features.html}Other advanced scm commands}}
+ * {{{./examples/scm-advance-features.html}Other advanced scm commands}}
 
  []

Modified: maven/scm/trunk/maven-scm-plugin/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/site.xml?rev=802384&amp;r1=802383&amp;r2=802384&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/site/site.xml (original)
+++ maven/scm/trunk/maven-scm-plugin/src/site/site.xml Sat Aug  8 14:01:36 2009
@@ -16,9 +16,12 @@
   ~ KIND, either express or implied.  See the License for the
   ~ specific language governing permissions and limitations
   ~ under the License.
-  --&gt;
+--&gt;
 
-&lt;project&gt;
+&lt;project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd"
+  name="Maven SCM plugin"&gt;
   &lt;body&gt;
     &lt;menu name="Overview"&gt;
       &lt;item name="Introduction" href="index.html"/&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r802350 - in /maven/scm/trunk: maven-scm-plugin/src/site/apt/ maven-scm-plugin/src/site/apt/examples/ src/site/apt/guide/</title>
<author><name>bentmann@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200908.mbox/%3c20090808122139.A5BD32388893@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090808122139-A5BD32388893@eris-apache-org%3e</id>
<updated>2009-08-08T12:21:39Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: bentmann
Date: Sat Aug  8 12:21:39 2009
New Revision: 802350

URL: http://svn.apache.org/viewvc?rev=802350&amp;view=rev
Log:
o Enabled filtering of plugin version

Added:
    maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
      - copied, changed from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt
    maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt.vm
      - copied, changed from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt
    maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt.vm
      - copied, changed from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt
Removed:
    maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt
    maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt
    maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt
Modified:
    maven/scm/trunk/src/site/apt/guide/new_provider.apt

Copied: maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm
(from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt)
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm?p2=maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm&amp;p1=maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt&amp;r1=802345&amp;r2=802350&amp;rev=802350&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt (original)
+++ maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/bootstrapping-with-pom.apt.vm Sat
Aug  8 12:21:39 2009
@@ -53,7 +53,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;goals&gt;install&lt;/goals&gt;
         &lt;/configuration&gt;
@@ -90,7 +90,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;username&gt;username&lt;/username&gt;
           &lt;password&gt;password&lt;/password&gt;

Copied: maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt.vm
(from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt)
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt.vm?p2=maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt.vm&amp;p1=maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt&amp;r1=802345&amp;r2=802350&amp;rev=802350&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt (original)
+++ maven/scm/trunk/maven-scm-plugin/src/site/apt/examples/scm-advance-features.apt.vm Sat
Aug  8 12:21:39 2009
@@ -58,6 +58,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;providerImplementations&gt;
             &lt;cvs&gt;cvs_native&lt;/cvs&gt;
@@ -87,7 +88,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;startDate&gt;YYYY-MM-DD&lt;/startDate&gt;
           &lt;endDate&gt;YYYY-MM-DD&lt;/endDate&gt;
@@ -127,7 +128,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;startRevision&gt;connection&lt;/startRevision&gt;
           &lt;endRevision&gt;connection&lt;/endRevision&gt;
@@ -182,7 +183,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;tag&gt;tag name&lt;/tag&gt;
         &lt;/configuration&gt;

Copied: maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt.vm (from r802345, maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt)
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt.vm?p2=maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt.vm&amp;p1=maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt&amp;r1=802345&amp;r2=802350&amp;rev=802350&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt (original)
+++ maven/scm/trunk/maven-scm-plugin/src/site/apt/usage.apt.vm Sat Aug  8 12:21:39 2009
@@ -28,7 +28,7 @@
 
 Usage
 
- The scm plugin maps a lot of commands to a variety of scm implementations. But there are
only 2 frequently
+ The SCM Plugin maps a lot of commands to a variety of scm implementations. But there are
only 2 frequently
  used commands:
 
   * checkin - commit the changes to the remote repository ( scm server ).
@@ -103,7 +103,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;connectionType&gt;connection&lt;/connectionType&gt;
         &lt;/configuration&gt;
@@ -127,7 +127,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scm-plugin&lt;/artifactId&gt;
-        &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
+        &lt;version&gt;${project.version}&lt;/version&gt;
         &lt;configuration&gt;
           &lt;connectionType&gt;developerConnection&lt;/connectionType&gt;
         &lt;/configuration&gt;

Modified: maven/scm/trunk/src/site/apt/guide/new_provider.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/apt/guide/new_provider.apt?rev=802350&amp;r1=802349&amp;r2=802350&amp;view=diff
==============================================================================
--- maven/scm/trunk/src/site/apt/guide/new_provider.apt (original)
+++ maven/scm/trunk/src/site/apt/guide/new_provider.apt Sat Aug  8 12:21:39 2009
@@ -81,6 +81,7 @@
       &lt;plugin&gt;
         &lt;groupId&gt;org.codehaus.plexus&lt;/groupId&gt;
         &lt;artifactId&gt;plexus-maven-plugin&lt;/artifactId&gt;
+        &lt;version&gt;1.3.8&lt;/version&gt;
         &lt;executions&gt;
           &lt;execution&gt;
             &lt;goals&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r799755 - in /maven/scm/trunk: pom.xml src/main/ src/main/assembly/ src/main/assembly/source-release.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200907.mbox/%3c20090731220644.3BB99238887A@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090731220644-3BB99238887A@eris-apache-org%3e</id>
<updated>2009-07-31T22:06:44Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri Jul 31 22:06:43 2009
New Revision: 799755

URL: http://svn.apache.org/viewvc?rev=799755&amp;view=rev
Log:
Add an ASF-compliant source release assembly

Added:
    maven/scm/trunk/src/main/
    maven/scm/trunk/src/main/assembly/
    maven/scm/trunk/src/main/assembly/source-release.xml   (with props)
Modified:
    maven/scm/trunk/pom.xml

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=799755&amp;r1=799754&amp;r2=799755&amp;view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Fri Jul 31 22:06:43 2009
@@ -318,5 +318,33 @@
         &lt;/plugins&gt;
       &lt;/reporting&gt;
     &lt;/profile&gt;
+    &lt;profile&gt;
+      &lt;id&gt;release&lt;/id&gt;
+      &lt;build&gt;
+        &lt;plugins&gt;
+          &lt;plugin&gt;
+            &lt;!-- Using this plugin configuration to produce a buildable project source
distro,
+                 per the discussion on members@ASF regarding what constitutes a valid release.
+            --&gt;
+            &lt;artifactId&gt;maven-assembly-plugin&lt;/artifactId&gt;
+            &lt;executions&gt;
+              &lt;execution&gt;
+                &lt;id&gt;make-project-src-distro&lt;/id&gt;
+                &lt;phase&gt;package&lt;/phase&gt;
+                &lt;goals&gt;
+                  &lt;goal&gt;single&lt;/goal&gt;
+                &lt;/goals&gt;
+                &lt;configuration&gt;
+                  &lt;descriptors&gt;
+                   &lt;descriptor&gt;src/main/assembly/source-release.xml&lt;/descriptor&gt;
+                  &lt;/descriptors&gt;
+                  &lt;tarLongFileMode&gt;gnu&lt;/tarLongFileMode&gt;
+                &lt;/configuration&gt;
+              &lt;/execution&gt;
+            &lt;/executions&gt;
+          &lt;/plugin&gt;
+        &lt;/plugins&gt;
+      &lt;/build&gt;
+    &lt;/profile&gt;    
   &lt;/profiles&gt;
 &lt;/project&gt;

Added: maven/scm/trunk/src/main/assembly/source-release.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/main/assembly/source-release.xml?rev=799755&amp;view=auto
==============================================================================
--- maven/scm/trunk/src/main/assembly/source-release.xml (added)
+++ maven/scm/trunk/src/main/assembly/source-release.xml Fri Jul 31 22:06:43 2009
@@ -0,0 +1,49 @@
+&lt;?xml version='1.0' encoding='UTF-8'?&gt;
+&lt;!--
+  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.
+--&gt;
+
+&lt;assembly&gt;
+  &lt;id&gt;source-release&lt;/id&gt;
+  &lt;formats&gt;
+    &lt;format&gt;tar.gz&lt;/format&gt;
+    &lt;format&gt;tar.bz2&lt;/format&gt;
+    &lt;format&gt;zip&lt;/format&gt;
+  &lt;/formats&gt;
+  &lt;fileSets&gt;
+    &lt;fileSet&gt;
+      &lt;directory&gt;${project.basedir}&lt;/directory&gt;
+      &lt;outputDirectory&gt;/&lt;/outputDirectory&gt;
+      &lt;useDefaultExcludes&gt;true&lt;/useDefaultExcludes&gt;
+      &lt;excludes&gt;
+        &lt;exclude&gt;**/*.iws&lt;/exclude&gt;
+        &lt;exclude&gt;**/*.ipr&lt;/exclude&gt;
+        &lt;exclude&gt;**/*.iml&lt;/exclude&gt;
+        &lt;exclude&gt;*.log&lt;/exclude&gt;
+        &lt;exclude&gt;target/**&lt;/exclude&gt;
+        &lt;exclude&gt;**/.settings/**&lt;/exclude&gt;
+        &lt;exclude&gt;**/*.classpath&lt;/exclude&gt;
+        &lt;exclude&gt;**/*.project&lt;/exclude&gt;        
+      &lt;/excludes&gt;
+    &lt;/fileSet&gt;
+    &lt;fileSet&gt;
+      &lt;directory&gt;${project.build.directory}/maven-shared-archive-resources/META-INF&lt;/directory&gt;
+      &lt;outputDirectory&gt;/&lt;/outputDirectory&gt;
+    &lt;/fileSet&gt;
+  &lt;/fileSets&gt;
+&lt;/assembly&gt;

Propchange: maven/scm/trunk/src/main/assembly/source-release.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/src/main/assembly/source-release.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r779794 - /maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090528231308.80B902388872@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090528231308-80B902388872@eris-apache-org%3e</id>
<updated>2009-05-28T23:13:08Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu May 28 23:13:08 2009
New Revision: 779794

URL: http://svn.apache.org/viewvc?rev=779794&amp;view=rev
Log:
add a profile to run git tck

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml?rev=779794&amp;r1=779793&amp;r2=779794&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/pom.xml Thu May 28 23:13:08
2009
@@ -39,4 +39,23 @@
     &lt;module&gt;maven-scm-provider-gitexe&lt;/module&gt;
     &lt;module&gt;maven-scm-provider-gittest&lt;/module&gt;
   &lt;/modules&gt;
+  
+  &lt;profiles&gt;
+    &lt;profile&gt;
+      &lt;id&gt;tck-git&lt;/id&gt;
+      &lt;build&gt;
+        &lt;plugins&gt;
+          &lt;plugin&gt;
+            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
+            &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
+            &lt;configuration&gt;
+              &lt;excludes&gt;
+                &lt;exclude&gt;nothing&lt;/exclude&gt;
+              &lt;/excludes&gt;
+            &lt;/configuration&gt;
+          &lt;/plugin&gt;
+        &lt;/plugins&gt;
+      &lt;/build&gt;
+    &lt;/profile&gt;  
+  &lt;/profiles&gt;  
 &lt;/project&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r779790 - in /maven/scm/trunk/maven-scm-api/src: main/java/org/apache/maven/scm/ main/java/org/apache/maven/scm/util/ test/java/org/apache/maven/scm/ test/java/org/apache/maven/scm/util/</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090528230239.6BD2F238886C@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090528230239-6BD2F238886C@eris-apache-org%3e</id>
<updated>2009-05-28T23:02:39Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu May 28 23:02:38 2009
New Revision: 779790

URL: http://svn.apache.org/viewvc?rev=779790&amp;view=rev
Log:
[SCM-474] Make class ChangeSet thread-safe
Submitted by Andrei Solntsev

Added:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
  (with props)
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
  (with props)
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
  (with props)
Modified:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeFileTest.java
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ScmFileSetTest.java

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java?rev=779790&amp;r1=779789&amp;r2=779790&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ChangeSet.java Thu May
28 23:02:38 2009
@@ -19,9 +19,6 @@
  * under the License.
  */
 
-import org.apache.maven.scm.provider.ScmProviderRepository;
-import org.codehaus.plexus.util.StringUtils;
-
 import java.io.Serializable;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -30,6 +27,11 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.util.FilenameUtils;
+import org.apache.maven.scm.util.ThreadSafeDateFormat;
+import org.codehaus.plexus.util.StringUtils;
+
 /**
  * @author &lt;a href="mailto:evenisse@apache.org"&gt;Emmanuel Venisse&lt;/a&gt;
  * @version $Id$
@@ -72,25 +74,25 @@
     /**
      * Formatter used by the getDateFormatted method.
      */
-    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat( DATE_PATTERN
);
+    private static final ThreadSafeDateFormat DATE_FORMAT = new ThreadSafeDateFormat( DATE_PATTERN
);
 
     private static final String TIME_PATTERN = "HH:mm:ss";
 
     /**
      * Formatter used by the getTimeFormatted method.
      */
-    private static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat( TIME_PATTERN
);
+    private static final ThreadSafeDateFormat TIME_FORMAT = new ThreadSafeDateFormat( TIME_PATTERN
);
 
     /**
      * Formatter used to parse date/timestamp.
      */
-    private static final SimpleDateFormat TIMESTAMP_FORMAT_1 = new SimpleDateFormat( "yyyy/MM/dd
HH:mm:ss" );
+    private static final ThreadSafeDateFormat TIMESTAMP_FORMAT_1 = new ThreadSafeDateFormat(
"yyyy/MM/dd HH:mm:ss" );
 
-    private static final SimpleDateFormat TIMESTAMP_FORMAT_2 = new SimpleDateFormat( "yyyy-MM-dd
HH:mm:ss" );
+    private static final ThreadSafeDateFormat TIMESTAMP_FORMAT_2 = new ThreadSafeDateFormat(
"yyyy-MM-dd HH:mm:ss" );
 
-    private static final SimpleDateFormat TIMESTAMP_FORMAT_3 = new SimpleDateFormat( "yyyy/MM/dd
HH:mm:ss z" );
+    private static final ThreadSafeDateFormat TIMESTAMP_FORMAT_3 = new ThreadSafeDateFormat(
"yyyy/MM/dd HH:mm:ss z" );
 
-    private static final SimpleDateFormat TIMESTAMP_FORMAT_4 = new SimpleDateFormat( "yyyy-MM-dd
HH:mm:ss z" );
+    private static final ThreadSafeDateFormat TIMESTAMP_FORMAT_4 = new ThreadSafeDateFormat(
"yyyy-MM-dd HH:mm:ss z" );
 
     /**
      * Date the changes were committed
@@ -185,15 +187,26 @@
         files.add( file );
     }
 
+    /**
+     * @deprecated Use method {@link #containsFilename(String)}
+     * @param filename
+     * @param repository NOT USED
+     * @return
+     */
     public boolean containsFilename( String filename, ScmProviderRepository repository )
     {
+        return containsFilename( filename );
+    }
+
+    public boolean containsFilename( String filename )
+    {
         if ( files != null )
         {
             for ( Iterator i = files.iterator(); i.hasNext(); )
             {
                 ChangeFile file = (ChangeFile) i.next();
-                String f1 = StringUtils.replace( StringUtils.replace( file.getName(), "\\",
"/" ), "//", "/" );
-                String f2 = StringUtils.replace( StringUtils.replace( filename, "\\", "/"
), "//", "/" );
+                String f1 = FilenameUtils.normalizeFilename( file.getName() );
+                String f2 = FilenameUtils.normalizeFilename( filename );
                 if ( f1.indexOf( f2 ) &gt;= 0 )
                 {
                     return true;
@@ -368,7 +381,7 @@
     /**
      * @return date in yyyy-mm-dd format
      */
-    public synchronized String getDateFormatted()
+    public String getDateFormatted()
     {
         return DATE_FORMAT.format( getDate() );
     }
@@ -376,7 +389,7 @@
     /**
      * @return time in HH:mm:ss format
      */
-    public synchronized String getTimeFormatted()
+    public String getTimeFormatted()
     {
         return TIME_FORMAT.format( getDate() );
     }
@@ -384,21 +397,21 @@
     /** {@inheritDoc} */
     public String toString()
     {
-        String result = author + "\n" + date + "\n";
-
+        StringBuffer result = new StringBuffer( author == null ? " null " : author );
+        result.append( "\n" ).append( date == null ? "null " : date.toString() ).append(
"\n" );
         if ( files != null )
         {
             for ( Iterator i = files.iterator(); i.hasNext(); )
             {
                 ChangeFile file = (ChangeFile) i.next();
 
-                result += file + "\n";
+                result.append( file == null ? " null " : file.toString() ).append( "\n" );
             }
         }
 
-        result += comment;
+        result.append( comment == null ? " null " : comment );
 
-        return result;
+        return result.toString();
     }
 
     /**
@@ -524,8 +537,8 @@
                     break;
                 case'\'':
                     buffer.replace( i, i + 1, APOSTROPHE_ENTITY );
-                    size += 4;
-                    i += 4;
+                    size += 5;
+                    i += 5;
                     break;
                 case'\"':
                     buffer.replace( i, i + 1, QUOTE_ENTITY );

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java?rev=779790&amp;r1=779789&amp;r2=779790&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/ScmFileSet.java Thu May
28 23:02:38 2009
@@ -19,10 +19,6 @@
  * under the License.
  */
 
-import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.StringUtils;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
@@ -30,6 +26,10 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.codehaus.plexus.util.DirectoryScanner;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
 /**
  * Set of files used for SCM operations.
  * Consists of the base directory of the files and a list of files relative to that directory.
@@ -42,10 +42,12 @@
 {
     private static final long serialVersionUID = -5978597349974797556L;
 
+    private static final String DELIMITER = ",";
+    
     /** @see DirectoryScanner#DEFAULTEXCLUDES */
-    private static final String DEFAULT_EXCLUDES = StringUtils.join( DirectoryScanner.DEFAULTEXCLUDES,
"," );
+    private static final String DEFAULT_EXCLUDES = StringUtils.join( DirectoryScanner.DEFAULTEXCLUDES,
DELIMITER );
 
-    private File basedir;
+    private final File basedir;
 
     private String includes;
 
@@ -54,7 +56,7 @@
     /**
      * List of File objects, all relative to the basedir.
      */
-    private List files = new ArrayList( 0 );
+    private final List files;
 
     /**
      * Create a file set with no files, only the base directory.
@@ -94,7 +96,7 @@
 
         if ( excludes != null &amp;&amp; excludes.length() &gt; 0 )
         {
-            excludes += "," + DEFAULT_EXCLUDES;
+            excludes += DELIMITER + DEFAULT_EXCLUDES;
         }
         else
         {

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java?rev=779790&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
(added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
Thu May 28 23:02:38 2009
@@ -0,0 +1,43 @@
+package org.apache.maven.scm.util;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+
+import org.codehaus.plexus.util.StringUtils;
+
+public class FilenameUtils
+{
+    public static String normalizeFilename( File file )
+    {
+        return normalizeFilename( file.getName() );
+    }
+
+    /**
+     * Replace duplicated [back]slash to slash.
+     * 
+     * @param filename
+     * @return
+     */
+    public static String normalizeFilename( String filename )
+    {
+        return StringUtils.replace( StringUtils.replace( filename, "\\", "/" ), "//", "/"
);
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/FilenameUtils.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java?rev=779790&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
(added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
Thu May 28 23:02:38 2009
@@ -0,0 +1,76 @@
+package org.apache.maven.scm.util;
+
+/*
+ * 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.
+ */
+
+import java.lang.ref.SoftReference;
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * Thread-safe version of java.text.DateFormat.
+ * You can declare it as a static final variable:
+ * &lt;code&gt;
+ * private static final ThreadSafeDateFormat DATE_FORMAT = new ThreadSafeDateFormat( DATE_PATTERN
);
+ * &lt;/code&gt;
+ */
+public class ThreadSafeDateFormat extends DateFormat
+{
+    private static final long serialVersionUID = 3786090697869963812L;
+
+    private final String m_sDateFormat;
+
+    public ThreadSafeDateFormat(String sDateFormat)
+    {
+        m_sDateFormat = sDateFormat;
+    }
+
+    private final ThreadLocal m_formatCache = new ThreadLocal()
+    {
+        public Object get()
+        {
+            SoftReference softRef = (SoftReference) super.get();
+            if (softRef == null || softRef.get() == null)
+            {
+                softRef = new SoftReference( new SimpleDateFormat(m_sDateFormat) );
+                super.set(softRef);
+            }
+            return softRef;
+        }
+    };
+
+    private DateFormat getDateFormat()
+    {
+        return (DateFormat) ((SoftReference)m_formatCache.get()).get();
+    }
+
+    public StringBuffer format(Date date, StringBuffer toAppendTo,
+            FieldPosition fieldPosition)
+    {
+        return getDateFormat().format(date, toAppendTo, fieldPosition);
+    }
+
+    public Date parse(String source, ParsePosition pos)
+    {
+        return getDateFormat().parse(source, pos);
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/util/ThreadSafeDateFormat.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Modified: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeFileTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeFileTest.java?rev=779790&amp;r1=779789&amp;r2=779790&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeFileTest.java (original)
+++ maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeFileTest.java Thu
May 28 23:02:38 2009
@@ -37,6 +37,14 @@
         assertEquals( "test.java", f.toString() );
     }
 
+    public void testNewFileRevision()
+    {
+        ChangeFile f = new ChangeFile( "test.java", "1.2.3" );
+        assertEquals( "test.java", f.getName() );
+        assertEquals( "1.2.3", f.getRevision() );
+        assertEquals( "test.java, 1.2.3", f.toString() );
+    }
+
     public void testNewRevisionFile()
     {
         ChangeFile f = new ChangeFile( "test.java", "revision1" );

Modified: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java?rev=779790&amp;r1=779789&amp;r2=779790&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java (original)
+++ maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ChangeSetTest.java Thu
May 28 23:02:38 2009
@@ -43,10 +43,16 @@
      */
     public void setUp()
     {
-        instance = new ChangeSet();
+        instance = createInstance();
+    }
+
+    private static ChangeSet createInstance()
+    {
+        ChangeSet instance = new ChangeSet();
         instance.setAuthor( "dion" );
         instance.setComment( "comment" );
         instance.setDate( "2002/04/01 00:00:00" );
+        return instance;
     }
 
     /**
@@ -57,6 +63,12 @@
         ChangeFile file = new ChangeFile( "maven:dummy" );
         instance.addFile( file );
         assertTrue( "File name not found in list", instance.toString().indexOf( "maven:dummy"
) != -1 );
+
+        assertTrue( instance.containsFilename("maven:") );
+        assertTrue( instance.containsFilename(":dummy") );
+        assertTrue( instance.containsFilename(":") );
+        assertTrue( instance.containsFilename("maven:dummy") );
+        assertFalse( instance.containsFilename("dammy") );
     }
 
     /**
@@ -124,6 +136,7 @@
         assertEquals( "Date value not set correctly", date, instance.getDate() );
     }
 
+
     /**
      * Test of setDate method with String
      */
@@ -158,4 +171,66 @@
 
         return cal.getTime();
     }
+
+    public void testEscapeValue()
+    {
+        assertEquals( "", ChangeSet.escapeValue("") );
+        assertEquals( "&amp;apos;", ChangeSet.escapeValue("'") );
+        assertEquals( "a", ChangeSet.escapeValue("a") );
+        assertEquals( "a&amp;apos;", ChangeSet.escapeValue("a'") );
+        assertEquals( "&amp;apos;a&amp;apos;", ChangeSet.escapeValue("'a'") );
+
+        assertEquals( "a&amp;lt;b&amp;gt;c", ChangeSet.escapeValue("a&lt;b&gt;c") );
+        assertEquals( "&amp;apos;&amp;amp;;&amp;lt;&amp;gt;&amp;quot;", ChangeSet.escapeValue("'&amp;;&lt;&gt;\"")
);
+    }
+
+    public void testEquals()
+    {
+        ChangeSet instance2 = createInstance();
+        assertEquals(instance, instance2);
+
+        instance2.setComment("another comment");
+        assertFalse(instance2.equals(instance));
+
+        instance2.setComment("comment");
+        assertEquals(instance, instance2);
+    }
+
+    public void testHashCode()
+    {
+        int hashCode1 = instance.hashCode();
+        instance.setAuthor("anotherAuthor");
+
+        assertFalse( hashCode1 == instance.hashCode() );
+        instance.setAuthor( "dion" );
+        assertEquals( hashCode1, instance.hashCode() );
+    }
+
+    public void testToXml()
+    {
+        String sXml = instance.toXML();
+        assertNotNull(sXml);
+
+        assertTrue(sXml.indexOf("&lt;changelog-entry&gt;") &gt; -1);
+        assertTrue(sXml.indexOf("&lt;/changelog-entry&gt;") &gt; -1);
+    }
+
+    public void testToXmlWithFiles()
+    {
+        instance.addFile( new ChangeFile( "maven1:dummy" ) );
+        instance.addFile( new ChangeFile( "maven2:dummy2" ) );
+
+        String sXml = instance.toXML();
+        assertNotNull(sXml);
+
+        assertTrue(sXml.indexOf("&lt;changelog-entry&gt;") &gt; -1);
+        assertTrue(sXml.indexOf("&lt;/changelog-entry&gt;") &gt; -1);
+
+        assertTrue(sXml.indexOf("&lt;file&gt;") &gt; -1);
+        assertTrue(sXml.indexOf("&lt;name&gt;maven1:dummy&lt;/name&gt;") &gt; -1);
+        assertTrue(sXml.indexOf("&lt;name&gt;maven2:dummy2&lt;/name&gt;") &gt; -1);
+
+
+    }
+
 }

Modified: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ScmFileSetTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ScmFileSetTest.java?rev=779790&amp;r1=779789&amp;r2=779790&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ScmFileSetTest.java (original)
+++ maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/ScmFileSetTest.java Thu
May 28 23:02:38 2009
@@ -19,13 +19,13 @@
  * under the License.
  */
 
-import junit.framework.TestCase;
-
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 /**
  * @author dtran
  */
@@ -56,6 +56,24 @@
         return filename.substring( getBasedir().length(), filename.length() );
     }
 
+    public void testFilesList()
+        throws IOException
+    {
+        ScmFileSet fileSet = new ScmFileSet( new File( getBasedir(), "src" ), "**/**" );
+        assertEquals( "src", fileSet.getBasedir().getName() );
+        assertEquals( "**/**", fileSet.getIncludes() );
+        // assertEquals( ScmFileSet.DEFAULT_EXCLUDES, fileSet.getExcludes() );
+        assertTrue( "List of files should be longer than 10 elements, but received: " + fileSet.getFileList().size(),
+                fileSet.getFileList().size() &gt; 10 );
+    }
+
+    public void testFilesListWithoutIncludesResultsEmptyList()
+        throws IOException
+    {
+        ScmFileSet fileSet = new ScmFileSet( new File( getBasedir(), "src" ) );
+        assertEquals( 0, fileSet.getFileList().size() );
+    }
+
     public void testFilesListExcludes()
         throws IOException
     {

Added: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java?rev=779790&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
(added)
+++ maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
Thu May 28 23:02:38 2009
@@ -0,0 +1,40 @@
+package org.apache.maven.scm.util;
+
+/*
+ * 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.
+ */
+
+import junit.framework.TestCase;
+
+public class FilenameUtilsTest
+    extends TestCase
+{
+
+    public void testNormalize()
+    {
+        assertNull( FilenameUtils.normalizeFilename( (String) null ) );
+        assertEquals( "", FilenameUtils.normalizeFilename( "" ) );
+
+        assertEquals( "c:", FilenameUtils.normalizeFilename( "c:" ) );
+        assertEquals( "c:/", FilenameUtils.normalizeFilename( "c:\\" ) );
+        assertEquals( "c:/", FilenameUtils.normalizeFilename( "c:/" ) );
+        assertEquals( "c:/", FilenameUtils.normalizeFilename( "c://" ) );
+
+        assertEquals( "c:/", FilenameUtils.normalizeFilename( "c:\\/" ) );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/util/FilenameUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r775494 - /maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml</title>
<author><name>bentmann@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090516164646.610622388875@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090516164646-610622388875@eris-apache-org%3e</id>
<updated>2009-05-16T16:46:46Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: bentmann
Date: Sat May 16 16:46:46 2009
New Revision: 775494

URL: http://svn.apache.org/viewvc?rev=775494&amp;view=rev
Log:
o Added profile to selectively run TCK for SVN

Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml?rev=775494&amp;r1=775493&amp;r2=775494&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/pom.xml Sat May 16 16:46:46
2009
@@ -39,4 +39,23 @@
     &lt;module&gt;maven-scm-provider-svnexe&lt;/module&gt;
     &lt;module&gt;maven-scm-provider-svntest&lt;/module&gt;
   &lt;/modules&gt;
+
+  &lt;profiles&gt;
+    &lt;profile&gt;
+      &lt;id&gt;tck-svn&lt;/id&gt;
+      &lt;build&gt;
+        &lt;plugins&gt;
+          &lt;plugin&gt;
+            &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
+            &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
+            &lt;configuration&gt;
+              &lt;excludes&gt;
+                &lt;exclude&gt;nothing&lt;/exclude&gt;
+              &lt;/excludes&gt;
+            &lt;/configuration&gt;
+          &lt;/plugin&gt;
+        &lt;/plugins&gt;
+      &lt;/build&gt;
+    &lt;/profile&gt;  
+  &lt;/profiles&gt;
 &lt;/project&gt;




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r775336 - /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</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090515205909.0822C2388872@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090515205909-0822C2388872@eris-apache-org%3e</id>
<updated>2009-05-15T20:59:08Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri May 15 20:59:08 2009
New Revision: 775336

URL: http://svn.apache.org/viewvc?rev=775336&amp;view=rev
Log:
[SCM-472] svn tck broken
test in only one line

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

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?rev=775336&amp;r1=775335&amp;r2=775336&amp;view=diff
==============================================================================
--- 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
Fri May 15 20:59:08 2009
@@ -101,12 +101,8 @@
         {
             ScmFile file = (ScmFile) it.next();
 
-            if ( !file.getStatus().equals( ScmFileStatus.DELETED )
-                &amp;&amp; !new File( file.getPath() ).isFile() )
-            {
-                // no op
-            }
-            else
+            if (!( !file.getStatus().equals( ScmFileStatus.DELETED )
+                &amp;&amp; !new File( file.getPath() ).isFile() ))
             {
                 onlyFiles.add( file );
             }




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r775331 - in /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 checkout/SvnCheckOutConsumer.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090515205603.304BB2388872@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090515205603-304BB2388872@eris-apache-org%3e</id>
<updated>2009-05-15T20:56:03Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Fri May 15 20:56:02 2009
New Revision: 775331

URL: http://svn.apache.org/viewvc?rev=775331&amp;view=rev
Log:
[SCM-472] svn tck broken

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/AbstractFileCheckingConsumer.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

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/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?rev=775331&amp;r1=775330&amp;r2=775331&amp;view=diff
==============================================================================
--- 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
(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/AbstractFileCheckingConsumer.java
Fri May 15 20:56:02 2009
@@ -72,6 +72,7 @@
 
     protected List getFiles()
     {
+        
         if ( !filtered )
         {
             for ( Iterator it = files.iterator(); it.hasNext(); )

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?rev=775331&amp;r1=775330&amp;r2=775331&amp;view=diff
==============================================================================
--- 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
Fri May 15 20:56:02 2009
@@ -25,6 +25,8 @@
 import org.apache.maven.scm.provider.svn.svnexe.command.AbstractFileCheckingConsumer;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -36,11 +38,13 @@
 {
     private static final String CHECKED_OUT_REVISION_TOKEN = "Checked out revision";
 
+    private List files = new ArrayList();
+    
     public SvnCheckOutConsumer( ScmLogger logger, File workingDirectory )
     {
         super( logger, workingDirectory );
     }
-
+    
     /** {@inheritDoc} */
     protected void parseLine( String line )
     {
@@ -84,4 +88,31 @@
     {
         return getFiles();
     }
+    
+    protected void addFile( ScmFile file )
+    {
+        files.add( file );
+    }
+
+    protected List getFiles()
+    {
+        List onlyFiles = new ArrayList();
+        for ( Iterator it = files.iterator(); it.hasNext(); )
+        {
+            ScmFile file = (ScmFile) it.next();
+
+            if ( !file.getStatus().equals( ScmFileStatus.DELETED )
+                &amp;&amp; !new File( file.getPath() ).isFile() )
+            {
+                // no op
+            }
+            else
+            {
+                onlyFiles.add( file );
+            }
+        }
+
+        return onlyFiles;
+    }        
+        
 }




</pre>
</div>
</content>
</entry>
<entry>
<title>svn propchange: r774947 - svn:log</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090514220740.AC17A2388866@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090514220740-AC17A2388866@eris-apache-org%3e</id>
<updated>2009-05-14T22:07:40Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Revision: 774947
Modified property: svn:log

Modified: svn:log at Thu May 14 22:07:40 2009
------------------------------------------------------------------------------
--- svn:log (original)
+++ svn:log Thu May 14 22:07:40 2009
@@ -0,0 +1,2 @@
+[SCM-459] Add tag() and status() methods to local scm provider to enable use with release:prepare
goal
+Submitted by Matthew McCullough



</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r774947 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local: ./ command/status/ command/tag/</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090514220626.1E08423888A4@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090514220626-1E08423888A4@eris-apache-org%3e</id>
<updated>2009-05-14T22:06:25Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu May 14 22:06:25 2009
New Revision: 774947

URL: http://svn.apache.org/viewvc?rev=774947&amp;view=rev
Log: (empty)

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
  (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
  (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java?rev=774947&amp;r1=774946&amp;r2=774947&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
(original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/LocalScmProvider.java
Thu May 14 22:06:25 2009
@@ -28,6 +28,8 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.local.command.add.LocalAddCommand;
@@ -36,6 +38,8 @@
 import org.apache.maven.scm.provider.local.command.checkout.LocalCheckOutCommand;
 import org.apache.maven.scm.provider.local.command.list.LocalListCommand;
 import org.apache.maven.scm.provider.local.command.update.LocalUpdateCommand;
+import org.apache.maven.scm.provider.local.command.status.LocalStatusCommand;
+import org.apache.maven.scm.provider.local.command.tag.LocalTagCommand;
 import org.apache.maven.scm.provider.local.repository.LocalScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.codehaus.plexus.util.StringUtils;
@@ -136,6 +140,28 @@
     }
 
     /** {@inheritDoc} */
+    public StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet,
CommandParameters parameters )
+        throws ScmException
+    {
+        LocalStatusCommand command = new LocalStatusCommand();
+
+        command.setLogger( getLogger() );
+
+        return (StatusScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    /** {@inheritDoc} */
+    public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters
parameters )
+        throws ScmException
+    {
+        LocalTagCommand command = new LocalTagCommand();
+
+        command.setLogger( getLogger() );
+
+        return (TagScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    /** {@inheritDoc} */
     public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters
parameters )
         throws ScmException
     {

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java?rev=774947&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
Thu May 14 22:06:25 2009
@@ -0,0 +1,46 @@
+package org.apache.maven.scm.provider.local.command.status;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.status.AbstractStatusCommand;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.local.command.LocalCommand;
+import java.util.List;
+import java.util.Collections;
+
+/**
+ * @author &lt;a href="mailto:matthewm@ambientideas.com"&gt;Matthew McCullough&lt;/a&gt;
+ * @version $Id$
+ */
+public class LocalStatusCommand
+    extends AbstractStatusCommand
+    implements LocalCommand
+{
+    /** {@inheritDoc} */
+    protected StatusScmResult executeStatusCommand( ScmProviderRepository repository, ScmFileSet
fileSet)
+        throws ScmException
+    {
+        List fileList = Collections.EMPTY_LIST;
+        return new StatusScmResult( null, fileList );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/status/LocalStatusCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java?rev=774947&amp;view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
(added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
Thu May 14 22:06:25 2009
@@ -0,0 +1,58 @@
+package org.apache.maven.scm.provider.local.command.tag;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.local.command.LocalCommand;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.ScmResult;
+
+import java.util.List;
+import java.util.Collections;
+
+/**
+ * @author &lt;a href="mailto:matthewm@ambientideas.com"&gt;Matthew McCullough&lt;/a&gt;
+ * @version $Id$
+ */
+public class LocalTagCommand
+    extends AbstractTagCommand
+    implements LocalCommand
+{
+    /** {@inheritDoc} */
+    protected ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet,
String message, ScmTagParameters scmTagParameters)
+        throws ScmException
+    {
+        List fileList = Collections.EMPTY_LIST;
+        return new TagScmResult( null, fileList );
+    }
+
+    //Satisfies deprecated interface
+    /** {@inheritDoc} */
+    protected ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet,
String tagName, String message)
+        throws ScmException
+    {
+        List fileList = Collections.EMPTY_LIST;
+        return new TagScmResult( null, fileList );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-local/src/main/java/org/apache/maven/scm/provider/local/command/tag/LocalTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id




</pre>
</div>
</content>
</entry>
<entry>
<title>svn commit: r774941 - in /maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm: ScmTckTestCase.java tck/command/checkin/CheckInCommandTckTest.java</title>
<author><name>olamy@apache.org</name></author>
<link rel="alternate" href="http://mail-archives.apache.org/mod_mbox/maven-scm-commits/200905.mbox/%3c20090514215043.D7D7F23888A4@eris.apache.org%3e"/>
<id>urn:uuid:%3c20090514215043-D7D7F23888A4@eris-apache-org%3e</id>
<updated>2009-05-14T21:50:43Z</updated>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
<pre>
Author: olamy
Date: Thu May 14 21:50:43 2009
New Revision: 774941

URL: http://svn.apache.org/viewvc?rev=774941&amp;view=rev
Log:
[SCM-471] some TCK tests check for files in a position dependent way
Submitted by Mark Struberg

Modified:
    maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
    maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java?rev=774941&amp;r1=774940&amp;r2=774941&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
(original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
Thu May 14 21:50:43 2009
@@ -23,11 +23,14 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.provider.ScmProvider;
 import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 
 /**
  * &lt;p/&gt;
@@ -165,4 +168,35 @@
             assertEquals( "Expected 1 file in the added files list " + addedFiles, 1, addedFiles.size()
);
         }
     }
+    
+    /**
+     * take the files of the given list, add them to a TreeMap and
+     * use the pathName String as key for the Map.
+     * This function is useful for every TCK which has to check for the
+     * existence of more than 1 file of the returned ScmResult, regardless
+     * of their order in the list.
+     * All backslashes in the path will be replaced by forward slashes 
+     * for Windows compatibility.
+     *     
+     * @param files List with {@code ScmFile}s
+     * @return Map key=pathName, value=ScmFile
+     */
+    protected Map/*&lt;String, ScmFile&gt;*/ mapFilesByPath( List/*&lt;ScmFile&gt;*/ files
)
+    {
+        if ( files == null )
+        {
+            return null;
+        }
+        
+        Map mappedFiles = new TreeMap();
+        Iterator it = files.iterator();
+        while ( it.hasNext() )
+        {
+            ScmFile scmFile = (ScmFile) it.next();
+            String path = StringUtils.replace( scmFile.getPath(), "\\", "/" );
+            mappedFiles.put( path, scmFile );
+        }
+        
+        return mappedFiles;
+    }
 }

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java?rev=774941&amp;r1=774940&amp;r2=774941&amp;view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
(original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
Thu May 14 21:50:43 2009
@@ -32,6 +32,7 @@
 import java.io.FileWriter;
 import java.io.PrintWriter;
 import java.util.List;
+import java.util.Map;
 
 /**
  * This test tests the check out command.
@@ -82,17 +83,16 @@
 
         assertEquals( 2, files.size() );
 
-        ScmFile file1 = (ScmFile) files.get( 0 );
-
+        Map fileMap = mapFilesByPath( files );
+        ScmFile file1 = (ScmFile) fileMap.get( "src/main/java/Foo.java" );
+        assertNotNull( file1 );
         assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() );
 
-        assertPath( "/test-repo/check-in/Foo.java", file1.getPath() );
-
-        ScmFile file2 = (ScmFile) files.get( 1 );
 
+        ScmFile file2 = (ScmFile) fileMap.get( "readme.txt" );
+        assertNotNull( file2 );
         assertEquals( ScmFileStatus.CHECKED_IN, file2.getStatus() );
 
-        assertPath( "/test-repo/check-in/readme.txt", file2.getPath() );
 
         CheckOutScmResult checkoutResult =
             getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy()
) );




</pre>
</div>
</content>
</entry>
</feed>
