You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2018/09/09 18:26:28 UTC

[maven-scm] branch SCM-859 updated (c1f4f0f -> 6ea6f4d)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch SCM-859
in repository https://gitbox.apache.org/repos/asf/maven-scm.git.


 discard c1f4f0f  [SCM-859] Subversion commands don't work if path or URL contain '@'
     add 64ab819  [SCM-911] Skip tests if Git executable is not in PATH
     new 6ea6f4d  [SCM-859] Subversion commands don't work if path or URL contain '@'

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (c1f4f0f)
            \
             N -- N -- N   refs/heads/SCM-859 (6ea6f4d)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../command/checkin/GitCheckInCommandNoBranchTest.java      |  2 +-
 .../git/gitexe/command/checkin/GitCheckInCommandTest.java   | 13 ++++++++++++-
 .../command/checkout/GitExeCheckOutCommandNoBranchTest.java |  4 ++--
 3 files changed, 15 insertions(+), 4 deletions(-)


[maven-scm] 01/01: [SCM-859] Subversion commands don't work if path or URL contain '@'

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch SCM-859
in repository https://gitbox.apache.org/repos/asf/maven-scm.git

commit 6ea6f4d7483480bcafe39ec73783dcde76159139
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sun Sep 9 12:09:16 2018 +0200

    [SCM-859] Subversion commands don't work if path or URL contain '@'
    
    There are some oddities where @ escaping is necessary or whether the
    path can have a peg revision or not. A discussion on this has been
    raised: http://mail-archives.apache.org/mod_mbox/subversion-users/201809.mbox/%3C5f96ccf9-fe6a-8291-4c5a-c90f8e1c70bc%40apache.org%3E
    
    We might need to revise the code after some time when the issues have
    been resolved by the Subversion team.
    
    This closes #58
---
 .../svnexe/command/branch/SvnBranchCommand.java    | 12 ++++---
 .../command/changelog/SvnChangeLogCommand.java     |  8 +++--
 .../command/checkout/SvnCheckOutCommand.java       |  2 +-
 .../svnexe/command/export/SvnExeExportCommand.java |  6 ++--
 .../svn/svnexe/command/info/SvnInfoCommand.java    |  2 +-
 .../svn/svnexe/command/list/SvnListCommand.java    |  2 +-
 .../svn/svnexe/command/mkdir/SvnMkdirCommand.java  |  2 +-
 .../command/remoteinfo/SvnRemoteInfoCommand.java   |  6 ++--
 .../svn/svnexe/command/tag/SvnTagCommand.java      |  9 +++--
 .../svnexe/command/update/SvnUpdateCommand.java    | 15 ++++----
 .../command/branch/SvnExeBranchCommandTckTest.java | 12 +++----
 .../command/changelog/SvnChangeLogCommandTest.java | 26 +++++++-------
 .../command/checkout/SvnCheckOutCommandTest.java   |  8 ++---
 .../command/export/SvnExportCommandTest.java       |  6 ++--
 .../svnexe/command/list/SvnListCommandTest.java    |  2 +-
 .../svnexe/command/mkdir/SvnMkdirCommandTest.java  |  4 +--
 .../command/tag/SvnExeTagCommandTckTest.java       | 10 +++---
 .../command/update/SvnUpdateCommandTest.java       | 40 +++++++++++-----------
 18 files changed, 90 insertions(+), 82 deletions(-)

diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
index b5c78a4..46e8f80 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnBranchCommand.java
@@ -56,7 +56,7 @@ public class SvnBranchCommand
     extends AbstractBranchCommand
     implements SvnCommand
 {
-    
+
     public ScmResult executeBranchCommand( ScmProviderRepository repo, ScmFileSet fileSet, String branch,
                                            ScmBranchParameters scmBranchParameters )
     throws ScmException
@@ -150,7 +150,7 @@ public class SvnBranchCommand
 
         return new BranchScmResult( cl.toString(), fileList );
     }
-    
+
     /** {@inheritDoc} */
     public ScmResult executeBranchCommand( ScmProviderRepository repo, ScmFileSet fileSet, String branch,
                                            String message )
@@ -172,7 +172,7 @@ public class SvnBranchCommand
         scmBranchParameters.setPinExternals( false );
         return createCommandLine( repository, workingDirectory, branch, messageFile, scmBranchParameters );
     }
