Subversion represents symlinks as ordinary files with content
starting with "link " and the svn:special property set to "*".  Thus a
file can switch between being a symlink and a non-symlink simply by
toggling its svn:special property, and new checkouts will
automatically write a file of the appropriate type.  Likewise, in
subversion 1.6 and older, running "svn update" would notice changes
in filetype and update the working copy appropriately.

Unfortunately, starting in subversion 1.7 ,changes to the svn:special
property trip an assertion instead:

        $ svn up svn-tree
        Updating 'svn-tree':
        svn: E235000: In file 'subversion/libsvn_wc/update_editor.c' \
        line 1583: assertion failed (action == svn_wc_conflict_action_edit \
        || action == svn_wc_conflict_action_delete || action == \
        svn_wc_conflict_action_replace)

This is a known bug in "svn update" (Subversion issue 4091) and for
the sake of old repositories it will need to be fixed some day.

Revisions prepared with ordinary svn commands ("svn add" and not "svn
propset") don't trip this because they represent filetype changes
using a replace operation, which is approximately equivalent to
removal followed by adding a new file and works fine.  Perhaps "git
svn" should mimic that, but for now let's teach the test suite to
recover from the bug by testing the content of HEAD with a new
checkout.

After this change, tests t9100.11-13 pass again.

Signed-off-by: Jonathan Nieder <jrnie...@gmail.com>
---
Hi Eric,

Michael G. Schwern wrote:

> At this point SVN 1.7 passes except for 3 tests in
> t9100-git-svn-basic.sh that look like an SVN bug to do with
> symlinks.

How about this patch?

I didn't add a new xfail test for "svn up" working because I'm not yet
sure what good git-svn behavior would be.  Probably it would be better
to track down that svn bug and get a fix backported to the 1.7.x
branch.

Reference: http://subversion.tigris.org/issues/show_bug.cgi?id=4160

 t/t9100-git-svn-basic.sh |   13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh
index 749b75e8..34d3485f 100755
--- a/t/t9100-git-svn-basic.sh
+++ b/t/t9100-git-svn-basic.sh
@@ -19,6 +19,15 @@ case "$GIT_SVN_LC_ALL" in
        ;;
 esac
 
+svn_up_avoiding_issue4091 () {
+       if ! svn_cmd_up "$SVN_TREE"
+       then
+               # work around Subversion issue 4091
+               rm -r "$SVN_TREE" &&
+               svn_cmd checkout "$svnrepo" "$SVN_TREE"
+       fi
+}
+
 test_expect_success \
     'initialize git svn' '
        mkdir import &&
@@ -148,7 +157,7 @@ test_expect_success "$name" '
        git commit -m "$name" &&
        git svn set-tree --find-copies-harder --rmdir \
                ${remotes_git_svn}..mybranch5 &&
-       svn_cmd up "$SVN_TREE" &&
+       svn_up_avoiding_issue4091 &&
        test -h "$SVN_TREE"/exec.sh'
 
 name='new symlink is added to a file that was also just made executable'
@@ -173,7 +182,7 @@ test_expect_success "$name" '
        git commit -m "$name" &&
        git svn set-tree --find-copies-harder --rmdir \
                ${remotes_git_svn}..mybranch5 &&
-       svn_cmd up "$SVN_TREE" &&
+       svn_up_avoiding_issue4091 &&
        test -f "$SVN_TREE"/exec-2.sh &&
        test ! -h "$SVN_TREE"/exec-2.sh &&
        test_cmp help "$SVN_TREE"/exec-2.sh'
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to