Daniel Shahaf wrote on Sat, Feb 19, 2022 at 13:35:22 +0000: > This seems to have regressed the failure mode of «svn cat iota@BASE» > when iota is locally-modified and has no read access. > > To reproduce: >
Here's a patch too: [[[ Index: subversion/tests/cmdline/authz_tests.py =================================================================== --- subversion/tests/cmdline/authz_tests.py (revision 1898216) +++ subversion/tests/cmdline/authz_tests.py (working copy) @@ -1634,6 +1634,12 @@ def remove_access_after_commit(sbox): # Local modification sbox.simple_append('A/D/G/pi', 'appended\n') + # Check the error message from 'cat' + # ### Once this passes, verify stdout too + svntest.actions.run_and_verify_svn(None, '.*E170001: Authorization failed', + 'cat', sbox.ospath('A/D/G/pi') + '@BASE') + + # Update and expect a mixed rev copy expected_output = svntest.wc.State(wc_dir, { 'A/B' : Item(status='D '), 'A/D' : Item(status=' ', treeconflict='C'), @@ -1655,7 +1661,6 @@ def remove_access_after_commit(sbox): expected_status.remove('A/B', 'A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/F', 'A/B/lambda') - # And expect a mixed rev copy expected_status.tweak('A/D/G/rho', status='A ', entry_status=' ') svntest.actions.run_and_verify_update(wc_dir, expected_output, ]]] Cheers, Daniel > [[[ > #!/bin/sh > > : ${svn:=svn} > svn="$svn --username=h --password=h --no-auth-cache" > > rm -rf r wc > svnadmin create r > printf '%s\n' '[general]' 'anon-access = write' 'authz-db = authz' > > r/conf/svnserve.conf > printf '%s\n' '[users]' 'h=h' > r/conf/passwd > printf '%s\n' '[/]' '* = rw' > r/conf/authz > svnserve --foreground -d -r r & pid=$! > > $svn -q co svn://localhost wc --compatible-version=1.15 2>/dev/null || > $svn -q co svn://localhost wc > cd wc > sqlite3 .svn/wc.db "PRAGMA user_version;" > echo "This is the file 'iota'." > iota > $svn -q add iota > $svn -q ci -m "r1: add iota" > $svn -q up > $svn cleanup > find .svn/pristine/ -type f -exec head -v -- {} + > > # r2 > printf '%s\n' '[/iota]' '* = ' >> ../r/conf/authz > echo >> "conflicting local mod" >> iota > $svn cat -r BASE iota@BASE > > kill -9 $pid > exit > ]]] > > Output with trunk: > > [[[ > 31 > ==> .svn/pristine/2c/2c0aa9014a0cd07f01795a333d82485ef6d083e2.svn-base <== > This is the file 'iota'. > This is the file 'iota'. > ]]] > > Output with pristines-on-demand-mwf@r1898184: > > [[[ > 32 > ./subversion/svn/cat-cmd.c:88, > ./subversion/svn/util.c:626, > ./subversion/libsvn_client/cat.c:221, > ./subversion/libsvn_client/textbase.c:106, > ./subversion/libsvn_wc/textbase.c:553, > ./subversion/libsvn_wc/textbase.c:514, > ./subversion/libsvn_client/textbase.c:84, > ./subversion/libsvn_ra_svn/client.c:1456, > ./subversion/libsvn_ra_svn/client.c:249, > ./subversion/libsvn_ra_svn/marshal.c:1875, > ./subversion/svnserve/serve.c:132: (apr_err=SVN_ERR_RA_NOT_AUTHORIZED) > svn: E170001: Authorization failed > ]]] > > Output with pristines-on-demand-mwf@r1898216: > > [[[ > 32 > ./subversion/svn/cat-cmd.c:88, > ./subversion/svn/util.c:626, > ./subversion/libsvn_client/cat.c:227, > ./subversion/libsvn_client/cat.c:91: (apr_err=SVN_ERR_ILLEGAL_TARGET) > svn: E200009: '/scratch/tmp.uD2t1Qh9LB/wc/iota' has no pristine version until > it is committed > ]]] > > Output with pristines-on-demand-mwf@r1898216 after changing the authz on > iota to «* = rw», or with authz disabled entirely (whether by commenting > it out in svnserve.conf or by checking out over file://): > > [[[ > 32 > This is the file 'iota'. > ]]] > > Cheers, > > Daniel