monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Monotone-devel] resolving name conflicts; implementation issues


From: Thomas Keller
Subject: Re: [Monotone-devel] resolving name conflicts; implementation issues
Date: Sun, 01 Jun 2008 02:12:09 +0200
User-agent: Thunderbird 2.0.0.14 (Macintosh/20080421)

Stephen Leake schrieb:
I've spent quite a bit of time figuring out how mark-merge is
implemented; I think I understand it now. I also have an approach to
adding support for suture and split.

Attached is a write-up of the mark-merge algorithm that allows for
sutures and splits, and a discussion of how to modify the computation
of the cached marking-map. It's based on the write-up by Nathaniel
Smith.

Hi Stephe!

Very nice work. Some things which which haven't been clear to me:

"Branching" means the scalars associated with a node have different
values in two child revisions that are derived from one parent.

What holds me from having more than two child values since we can have (of course) more than two child revisions for a single revision?

Directories cannot be sutured or split, but that's not relevant here.

Earlier you write:

 In monotone, the scalars are the file or directory name
(including directory path), the file contents (represented by a hash
of the actual contents), and attributes.

Iff attributes are treated as scalars and suturing and merging is defined as actions _on_ these scalars, it should be perfectly possible and reasonable to suture and split directories as well, since directories certainly have names and can have attached attributes as well. Mostly useful here of course for the name scalar, since this would allow the "merging" of directory contents from directories which have been created in two (or more) distinct revisions.


            A1a
    ii)     |      no change in value, so no mark
            B1a

            A1a
           /   \    split; value not changed, so not marked
          B2a   C1,2->3a


Shouldn't this be

            A1a
    ii)     |      no change in value, so no mark
            B1a

            A1a
           /   \    split; value not changed, so not marked
          B2a   C1a,2a->3a

?

I'm also not quite sure where node 2 comes from here - I guess it is born before A? And the scalar a (f.e. the contents) are not uniquely treated here, so 1a != 2a, correct?

Now we can say what we mean by "was a conflict" in case (v) above:
given A1a - C1b and B1a - C1b, we leave C unmarked if and only if
*(A) > B.

It might help here to repeat case (v) again.


I haven't yet read farer than until "Implementation" - will do this tomorrow... too late already over here ;)

Thomas.

--
GPG-Key 0x160D1092 | address@hidden | http://thomaskeller.biz
Please note that according to the EU law on data retention, information
on every electronic information exchange might be retained for a period
of six months or longer: http://www.vorratsdatenspeicherung.de/?lang=en

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]