-    
+
     public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
                                                  String branch, File messageFile,
                                                  ScmBranchParameters scmBranchParameters )
@@ -203,7 +203,8 @@ public class SvnBranchCommand
                 cl.createArg().setValue( "--revision" );
                 cl.createArg().setValue( scmBranchParameters.getScmRevision() );
             }
-            cl.createArg().setValue( SvnCommandUtils.fixUrl( repository.getUrl(), repository.getUser() ) );
+            String url = SvnCommandUtils.fixUrl( repository.getUrl(), repository.getUser() );
+            cl.createArg().setValue( url + "@" );
         }
         else
         {
@@ -211,7 +212,8 @@ public class SvnBranchCommand
         }
         // Note: this currently assumes you have the branch base checked out too
         String branchUrl = SvnTagBranchUtils.resolveBranchUrl( repository, new ScmBranch( branch ) );
-        cl.createArg().setValue( SvnCommandUtils.fixUrl( branchUrl, repository.getUser() ) );
+        branchUrl = SvnCommandUtils.fixUrl( branchUrl, repository.getUser() );
+        cl.createArg().setValue( branchUrl + "@" );
 
         return cl;
     }
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java
index d619a34..65b90df 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommand.java
@@ -209,17 +209,19 @@ public class SvnChangeLogCommand
             // the changelog of that branch, but limit it to paths that also occur in this repository.
             if ( branch instanceof ScmTag )
             {
-                cl.createArg().setValue( SvnTagBranchUtils.resolveTagUrl( repository, (ScmTag) branch ) );
+                String tagUrl = SvnTagBranchUtils.resolveTagUrl( repository, (ScmTag) branch );
+                cl.createArg().setValue( tagUrl + "@" );
             }
             else
             {
-                cl.createArg().setValue( SvnTagBranchUtils.resolveBranchUrl( repository, branch ) );
+                String branchUrl = SvnTagBranchUtils.resolveBranchUrl( repository, branch );
+                cl.createArg().setValue( branchUrl + "@" );
             }
         }
 
         if ( endVersion == null || !StringUtils.equals( "BASE", endVersion.getName() ) )
         {
-            cl.createArg().setValue( repository.getUrl() );
+            cl.createArg().setValue( repository.getUrl() + "@" );
         }
 
         return cl;
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
index 0379047..8adb689 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
@@ -165,7 +165,7 @@ public class SvnCheckOutCommand
             }
         }
 
-        cl.createArg().setValue( url );
+        cl.createArg().setValue( url + "@" );
 
         cl.createArg().setValue( workingDirectory.getAbsolutePath() );
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
index cfee2b1..78aecb9 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java
@@ -142,15 +142,15 @@ public class SvnExeExportCommand
                 cl.createArg().setValue( version.getName() );
             }
         }
-        
+
         //support exporting to an existing directory
         cl.createArg().setValue( "--force" );
 
