[darcs-users] Conflict marking
David Roundy
droundy at darcs.net
Wed Nov 5 13:29:18 UTC 2008
On Wed, Nov 05, 2008 at 03:06:11AM +0000, Ian Lynagh wrote:
>
> Hi all,
>
> I'm trying to write down exactly how conflict marking works.
> I'd appreciate it if you'd let me know if you see any errors in the
> following.
Looks about right to me.
David
> If we have a repository
> As
> then we can commute this to
> Bs Cs
> where:
> * everything in Cs is a conflictor, and
> * Bs cannot be commuted to
> Ds E
> where E is a conflictor.
>
> Let Fs^ be the effect of Cs. Then Bs can be commuted to
> Gs Fs
> (proof by contradiction: If a patch in Gs depended on something in Fs,
> then whatever conflicted with that F would have also conflicted with
> that G).
>
> Gs is the pristine state.
>
> Now, we can imagine this repo as starting with the sequence Gs, and then
> having multiple forks:
>
> One fork is
> Fs
>
> Forall patches in Cs, if Cs = Xs [effect, context:Y] Zs
> then
> Fs effect(Xs) effect context Y
> is a fork (but commute anything you can past Y to make the conflict look
> as simple as possible).
>
> Similarly, if one fork is subsumed by another then remove it.
> For example, in the merge
> A + (B C)
> where A conflicts with B and C depends on B, we only need the forks
> A and BC
> we don't need all of
> A, B and BC
>
> Note that in order to find the Fs fork we don't need to split Cs into
> Gs Fs, we can just get Fs from the effect of the conflictors.
>
> Note also that we don't need to worry about what the conflictors
> conflict with, only what they are /first/ to conflict with (i.e. what is
> in their effect).
>
>
> The other half of the puzzle is how to show 2 or more forks to the user,
> but I haven't got that far yet. That's obviously dependent on exactly
> what types of primitive patches you have.
>
>
> Thanks
> Ian
>
--
David Roundy
http://www.darcs.net
More information about the darcs-users
mailing list