On Thu, May 16, 2013 at 1:58 PM, Philip Martin
<philip.martin_at_wandisco.com> wrote:
> Paul Burba <ptburba_at_gmail.com> writes:
>
>> Bob's script is a different beast, there is a real problem there. I
>> will rewrite the test to demonstrate his scenario.
>
> It doesn't matter whether we use 1.7 or 1.8 for this:
>
> rm -rf repo wc
> svnadmin create repo --compatible-version 1.7
> svn -mm mkdir --parents file://`pwd`/repo/T/P
> svn -mm cp file://`pwd`/repo/T ^/B
> svn -mm mkdir --parents file://`pwd`/repo/T/P/Q/R
> svn -mm mkdir file://`pwd`/repo/T/X
> svn -mm rm file://`pwd`/repo/T/P/Q/R
> svn co --depth empty file://`pwd`/repo/B wc
> svn merge ^/T wc
> svn ci -mm wc
>
> Both 1.7 and 1.8 give this history:
>
> svn log file://`pwd`/repo -vq
> ------------------------------------------------------------------------
> r6 | pm | 2013-05-16 18:38:44 +0100 (Thu, 16 May 2013)
> Changed paths:
> M /B
> A /B/X (from /T/X:5)
> ------------------------------------------------------------------------
> r5 | pm | 2013-05-16 18:38:43 +0100 (Thu, 16 May 2013)
> Changed paths:
> D /T/P/Q/R
> ------------------------------------------------------------------------
> r4 | pm | 2013-05-16 18:38:43 +0100 (Thu, 16 May 2013)
> Changed paths:
> A /T/X
> ------------------------------------------------------------------------
> r3 | pm | 2013-05-16 18:38:43 +0100 (Thu, 16 May 2013)
> Changed paths:
> A /T/P/Q
> A /T/P/Q/R
> ------------------------------------------------------------------------
> r2 | pm | 2013-05-16 18:38:43 +0100 (Thu, 16 May 2013)
> Changed paths:
> A /B (from /T:1)
> ------------------------------------------------------------------------
> r1 | pm | 2013-05-16 18:38:43 +0100 (Thu, 16 May 2013)
> Changed paths:
> A /T
> A /T/P
> ------------------------------------------------------------------------
> svn pg svn:mergeinfo file://`pwd`/repo/B
> /T:2-5*
>
> This merge fails with 1.8:
>
> svn co file://`pwd`/repo/B wc
> svn merge ^/T wc
> svn ci -mm wc
> svn: E160028: '/B/P/Q/R' is out of date
>
> But the same merge works with 1.7 giving this commit:
>
> r7 | pm | 2013-05-16 18:54:02 +0100 (Thu, 16 May 2013)
> Changed paths:
> M /B
> A /B/P/Q (from /T/P/Q:3)
> D /B/P/Q/R
>
> The reason 1.8 fails is that it is not copying T/P/Q from the old r3 but
> from head. With 1.7 the wc.db before the commit looks like:
>
> sqlite3 wc/.svn/wc.db "select op_depth, local_relpath, presence, repos_path, revision from nodes order by op_depth, local_relpath"
> 0||normal|B|6
> 0|P|normal|B/P|6
> 0|X|normal|B/X|6
> 2|P/Q|normal|T/P/Q|3
> 2|P/Q/R|normal|T/P/Q/R|3
> 3|P/Q/R|base-deleted||
>
> but with 1.8 it looks like:
>
> sqlite3 wc/.svn/wc.db "select op_depth, local_relpath, presence, repos_path, revision from nodes order by op_depth, local_relpath"
> 0||normal|B|6
> 0|P|normal|B/P|6
> 0|X|normal|B/X|6
> 2|P/Q|normal|T/P/Q|6
> 2|P/Q/R|normal|T/P/Q/R|6
> 3|P/Q/R|base-deleted||
>
> The merge has created a bogus copy, it has the path structure associated
> with r3 but is marked r6.
Fixed this in http://svn.apache.org/viewvc?view=revision&revision=1483947
I'm confident this fix is correct, but would appreciate any review,
since this is a convoluted use case.
--
Paul T. Burba
CollabNet, Inc. -- www.collab.net -- Enterprise Cloud Development
Skype: ptburba
Received on 2013-05-17 20:50:28 CEST