-        cl.createArg().setValue( url );
+        cl.createArg().setValue( url + "@" );
 
         if ( StringUtils.isNotEmpty( outputSirectory ) )
         {
-            cl.createArg().setValue( outputSirectory );
+            cl.createArg().setValue( outputSirectory + "@" );
         }
 
         return cl;
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
index 758c188..438c7c7 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/info/SvnInfoCommand.java
@@ -126,7 +126,7 @@ public class SvnInfoCommand
             }
             else
             {
-                cl.createArg().setValue( repository.getUrl() + "/" + file.getPath().replace( '\\', '/' ) );
+                cl.createArg().setValue( repository.getUrl() + "/" + file.getPath().replace( '\\', '/' ) + "@" );
             }
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommand.java
index e9c47f9..553b080 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommand.java
@@ -118,7 +118,7 @@ public class SvnListCommand
         {
             File file = it.next();
 
-            cl.createArg().setValue( repository.getUrl() + "/" + file.getPath().replace( '\\', '/' ) );
+            cl.createArg().setValue( repository.getUrl() + "/" + file.getPath().replace( '\\', '/' ) + "@" );
         }
 
         return cl;
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommand.java
index 0f10d26..bcc96aa 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommand.java
@@ -145,7 +145,7 @@ public class SvnMkdirCommand
 
         if ( !createInLocal )
         {
-            cl.createArg().setValue( repository.getUrl() + "/" + dirPath );
+            cl.createArg().setValue( repository.getUrl() + "/" + dirPath + "@" );
 
             if ( messageFile != null )
             {
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommand.java
index df364a3..75c4724 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommand.java
@@ -64,7 +64,7 @@ public class SvnRemoteInfoCommand
 
         cl.createArg().setValue( "ls" );
 
-        cl.createArg().setValue( baseUrl + "/tags" );
+        cl.createArg().setValue( baseUrl + "/tags" + "@" );
 
         CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
 
@@ -95,7 +95,7 @@ public class SvnRemoteInfoCommand
 
         cl.createArg().setValue( "ls" );
 
-        cl.createArg().setValue( baseUrl + "/tags" );
+        cl.createArg().setValue( baseUrl + "/tags" + "@" );
 
         stderr = new CommandLineUtils.StringStreamConsumer();
 
@@ -131,7 +131,7 @@ public class SvnRemoteInfoCommand
 
         cl.createArg().setValue( "ls" );
 
-        cl.createArg().setValue( url );
+        cl.createArg().setValue( url + "@" );
 
         CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
 
diff --git a/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 b/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
index 0e96e97..108a03e 100644
--- a/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
+++ b/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
@@ -223,7 +223,8 @@ public class SvnTagCommand
 
         // Note: this currently assumes you have the tag base checked out too
         String tagUrl = SvnTagBranchUtils.resolveTagUrl( repository, new ScmTag( tag ) );
-        cl.createArg().setValue( SvnCommandUtils.fixUrl( tagUrl, repository.getUser() ) );
+        tagUrl = SvnCommandUtils.fixUrl( tagUrl, repository.getUser() );
+        cl.createArg().setValue( tagUrl + "@" );
 
         return cl;
     }
@@ -261,7 +262,8 @@ public class SvnTagCommand
 
         if ( scmTagParameters != null && scmTagParameters.isRemoteTagging() )
         {
-            cl.createArg().setValue( SvnCommandUtils.fixUrl( repository.getUrl(), repository.getUser() ) );
+            String url = SvnCommandUtils.fixUrl( repository.getUrl(), repository.getUser() );
+            cl.createArg().setValue( url + "@" );
         }
         else
         {
@@ -270,7 +272,8 @@ public class SvnTagCommand
 
         // Note: this currently assumes you have the tag base checked out too
         String tagUrl = SvnTagBranchUtils.resolveTagUrl( repository, new ScmTag( tag ) );
-        cl.createArg().setValue( SvnCommandUtils.fixUrl( tagUrl, repository.getUser() ) );
+        tagUrl = SvnCommandUtils.fixUrl( tagUrl, repository.getUser() );
+        cl.createArg().setValue( tagUrl + "@" );
 
         return cl;
     }
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java
index 5edcbbc..b1b7fde 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java
@@ -90,14 +90,14 @@ public class SvnUpdateCommand
 
         UpdateScmResultWithRevision result = new UpdateScmResultWithRevision( cl.toString(), consumer.getUpdatedFiles(),
                                                 String.valueOf( consumer.getRevision() ) );
-        
+
         result.setChanges( consumer.getChangeSets() );
 
         if ( getLogger().isDebugEnabled() )
         {
             getLogger().debug( "changeSets " + consumer.getChangeSets() );
         }
-        
+
         return result;
     }
 
@@ -136,7 +136,7 @@ public class SvnUpdateCommand
                 cl.createArg().setValue( version.getName() );
             }
 
-            cl.createArg().setValue( workingDir );
+            cl.createArg().setValue( workingDir + "@" );
         }
         else
         {
@@ -147,14 +147,15 @@ public class SvnUpdateCommand
                 cl.createArg().setValue( "switch" );
                 if ( version instanceof ScmTag )
                 {
-                    cl.createArg().setValue( SvnTagBranchUtils.resolveTagUrl( repository, (ScmTag) version ) );
+                    String tagUrl = SvnTagBranchUtils.resolveTagUrl( repository, (ScmTag) version );
+                    cl.createArg().setValue( tagUrl + "@" );
                 }
                 else
                 {
-                    cl.createArg().setValue(
-                        SvnTagBranchUtils.resolveBranchUrl( repository, (ScmBranch) version ) );
+                    String branchUrl = SvnTagBranchUtils.resolveBranchUrl( repository, (ScmBranch) version );
+                    cl.createArg().setValue( branchUrl + "@" );
                 }
-                cl.createArg().setValue( workingDir );
+                cl.createArg().setValue( workingDir + "@" );
             }
         }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
