• J
    git svn: work around SVN 1.7 mishandling of svn:special changes · b8c78e2a
    Jonathan Nieder 提交于
    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.
    
    Starting in subversion 1.7 (issue 4091), 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)
    
    Revisions prepared with ordinary svn commands ("svn add" and not "svn
    propset") don't trip this because they represent these filetype
    changes using a replace operation, which is approximately equivalent
    to removal followed by adding a new file and works fine.  Follow suit.
    
    Noticed using t9100.  After this change, git-svn's file-to-symlink
    changes are sent in a format that modern "svn update" can handle and
    tests t9100.11-13 pass again.
    
    [ew: s,git-svn\.perl,perl/Git/SVN/Editor.pm,g]
    Signed-off-by: NJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: NEric Wong <normalperson@yhbt.net>
    b8c78e2a
Editor.pm 15.0 KB