danie...@apache.org wrote on Mon, Feb 27, 2012 at 02:30:38 -0000:
> Author: danielsh
> Date: Mon Feb 27 02:30:37 2012
> New Revision: 1293998
> 
> URL: http://svn.apache.org/viewvc?rev=1293998&view=rev
> Log:
> Fix issue #4121: svnsync of a copy followed by delete of was-unreadable child.
http://subversion.tigris.org/issues/show_bug.cgi?id=4121
> 
> * subversion/libsvn_repos/replay.c
>   (was_readable): New helper.
>   (path_driver_cb_func):
>     Use new helper to determine whether to replay or discard deletions.

I've been trying to write a regression test for this, but got stuck
converting my shell script to Python.

I have a shellscript (attached) that reproduces the issue for me: with
r1293997 it outputs

    Copied properties for revision 1.
    subversion/libsvn_ra_svn/client.c:2440: (apr_err=210008)
    svnsync: E210008: Error while replaying commit
    zsh: exit 1     ./01repro

I am also attaching an attempt at an equivalent Python test.  For me the
Python test passes against r1293997.  Can anyone spot the difference?

Thanks,

Daniel

Attachment: repro.sh
Description: Bourne shell script

Index: subversion/tests/cmdline/svnsync_tests.py
===================================================================
--- subversion/tests/cmdline/svnsync_tests.py	(revision 1293992)
+++ subversion/tests/cmdline/svnsync_tests.py	(working copy)
@@ -1029,10 +1029,40 @@ def fd_leak_sync_from_serf_to_local(sbox):
   resource.setrlimit(resource.RLIMIT_NOFILE, (128, 128))
   run_test(sbox, "largemods.dump", is_src_ra_local=None, is_dest_ra_local=True)
 
-########################################################################
-# Run the tests
+@Issue(4121)
+@Skip(svntest.main.is_ra_type_file)
+def copy_delete_unreadable_child(sbox):
+  "copy, then rm at-src-unreadable child"
 
+  ## Prepare the source: Greek tree (r1), cp+rm (r2).
+  sbox.build("copy-delete-unreadable-child")
+  svntest.actions.run_and_verify_svnmucc(None, None, [], 
+                                         '-m', 'r2',
+                                         '-U', sbox.repo_url,
+                                         'cp', 'HEAD', '/', 'branch',
+                                         'rm', 'branch/A')
 
+  ## Create the destination.
+  dest_sbox = sbox.clone_dependent()
+  build_repos(dest_sbox)
+  svntest.actions.enable_revprop_changes(dest_sbox.repo_dir)
+
+  ## Lock down the source.
+  write_restrictive_svnserve_conf(sbox.repo_dir, anon_access='read')
+  svntest.main.file_write(sbox.authz_file,
+      "[copy-delete-unreadable-child:/]\n"
+      "* = r\n"
+      "[copy-delete-unreadable-child:/A]\n"
+      "* =  \n"
+  )
+
+  dest_url = svntest.main.file_scheme_prefix \
+             + svntest.main.pathname2url(os.path.abspath(dest_sbox.repo_dir))
+  run_init(dest_url, sbox.repo_url)
+  run_sync(dest_url)
+
+######################################################################## # Run the tests 
+
 # list all tests here, starting with None:
 test_list = [ None,
               copy_and_modify,
@@ -1070,6 +1100,7 @@ test_list = [ None,
               descend_into_replace,
               delete_revprops,
               fd_leak_sync_from_serf_to_local, # calls setrlimit
+              copy_delete_unreadable_child,
              ]
 serial_only = True
 

Reply via email to