index 5b73ef3..3547f22 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/branch/SvnExeBranchCommandTckTest.java
@@ -50,7 +50,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --revision 2 https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch",
+                             + " --encoding UTF-8 --revision 2 https://foo.com/svn/trunk@ https://foo.com/svn/branches/svnbranch@",
                          scmBranchParameters );
     }
 
@@ -67,7 +67,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --pin-externals --revision 2 https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch",
+                             + " --encoding UTF-8 --pin-externals --revision 2 https://foo.com/svn/trunk@ https://foo.com/svn/branches/svnbranch@",
                          scmBranchParameters );
     }
 
@@ -83,7 +83,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch", scmBranchParameters );
+                             + " --encoding UTF-8 https://foo.com/svn/trunk@ https://foo.com/svn/branches/svnbranch@", scmBranchParameters );
     }
 
     public void testBranchUserNameSvnHttpsRemoteBranchingNoRevWithPinExternals()
@@ -98,7 +98,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --pin-externals https://foo.com/svn/trunk https://foo.com/svn/branches/svnbranch", scmBranchParameters );
+                             + " --encoding UTF-8 --pin-externals https://foo.com/svn/trunk@ https://foo.com/svn/branches/svnbranch@", scmBranchParameters );
     }
 
     public void testBranchUserNameSvnHttps()
@@ -109,7 +109,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 . https://foo.com/svn/branches/svnbranch", null );
+                             + " --encoding UTF-8 . https://foo.com/svn/branches/svnbranch@", null );
     }
 
     public void testBranchUserNameSvnSsh()
@@ -120,7 +120,7 @@ public class SvnExeBranchCommandTckTest
 
         testCommandLine( "scm:svn:svn+ssh://foo.com/svn/trunk", "svnbranch", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --parents --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 . svn+ssh://user@foo.com/svn/branches/svnbranch" );
+                             + " --encoding UTF-8 . svn+ssh://user@foo.com/svn/branches/svnbranch@" );
     }
 
     private void testCommandLine( String scmUrl, String branch, File messageFile, String user, String commandLine,
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java
index ed86411..f5729bd 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/changelog/SvnChangeLogCommandTest.java
@@ -42,14 +42,14 @@ public class SvnChangeLogCommandTest
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, null, null,
-                         "svn --non-interactive log -v http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineNoDatesLimitedCount()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, null, null, 40,
-                         "svn --non-interactive log -v --limit 40 http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v --limit 40 http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithDates()
@@ -59,7 +59,7 @@ public class SvnChangeLogCommandTest
         Date endDate = getDate( 2003, Calendar.OCTOBER, 10, GMT_TIME_ZONE );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, startDate, endDate,
-                         "svn --non-interactive log -v -r \"{2003-09-10 00:00:00 +0000}:{2003-10-10 00:00:00 +0000}\" http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r \"{2003-09-10 00:00:00 +0000}:{2003-10-10 00:00:00 +0000}\" http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineStartDateOnly()
@@ -68,7 +68,7 @@ public class SvnChangeLogCommandTest
         Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, 1, 1, 1, GMT_TIME_ZONE );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, startDate, null,
-                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:HEAD\" http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:HEAD\" http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineDateFormat()
@@ -78,7 +78,7 @@ public class SvnChangeLogCommandTest
         Date endDate = getDate( 2005, Calendar.NOVEMBER, 13, 23, 23, 23, GMT_TIME_ZONE );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, startDate, endDate,
-                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:{2005-11-13 23:23:23 +0000}\" http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:{2005-11-13 23:23:23 +0000}\" http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineEndDateOnly()
@@ -88,14 +88,14 @@ public class SvnChangeLogCommandTest
 
         // Only specifying end date should print no dates at all
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null, null, endDate,
-                         "svn --non-interactive log -v http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithBranchNoDates()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "my-test-branch" ), null, null,
-                         "svn --non-interactive log -v http://foo.com/svn/branches/my-test-branch http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v http://foo.com/svn/branches/my-test-branch@ http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithBranchStartDateOnly()
@@ -104,7 +104,7 @@ public class SvnChangeLogCommandTest
         Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, 1, 1, 1, GMT_TIME_ZONE );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "my-test-branch" ), startDate, null,
