> -----Original Message----- > From: MARTIN PHILIP [mailto:codematt...@ntlworld.com] On Behalf Of > Philip Martin > Sent: vrijdag 18 januari 2013 11:20 > To: Bert Huijben > Cc: dev@subversion.apache.org > Subject: Re: svn commit: r1434913 - > /subversion/trunk/subversion/libsvn_wc/wc_db.c > > "Bert Huijben" <b...@qqmail.nl> writes: > > > I think > > $ svn mv A B > > $ svn mv B A > > > > Will now store moved_from and moved_to in the same record, at the > > op-depth of A. (Or copy_tests.py move_file_back_and_forth wouldn't > > show moved_from and moved_to on a single node using status using the > > code snippet here) > > > > How will this store a future move > > $ svn mv A C > > I think: > > svn mv A B > svn mv B A > > is shorthand for: > > svn mv A X > svn mv B A > svn mv X B > > If so then a subsequent: > > svn mv A C > > should result in A->B and B->C but it appears there is a bug in the > implementation. The result is B->C but the A->B move gets lost.
I'm still not sure if the current scheme scales under the move of multiple subtrees svn mv A Z svn mv Z/B B svn mv Z/C C svn rm Z svn up So after this A/B is still moved to B and A/C to C, but keeping track of all of this will take a lot of work. I would guess it is much simpler to store in op_depth A/B that it is currently in B, and in op_depth A/C that it is in C. (and while doing the above that A was at Z) The status walker currently just checks what is stored in the latest read op-depth, so that code is certainly broken over multiple layered moves where subtrees are involved. svn mkdir --parents A/A/A/A/A/A svn ci -m "" svn mv A/A/A/A/A/A C svn mv A/A/A/A D svn mv A/A E svn mv B/A/ A/A and more things like this.. It is certainly possible to get multiple moved-froms at different depths the same path if you try a bit with a scheme like this. There is no way status or a single path can pinpoint a single moved-to this way, yet this is what the current apis offer. This problem will never occur with a storing moved-from in BASE (op-depth 0). (Moved-from is always stored in the op-root of the addition, so this can never have this problem... The problem is in the moved-to scheme) The current scheme appears to be designed to allow only tracking the root of deletes, which is just the easy case, compared to generic move tracking. Bert