Greg Stein <gst...@gmail.com> writes:

> On Fri, Sep 6, 2013 at 1:47 PM, Philip Martin
>> Two people at least.  I have shown how Ev2 with a split move could
>> handle the case
>>
>>    A/B/C to A
>>    A/B to A/B
>>    A to A/B/C
>>
>> What is your alternative?

How does you suggestion work? Start with

NODES   local_relpath revision status   repos_path
          A              6     normal       A
          A/B            6     normal       A/B
          A/B/C          6     normal       A/B/C


> move(A/B/C@original, A, replace=R)

What does the receiver do?  I suppose it could implement the replace and
move the replaced nodes to some temporary table:

NODES   local_relpath revision status   repos_path
          A              6     normal       A/B/C

and

TEMP      A              6     normal       A
          A/B            6     normal       A/B
          A/B/C          6     not-present  A/B/C

but note the repos_path for the new A in NODES.  We can't simply change
it to:

NODES   local_relpath revision status   repos_path
          A              6     normal       A

as that row would be invalid: wrong properties, no A@6 in the
repository.  Let's leave it as A/B/C.

> move(A/B@original, A/B)

Then it moves the relevant rows out of the temporary table:

NODES   local_relpath revision status   repos_path
          A              6     normal       A/B/C
          A/B            6     normal       A/B
          A/B/C                not-present  A/B/C

and

TEMP      A              6     normal       A

So now A/B in NODES is switched relative to A. It's not even our
standard switch because A in the working copy is A/B/C in the repository
and the repository node has no child B.

> move(A@original, A/B/C)

Move the final row out of the temporary table

NODES   local_relpath revision status   repos_path
          A              6     normal       A/B/C
          A/B            6     normal       A/B
          A/B/C          6     normal       A

So now we have two of these strange switches.

> Not sure of the intent with children (ie. what is retained under A/B/C).

What children?  Every node gets moved.

Now we need the alter calls, these can fix up the switches:

alter_dir(A, children=B)

NODES   local_relpath revision status   repos_path
          A              8     normal       A
          A/B            6     normal       A/B
          A/B/C          6     normal       A

alter_dir(A/B, children=C)

NODES   local_relpath revision status   repos_path
          A              8     normal       A
          A/B            8     normal       A/B
          A/B/C          6     normal       A

alter_dir(A/B/C, children=)

NODES   local_relpath revision status   repos_path
          A              8     normal       A
          A/B            8     normal       A/B
          A/B/C          8     normal       A/B/C

Is that the plan?  NODES goes through those intermediate states with
switched nodes?

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to