-                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:HEAD\" http://foo.com/svn/branches/my-test-branch http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r \"{2003-09-10 01:01:01 +0000}:HEAD\" http://foo.com/svn/branches/my-test-branch@ http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithBranchEndDateOnly()
@@ -114,7 +114,7 @@ public class SvnChangeLogCommandTest
 
         // Only specifying end date should print no dates at all
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "my-test-branch" ), null, endDate,
-                         "svn --non-interactive log -v http://foo.com/svn/branches/my-test-branch http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v http://foo.com/svn/branches/my-test-branch@ http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithBranchBothDates()
@@ -124,28 +124,28 @@ public class SvnChangeLogCommandTest
         Date endDate = getDate( 2003, Calendar.OCTOBER, 10, GMT_TIME_ZONE );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "my-test-branch" ), startDate, endDate,
-                         "svn --non-interactive log -v -r \"{2003-09-10 00:00:00 +0000}:{2003-10-10 00:00:00 +0000}\" http://foo.com/svn/branches/my-test-branch http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r \"{2003-09-10 00:00:00 +0000}:{2003-10-10 00:00:00 +0000}\" http://foo.com/svn/branches/my-test-branch@ http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithStartVersion()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmRevision( "1" ), null,
-                         "svn --non-interactive log -v -r 1:HEAD http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r 1:HEAD http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithStartVersionAndEndVersion()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmRevision( "1" ), new ScmRevision( "10" ),
-                         "svn --non-interactive log -v -r 1:10 http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r 1:10 http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithStartVersionAndEndVersionEquals()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmRevision( "1" ), new ScmRevision( "1" ),
-                         "svn --non-interactive log -v -r 1 http://foo.com/svn/trunk" );
+                         "svn --non-interactive log -v -r 1 http://foo.com/svn/trunk@" );
     }
 
     public void testCommandLineWithBaseVersion()
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommandTest.java
index 31a278f..73e2945 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommandTest.java
@@ -65,7 +65,7 @@ public class SvnCheckOutCommandTest
         throws Exception
     {
         testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", null,
-                         "svn --non-interactive checkout http://foo.com/svn/trunk "
+                         "svn --non-interactive checkout http://foo.com/svn/trunk@ "
                              + workingDirectory.getAbsolutePath() );
     }
 
@@ -73,7 +73,7 @@ public class SvnCheckOutCommandTest
         throws Exception
     {
         testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", "",
-                         "svn --non-interactive checkout http://foo.com/svn/trunk "
+                         "svn --non-interactive checkout http://foo.com/svn/trunk@ "
                              + workingDirectory.getAbsolutePath() );
     }
 
@@ -81,7 +81,7 @@ public class SvnCheckOutCommandTest
         throws Exception
     {
         testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", "10",
-                         "svn --non-interactive checkout -r 10 http://foo.com/svn/trunk "
+                         "svn --non-interactive checkout -r 10 http://foo.com/svn/trunk@ "
                              + workingDirectory.getAbsolutePath() );
     }
 
@@ -90,7 +90,7 @@ public class SvnCheckOutCommandTest
     {
         recursive = false;
         testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", "10",
-                         "svn --non-interactive checkout -N -r 10 http://foo.com/svn/trunk "
+                         "svn --non-interactive checkout -N -r 10 http://foo.com/svn/trunk@ "
                              + workingDirectory.getAbsolutePath() );
     }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java
index bc92c25..4c702e4 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExportCommandTest.java
@@ -36,7 +36,7 @@ public class SvnExportCommandTest
         File exportDirectory = new File( getBasedir() );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", exportDirectory, null,
-                         "svn --non-interactive export --force scm:svn:http://foo.com/svn/trunk" );
+                         "svn --non-interactive export --force http://foo.com/svn/trunk@" );
     }
 
     public void testGetExportCommandLineWithExplicitExportDirectory()
