[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Monotone-devel] branch representation
From: |
Zbynek Winkler |
Subject: |
Re: [Monotone-devel] branch representation |
Date: |
Thu, 27 Oct 2005 12:31:45 +0200 |
User-agent: |
Debian Thunderbird 1.0.2 (X11/20050602) |
Nathaniel Smith wrote:
So the idea is: what if we got rid of branch certs, and put a branch
field inside the revision object? So each revision is uniquely,
irrevocably, in a single branch. So each revision is not just a
snapshot, but a snapshot with a purpose attached. And instead of
automatically putting a branch cert on at commit time, you put a
"yeah, this is good" cert on (since the rev already has a purpose
built in, your vague affirmation of goodness can be assumed to match
that).
Hmm. I think we first need to decide what *exactly* branches are before
evaluating ideas about changing them.
The first thing that comes to mind is
Are branches development lines or just a way to group arbitrary
otherwise unrelated groups of revisions?
I think that the term "branch" comes with some kind of expectation.
Almost all VCS use the term and understanding is that it usually
represents a development line and not a bag of things. Do not get me
wrong, I think it is really useful to have "bag of things" but please
let's not call them branches because it is IMHO unnecessary confusion
for anyone who has ever used other VCS. Just look at these pictures
http://www.mozilla.org/roadmap/branching-2005-01-25.png
http://www.mozilla.org/roadmap/branching-2002-12-26.png
Everyone wants to talk about stuff like "branch point" and draw the the
branches as lines of development. And it is just too hard when your VCS
does not know these terms or (worse) uses them to mean something
completely different.
Yeah, this is a really weird idea. It's weird enough that I have
trouble really imagining it to evaluate it. (And enough that I
deserve to be hit repeatedly with a stick for bringing it up when
we're trying to _stabilize_ things...)
Anyway, this wouldn't help with things that people find
counter-intuitive like, "this branch is discontinuous", or "this
branch has multiple branch points", or "this branch has multiple
heads". It would help with the confusion about revs being in multiple
branches, and generally reduce the weirdness we have all the time
where we have to assume all revs have branch certs on them, and try
and guess an appropriate branch name given a revision, and so on -- it
seems like the code and users both want to think of branch certs as at
least somewhat special. I'm thinking of guess_branch, and update's
tricky handling of branches, and netsync filtering by branch...
Yes, at least I think that branches are somewhat special and that the
general idea of grouping revisions in to a bag can be done by just an
arbitrary cert.
It might make doing trust stuff significantly easier.
I agree. I think it would have clearer model this way. I would really
like the fact that you need to create a new revision when moving some
changes between branches... because in fact, I see adding new code to a
branch as a new development and not as attachment of some arbitrary meta
data. It would support the "line of development" thing much better.
Zbynek
--
http://zw.matfyz.cz/ http://robotika.cz/
Faculty of Mathematics and Physics, Charles University, Prague, Czech Republic