On Mar 16, 2012 9:29 AM, "Philip Martin" <philip.mar...@wandisco.com> wrote:
>
> Greg Stein <gst...@gmail.com> writes:
>
> > I think the update should ask, "apply edits to A/f to your moved B/f?".
>
> If the user says "no" then I think we would have to break the move and
> convert it into a copy + delete.  If the user copies A/f@3 to B/f and
> then updates A/f to r4, it doesn't make sense for B/f to remain a move.

I think you misstated something here. "copies to" vs "remain a move".

If the first was "move A/f@3 to B/f", then the update to A/f@4 is a
conflict. Today, we call it an incoming-edit/local-delete conflict. With
moves, this is what I've been saying: it becomes an
incoming-edit/local-move conflict. It doesn't mysteriously and silently
update B/f.

The user can choose two outcomes, I believe:
1) apply edit to B/f. Local-move becomes A/f@4 to B/f.
2) install A/f@4. Local-move becomes copy of A/f@3 to B/f.

If the move-source is a directory, then the restore+changes becomes a bit
more difficult: how much to restore? For example, if I move A, an incoming
edit changes A/B/f, do I restore all of A (eg. A/C, A/D...) or just A/B?

> Note that the destination isn't always a working file.  Consider a
> working copy with 3 files A/Y/f, B/Y/f, C/Y/f.  Move A to X, delete X/Y,
> move B/Y to X/Y, delete X/Y/f, move C/Y/f to X/Y/f:
>
> op-depth  local-relpath  presence  moved-to   moved-here
>    0        A            normal
>    0        A/Y          normal
>    0        A/Y/f        normal
>    1        A            deleted    X
>    1        A/Y          deleted
>    1        A/Y/f        deleted
>    0        B            normal
>    0        B/Y          normal
>    0        B/Y/f        normal
>    2        B/Y          deleted    X/Y
>    2        B/Y/f        deleted
>    0        C            normal
>    0        C/Y          normal
>    0        C/Y/f        normal
>    3        C/Y/f        deleted    X/Y/f
>    1        X            normal                 1
>    1        X/Y          normal                 1
>    1        X/Y/f        normal                 1
>    2        X/Y          normal                 1
>    2        X/Y/f        normal                 1
>    3        X/Y/f        normal                 1
>
> So the file X/Y/f exists at op-depth 1, 2 and 3.  An update that changes
> B/Y/f needs to update the row X/Y/f at op-depth 2 although no change is
> made to the working file.

Woah. Interesting!

Though I'd call that a conflict again. It is definitely an edit/delete
conflict (X/Y/f was explicitly deleted). I argue it is an edit/move
conflict first. If the user forward-applies the edit, they get the
edit/delete conflict. Though I guess a better phrase is edit/replace. What
are the resolution options for edit/replace? Toss the edit, or undo the
replace (a move-dest in this case) and apply the edit.

Cheers,
-g

Reply via email to