@@ -45,7 +45,7 @@ public class SvnExportCommandTest
         File exportDirectory = new File( getBasedir() );
 
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", exportDirectory, exportDirectory,
-                         "svn --non-interactive export --force scm:svn:http://foo.com/svn/trunk " + exportDirectory );
+                         "svn --non-interactive export --force http://foo.com/svn/trunk@ " + exportDirectory + "@" );
     }
 
     private void testCommandLine( String scmUrl, File workingDirectory, File exportDirectory, String commandLine )
@@ -55,7 +55,7 @@ public class SvnExportCommandTest
 
         SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository();
 
-        Commandline cl = SvnExeExportCommand.createCommandLine( svnRepository, exportDirectory, null, scmUrl,
+        Commandline cl = SvnExeExportCommand.createCommandLine( svnRepository, exportDirectory, null, svnRepository.getUrl(),
                                                                 exportDirectory != null?exportDirectory.getAbsolutePath():null );
 
         assertCommandLine( commandLine, exportDirectory, cl );
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommandTest.java
index 133cc31..7e57b7a 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/list/SvnListCommandTest.java
@@ -93,7 +93,7 @@ public class SvnListCommandTest
         Commandline cl = SvnListCommand.createCommandLine( getSvnRepository( scmUrl ), fileSet, recursive,
                                                            new ScmRevision( revision ) );
 
-        assertCommandLine( commandLine + " http://foo.com/svn/trunk/.",
+        assertCommandLine( commandLine + " http://foo.com/svn/trunk/.@",
                            new File( System.getProperty( "java.io.tmpdir" ) ), cl );
     }
 }
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommandTest.java
index dd124ec..d8dbc90 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/mkdir/SvnMkdirCommandTest.java
@@ -68,14 +68,14 @@ public class SvnMkdirCommandTest
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk",
-                         "svn --non-interactive mkdir --parents http://foo.com/svn/trunk/missing " + messageFileString, false );
+                         "svn --non-interactive mkdir --parents http://foo.com/svn/trunk/missing@ " + messageFileString, false );
     }
 
     public void testCommandLineMkdirUrlWithUsername()
         throws Exception
     {
         testCommandLine( "scm:svn:http://anonymous@foo.com/svn/trunk",
-                         "svn --username anonymous --no-auth-cache --non-interactive mkdir --parents http://foo.com/svn/trunk/missing " +
+                         "svn --username anonymous --no-auth-cache --non-interactive mkdir --parents http://foo.com/svn/trunk/missing@ " +
                              messageFileString, false );
     }
 
diff --git a/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 b/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
index 154e7de..30c2b56 100644
--- a/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
+++ b/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
@@ -44,7 +44,7 @@ public class SvnExeTagCommandTckTest
 
         testCommandLine( "scm:svn:svn+ssh://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath() +
-                             " --encoding UTF-8 --parents . svn+ssh://user@foo.com/svn/tags/svntag", null );
+                             " --encoding UTF-8 --parents . svn+ssh://user@foo.com/svn/tags/svntag@", null );
     }
 
     public void testTagRemoteTagHttps()
@@ -58,7 +58,7 @@ public class SvnExeTagCommandTckTest
         scmTagParameters.setPinExternals( false );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --parents https://foo.com/svn/trunk https://foo.com/svn/tags/svntag", scmTagParameters );
+                             + " --encoding UTF-8 --parents https://foo.com/svn/trunk@ https://foo.com/svn/tags/svntag@", scmTagParameters );
     }
 
     public void testTagRemoteTagHttpsWithPinExternals()
@@ -72,7 +72,7 @@ public class SvnExeTagCommandTckTest
         scmTagParameters.setPinExternals( true );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --parents --pin-externals https://foo.com/svn/trunk https://foo.com/svn/tags/svntag", scmTagParameters );
+                             + " --encoding UTF-8 --parents --pin-externals https://foo.com/svn/trunk@ https://foo.com/svn/tags/svntag@", scmTagParameters );
     }
 
     public void testTagRemoteTagHttpsWithRevision()
@@ -87,7 +87,7 @@ public class SvnExeTagCommandTckTest
         scmTagParameters.setScmRevision( "12" );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --parents --revision 12 https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
+                             + " --encoding UTF-8 --parents --revision 12 https://foo.com/svn/trunk@ https://foo.com/svn/tags/svntag@",
                          scmTagParameters );
     }
 
