Hello again,
I'm attaching a reproducing test.
I'm not 100% sure that
[
'Index: %s\n' % sbox.path('iota'),
'===================================================================\n',
'--- %s\t(revision 1)\n' % sbox.path('iota'),
'+++ %s\t(working copy)\n' % sbox.path('iota'),
'@@ -1 +1 @@\n',
'-This is the file \'iota\'.\n',
'+link iota\n',
'\ No newline at end of file\n',
'\n',
'Property changes on: iota\n',
'___________________________________________________________________\n',
'Added: svn:special\n',
'## -0,0 +1 ##\n',
'+*\n',
'\ No newline at end of property\n',
]
is the expected output but definitely the diff command shouldn't fail with
exit code 1 as it does now.
--
Dmitry Pavlenko,
TMate Software,
http://subgit.com/ - git-svn bridge
On среда, 11 июля 2018 г. 16:13:06 CEST Dmitry Pavlenko wrote:
> Hello.
> The following scenario fails for me: delete a file, create a symlink with
> the same name, run "svn diff". Instead of displaying the diff, SVN tries to
> read the link content. If "NOWHERE" variable is set to the file name, the
> symlink refers to itself, showing another error.
>
> Instead I would expect something with "-" and "+" markers. If you uncomment
> #echo "link $NOWHERE" > $WC_PATH/trunk/file
>
> and comment out "ln -s" call, the script will display approximately what I
> would expect (but without svn:special).
>
> I'm not sure if this is a known bug, sorry for reporting something known if
> it is.
>
> Locally I also have similar scenario failing in another way: before reading
> the symlink it displays deletion of "trunk/trunk/symlink" (yes, unexpectedly
> double "trunk", in my local test the file is called "symlink"). But I think
> it's the same issue. If it will still fail after this one is fixed, I'll
> analyze why.
>
>
>
> #!/bin/sh
>
> SVN=svn
>
> #1. Create an empty SVN repository.
>
> REPOSITORY_PATH="$PWD/svn.repo"
>
> svnadmin create "$REPOSITORY_PATH"
>
> # 2. Add a file to the repository.
>
> WC_PATH="/tmp/wc"
> REPOSITORY_URL="file://$REPOSITORY_PATH"
>
> $SVN co $REPOSITORY_URL $WC_PATH
> $SVN mkdir $WC_PATH/trunk
>
> echo "content" > $WC_PATH/trunk/file
>
> $SVN add $WC_PATH/trunk/file
> $SVN commit -m "A file added." $WC_PATH
>
> # 3. Replace the file with a symlink pointing to nowhere (or to itself ---
> for another kind of error)
>
> NOWHERE="changed/path"
> #NOWHERE="file"
>
> rm $WC_PATH/trunk/file
>
> ln -s $NOWHERE $WC_PATH/trunk/file
>
> # By the way: uncomment the following line and comment out the previous one
> for comparison
> #echo "link $NOWHERE" > $WC_PATH/trunk/file
>
> # 4. Create diff between repository HEAD and working copy:
>
> $SVN diff --git $REPOSITORY_URL $WC_PATH
>
> echo ""
> echo ""
> echo "-----------------------------------------"
> echo "If you see something like"
> echo "-content"
> echo "+link $NOWHERE"
> echo "And svn:special property set to '*'"
> echo "Then consider test passed"
> echo "-----------------------------------------"
Index: subversion/tests/cmdline/diff_tests.py
===================================================================
--- subversion/tests/cmdline/diff_tests.py (revision 1836275)
+++ subversion/tests/cmdline/diff_tests.py (working copy)
@@ -5201,7 +5201,36 @@ def diff_summary_repo_wc_local_copy_unmodified(sbo
'--old=' + sbox.ospath('iota') + '@HEAD',
'--new=' + sbox.ospath('iota2'))
+def diff_file_replaced_by_symlink(sbox):
+ "diff base vs working: symlink replaces a file"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ iota_path = sbox.ospath('iota')
+ os.remove(iota_path)
+
+ # create a symlink pointing to itself
+ # alternatively it could point to a non-existing path
+ sbox.simple_symlink('iota', 'iota')
+
+ svntest.actions.run_and_verify_svn([
+ 'Index: %s\n' % sbox.path('iota'),
+ '===================================================================\n',
+ '--- %s\t(revision 1)\n' % sbox.path('iota'),
+ '+++ %s\t(working copy)\n' % sbox.path('iota'),
+ '@@ -1 +1 @@\n',
+ '-This is the file \'iota\'.\n',
+ '+link iota\n',
+ '\ No newline at end of file\n',
+ '\n',
+ 'Property changes on: iota\n',
+ '___________________________________________________________________\n',
+ 'Added: svn:special\n',
+ '## -0,0 +1 ##\n',
+ '+*\n',
+ '\ No newline at end of property\n',
+ ], [], 'diff', wc_dir)
+
########################################################################
#Run the tests
@@ -5300,6 +5329,7 @@ test_list = [ None,
diff_unversioned_files_git,
diff_summary_repo_wc_local_copy,
diff_summary_repo_wc_local_copy_unmodified,
+ diff_file_replaced_by_symlink,
]
if __name__ == '__main__':