And with the right MIME types...
Daniel Shahaf wrote on Mon, Feb 27, 2012 at 04:41:42 +0200:
> [email protected] 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
#!/bin/sh
set -eux
fail(){
echo "$@" >&2
exit 1
}
pgrep svnserve || fail "Run \$SVNSERVE -dr $(pwd)"
U_local=file://$(pwd)/r1
U_ra=svn://localhost/r1
U_mirror=file://$(pwd)/r2
ra_flags="--username=harry --password=h --no-auth-cache --config-dir=$(pwd)/cfg"
rm -rf r1 r2 wc1 cfg
$SVNADMIN create r1
cat <<EOF > r1/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
passwd-db = passwd
authz-db = authz
EOF
cat <<EOF > r1/conf/passwd
[users]
harry = h
EOF
cat <<EOF > r1/conf/authz
[/]
* = r
[/A]
* =
EOF
$SVN mkdir -q -mm $U_local/A
$SVNMUCC -mr2 -U $U_local cp HEAD / branch rm branch/A
$SVN log -v $U_local
$SVN log -v $U_ra $ra_flags
$SVNADMIN create r2
ln -s $(which true) r2/hooks/pre-revprop-change
$SVNSYNC init $U_mirror $U_ra $ra_flags
$SVNSYNC sync $U_mirror $U_ra $ra_flags
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