@@ -103,7 +103,7 @@ public class SvnExeTagCommandTckTest
         scmTagParameters.setScmRevision( "12" );
         testCommandLine( "scm:svn:https://foo.com/svn/trunk", "svntag", messageFile, "user",
                          "svn --username user --no-auth-cache --non-interactive copy --file " + messageFile.getAbsolutePath()
-                             + " --encoding UTF-8 --parents --revision 12 --pin-externals https://foo.com/svn/trunk https://foo.com/svn/tags/svntag",
+                             + " --encoding UTF-8 --parents --revision 12 --pin-externals https://foo.com/svn/trunk@ https://foo.com/svn/tags/svntag@",
                          scmTagParameters );
     }
 
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommandTest.java
index 90a71d4..5e852c1 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommandTest.java
@@ -43,49 +43,49 @@ public class SvnUpdateCommandTest
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmTag( "" ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithEmptyBranch()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "" ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithEmptyVersion()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmRevision( "" ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithWhitespaceTag()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmTag( "  " ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithWhitespaceBranch()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "  " ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithWhitespaceRevision()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmRevision( "  " ),
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithoutTag()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", null,
-                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive update " + getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineTag()
@@ -93,7 +93,7 @@ public class SvnUpdateCommandTest
     {
         testCommandLine( "scm:svn:http://anonymous@foo.com/svn/trunk", new ScmRevision( "10" ),
                          "svn --username anonymous --no-auth-cache --non-interactive update -r 10 " +
-                             getUpdateTestFile().getAbsolutePath() );
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithUsernameAndTag()
@@ -101,7 +101,7 @@ public class SvnUpdateCommandTest
     {
         testCommandLine( "scm:svn:http://anonymous@foo.com/svn/trunk", new ScmRevision( "10" ),
                          "svn --username anonymous --no-auth-cache --non-interactive update -r 10 " +
-                             getUpdateTestFile().getAbsolutePath() );
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithCygwinProperty()
@@ -114,7 +114,7 @@ public class SvnUpdateCommandTest
             {
                 assertTrue( SvnUtil.getSettings().isUseCygwinPath() );
                 testCommandLine( "scm:svn:http://foo.com/svn/trunk", null,
-                                 "svn --non-interactive update /mnt/c/my_working_directory",
+                                 "svn --non-interactive update /mnt/c/my_working_directory@",
                                  new File( "c:\\my_working_directory" ) );
             }
             finally
@@ -128,8 +128,8 @@ public class SvnUpdateCommandTest
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk", new ScmBranch( "branches/my-test-branch" ),
-                         "svn --non-interactive switch http://foo.com/svn/branches/my-test-branch " +
-                             getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive switch http://foo.com/svn/branches/my-test-branch@ " +
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithAbsoluteURLTag()
@@ -137,32 +137,32 @@ public class SvnUpdateCommandTest
     {
         testCommandLine( "scm:svn:http://foo.com/svn/trunk",
                          new ScmBranch( "http://foo.com/svn/branches/my-test-branch" ),
-                         "svn --non-interactive switch http://foo.com/svn/branches/my-test-branch " +
-                             getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive switch http://foo.com/svn/branches/my-test-branch@ " +
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithNonDeterminantBase()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/some-project", new ScmBranch( "branches/my-test-branch" ),
-                         "svn --non-interactive switch http://foo.com/svn/some-project/branches/my-test-branch " +
-                             getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive switch http://foo.com/svn/some-project/branches/my-test-branch@ " +
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithNonDeterminantBaseTrailingSlash()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/some-project/", new ScmBranch( "branches/my-test-branch" ),
-                         "svn --non-interactive switch http://foo.com/svn/some-project/branches/my-test-branch " +
-                             getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive switch http://foo.com/svn/some-project/branches/my-test-branch@ " +
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     public void testCommandLineWithBranchSameAsBase()
         throws Exception
     {
         testCommandLine( "scm:svn:http://foo.com/svn/tags/my-tag", new ScmTag( "tags/my-tag" ),
-                         "svn --non-interactive switch http://foo.com/svn/tags/my-tag " +
-                             getUpdateTestFile().getAbsolutePath() );
+                         "svn --non-interactive switch http://foo.com/svn/tags/my-tag@ " +
+                             getUpdateTestFile().getAbsolutePath() + "@" );
     }
 
     // ----------------------------------------------------------------------