On Wed, Sep 7, 2011 at 3:01 AM, Stefan Sperling <stsp_at_apache.org> wrote:
> On Tue, Sep 06, 2011 at 06:04:32PM -0400, Paul Burba wrote:
>> On Tue, May 24, 2011 at 12:35 PM, <stsp_at_apache.org> wrote:
>> > Author: stsp
>> > Date: Tue May 24 16:35:14 2011
>> > New Revision: 1127134
>> >
>> > URL: http://svn.apache.org/viewvc?rev=1127134&view=rev
>> > Log:
>> > As part of issue #3779, "actual-only nodes need regression tests",
>> > make 'svn add' detect tree conflict victims that do not exist on disk
>> > and prevent adding new nodes at that path with a meaningful error message.
>> >
>
>> Hi Stefan,
>>
>> While reviewing some outstanding merge-related issues I noticed that
>> this change breaks the use-case of incoming replacements on local
>> deletes. The delete portion of the replacement is handled and a
>> tree-conflict set by the time the add is done and the above error is
>> raised.
>
> Hmmm, this a problem.
> I remember fixing all sorts of merge replacement issues in 1.6.x.
> So this might even be a regression from 1.6.x :(
Unfortunately it is a regression from 1.6:
svn1.6.18-dev>svn merge ^^/A branch
--- Merging r2 through r4 into 'branch':
C branch\C
Summary of conflicts:
Tree conflicts: 1
svn1.6.18-dev>svn st
M branch
A + C branch\C
> local delete, incoming delete upon merge
>> Not exactly sure how to fix this...I can look at it further tomorrow,
>> just wanted to get your thoughts if you have time.
>
> Does reverting the changes made to libsvn_wc/adm_ops.c fix the problem?
It does (I added issue #4011 for this and a corresponding test in
r1166229). However with that reversion, tree_conflict_tests.py 23:
test behaviour with actual-only nodes now fails:
S:\SVN\src-trunk>win-tests.py -d -c --log-to-stdout --test=tree_conflict#23
Testing Debug configuration on local repository.
START: tree_conflict_tests.py
CMD: svnadmin.exe create svn-test-work\local_tmp\repos
--bdb-txn-nosync --fs-type=fsfs
<TIME = 0.029000>
CMD: svn.exe import -m "Log message for revision 1."
svn-test-work\local_tmp\greekfiles
file:///S:/SVN/src-trunk/Debug/subversion/tests/cmdline/svn-test-work/lo
cal_tmp/repos --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache --username jrando
m
<TIME = 0.069000>
Adding svn-test-work\local_tmp\greekfiles\A
Adding svn-test-work\local_tmp\greekfiles\A\B
Adding svn-test-work\local_tmp\greekfiles\A\B\lambda
Adding svn-test-work\local_tmp\greekfiles\A\B\E
Adding svn-test-work\local_tmp\greekfiles\A\B\E\alpha
Adding svn-test-work\local_tmp\greekfiles\A\B\E\beta
Adding svn-test-work\local_tmp\greekfiles\A\B\F
Adding svn-test-work\local_tmp\greekfiles\A\mu
Adding svn-test-work\local_tmp\greekfiles\A\C
Adding svn-test-work\local_tmp\greekfiles\A\D
Adding svn-test-work\local_tmp\greekfiles\A\D\gamma
Adding svn-test-work\local_tmp\greekfiles\A\D\G
Adding svn-test-work\local_tmp\greekfiles\A\D\G\pi
Adding svn-test-work\local_tmp\greekfiles\A\D\G\rho
Adding svn-test-work\local_tmp\greekfiles\A\D\G\tau
Adding svn-test-work\local_tmp\greekfiles\A\D\H
Adding svn-test-work\local_tmp\greekfiles\A\D\H\chi
Adding svn-test-work\local_tmp\greekfiles\A\D\H\omega
Adding svn-test-work\local_tmp\greekfiles\A\D\H\psi
Adding svn-test-work\local_tmp\greekfiles\iota
Committed revision 1.
CMD: svnadmin.exe create
svn-test-work\repositories\tree_conflict_tests-23 --bdb-txn-nosync
--fs-type=fsfs
<TIME = 0.030000>
CMD: svnadmin.exe dump svn-test-work\local_tmp\repos | svnadmin.exe
load svn-test-work\repositories\tree_conflict_tests-23 --ignore-uuid
<TIME = 0.002000>
CMD: svn.exe co
file:///S:/SVN/src-trunk/Debug/subversion/tests/cmdline/svn-test-work/repositories/tree_conflict_tests-23
svn-test-work\working_copies\tree_conf
lict_tests-23 --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache --username jrando
m
<TIME = 0.098000>
A svn-test-work\working_copies\tree_conflict_tests-23\A
A svn-test-work\working_copies\tree_conflict_tests-23\A\B
A svn-test-work\working_copies\tree_conflict_tests-23\A\B\lambda
A svn-test-work\working_copies\tree_conflict_tests-23\A\B\E
A svn-test-work\working_copies\tree_conflict_tests-23\A\B\E\alpha
A svn-test-work\working_copies\tree_conflict_tests-23\A\B\E\beta
A svn-test-work\working_copies\tree_conflict_tests-23\A\B\F
A svn-test-work\working_copies\tree_conflict_tests-23\A\mu
A svn-test-work\working_copies\tree_conflict_tests-23\A\C
A svn-test-work\working_copies\tree_conflict_tests-23\A\D
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\gamma
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\G
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\G\pi
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\G\rho
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\G\tau
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\H
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\H\chi
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\H\omega
A svn-test-work\working_copies\tree_conflict_tests-23\A\D\H\psi
A svn-test-work\working_copies\tree_conflict_tests-23\iota
Checked out revision 1.
CMD: svn.exe copy -m "File
'S:\SVN\src-trunk\subversion\tests\cmdline\tree_conflict_tests.py',
line 1119, in actual_only_node_behaviour" file:///S:/SVN/src-trun
k/Debug/subversion/tests/cmdline/svn-test-work/repositories/tree_conflict_tests-23/A
file:///S:/SVN/src-trunk/Debug/subversion/tests/cmdline/svn-test-work/repos
itories/tree_conflict_tests-23/A_copy --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth
-cache --username jrandom
<TIME = 0.037000>
Committed revision 2.
CMD: svn.exe checkout
file:///S:/SVN/src-trunk/Debug/subversion/tests/cmdline/svn-test-work/repositories/tree_conflict_tests-23/A_copy
svn-test-work\working_cop
ies\tree_conflict_tests-23.wc2 --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache
--username jrandom
<TIME = 0.094000>
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B\lambda
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B\E
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B\E\alpha
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B\E\beta
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\B\F
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\mu
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\C
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\gamma
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\G
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\G\pi
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\G\rho
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\G\tau
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\H
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\H\chi
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\H\omega
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\D\H\psi
Checked out revision 2.
CMD: svn.exe add
svn-test-work\working_copies\tree_conflict_tests-23.wc2\foo
--config-dir S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tm
p\config --password rayjandom --no-auth-cache --username jrandom
<TIME = 0.025000>
A svn-test-work\working_copies\tree_conflict_tests-23.wc2\foo
CMD: svn.exe commit -m "File
'S:\SVN\src-trunk\subversion\tests\cmdline\tree_conflict_tests.py',
line 1127, in actual_only_node_behaviour" svn-test-work\working
_copies\tree_conflict_tests-23.wc2\foo --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-aut
h-cache --username jrandom
<TIME = 0.048000>
Adding svn-test-work\working_copies\tree_conflict_tests-23.wc2\foo
Transmitting file data .
Committed revision 3.
CMD: svn.exe commit -m "File
'S:\SVN\src-trunk\subversion\tests\cmdline\tree_conflict_tests.py',
line 1132, in actual_only_node_behaviour" svn-test-work\working
_copies\tree_conflict_tests-23.wc2 --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-ca
che --username jrandom
<TIME = 0.052000>
Sending svn-test-work\working_copies\tree_conflict_tests-23.wc2\foo
Transmitting file data .
Committed revision 4.
CMD: svn.exe update
svn-test-work\working_copies\tree_conflict_tests-23 --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\con
fig --password rayjandom --no-auth-cache --username jrandom
<TIME = 0.082000>
Updating 'svn-test-work\working_copies\tree_conflict_tests-23':
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B\lambda
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B\E
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B\E\alpha
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B\E\beta
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\B\F
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\mu
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\C
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\gamma
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\G
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\G\pi
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\G\rho
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\G\tau
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\H
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\H\chi
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\H\omega
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\D\H\psi
A svn-test-work\working_copies\tree_conflict_tests-23\A_copy\foo
Updated to revision 4.
CMD: svn.exe merge -c 4
file:///S:/SVN/src-trunk/Debug/subversion/tests/cmdline/svn-test-work/repositories/tree_conflict_tests-23/A_copy
svn-test-work\working_c
opies\tree_conflict_tests-23\A --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\config
--password rayjandom --no-auth-cache
--username jrandom
<TIME = 0.047000>
--- Merging r4 into 'svn-test-work\working_copies\tree_conflict_tests-23\A':
C svn-test-work\working_copies\tree_conflict_tests-23\A\foo
--- Recording mergeinfo for merge of r4 into
'svn-test-work\working_copies\tree_conflict_tests-23\A':
U svn-test-work\working_copies\tree_conflict_tests-23\A
Summary of conflicts:
Tree conflicts: 1
CMD: svn.exe add
svn-test-work\working_copies\tree_conflict_tests-23\A\foo --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\
config --password rayjandom --no-auth-cache --username jrandom
CMD: S:\SVN\src-trunk\Debug\subversion\svn\svn.exe add
svn-test-work\working_copies\tree_conflict_tests-23\A\foo --config-dir
S:\SVN\src-trunk\Debug\subversion\
tests\cmdline\svn-test-work\local_tmp\config --password rayjandom
--no-auth-cache --username jrandom exited with 1
<TIME = 0.026000>
..\..\..\subversion\svn\add-cmd.c:86: (apr_err=155015)
..\..\..\subversion\svn\util.c:970: (apr_err=155015)
..\..\..\subversion\libsvn_client\add.c:713: (apr_err=155015)
..\..\..\subversion\libsvn_client\add.c:586: (apr_err=155015)
..\..\..\subversion\libsvn_client\add.c:586: (apr_err=155015)
svn: E155015: 'S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\working_copies\tree_conflict_tests-23\A\foo'
is an existing item in conflict; pleas
e mark the conflict as resolved before adding a new item here
CMD: svn.exe add
svn-test-work\working_copies\tree_conflict_tests-23\A\foo --config-dir
S:\SVN\src-trunk\Debug\subversion\tests\cmdline\svn-test-work\local_tmp\
config --password rayjandom --no-auth-cache --username jrandom
<TIME = 0.025000>
A svn-test-work\working_copies\tree_conflict_tests-23\A\foo
EXPECTED STDERR (regexp):
.*foo.*is an existing item in conflict.*
ACTUAL STDERR:
CWD: S:\SVN\src-trunk\Debug\subversion\tests\cmdline
EXCEPTION: SVNUnmatchedError
Traceback (most recent call last):
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\main.py",
line 1312, in run
rc = self.pred.run(sandbox)
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\testcase.py",
line 176, in run
return self.func(sandbox)
File "S:\SVN\src-trunk\subversion\tests\cmdline\tree_conflict_tests.py",
line 1154, in actual_only_node_behaviour
"add", foo_path)
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\actions.py",
line 268, in run_and_verify_svn
expected_exit, *varargs)
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\actions.py",
line 307, in run_and_verify_svn2
verify.verify_outputs(message, out, err, expected_stdout, expected_stderr)
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\verify.py",
line 388, in verify_outputs
compare_and_display_lines(message, label, expected, actual, raisable)
File "S:\SVN\src-trunk\subversion\tests\cmdline\svntest\verify.py",
line 361, in compare_and_display_lines
raise raisable
SVNUnmatchedError
FAIL: tree_conflict_tests.py 23: test behaviour with actual-only nodes
END: tree_conflict_tests.py
ELAPSED: tree_conflict_tests.py 0:00:00.968000
> I was aiming at changing the behaviour of 'add' and 'mkdir', not 'merge'.
> Both 'add' and 'mkdir' should be covered by the change to libsvn_client/add.c.
>
> I probably just added the check to adm_ops.c as well in case some API callers
> bypass svn_client_add(). But I did not consider the implications for 'merge'.
>
Received on 2011-09-07 17:36:46 CEST