monotone-devel
[Top][All Lists]
Advanced

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

[Monotone-devel] bidirectional CVS gateway


From: Christof Petig
Subject: [Monotone-devel] bidirectional CVS gateway
Date: Fri, 10 Dec 2004 12:44:35 +0100
User-agent: Mozilla/5.0 (X11; U; Linux ppc; de-AT; rv:1.7.3) Gecko/20041007 Debian/1.7.3-5

[intentionally breaking deep the mail threading]

graydon hoare schrieb:
and we've been over this before. it usually boils down to some
variation (synchronous or asynchronous) of having a "branch owner" --
person, robot, discriminated server -- issue a special linear cert.
this unfortunately centralizes a failure case, and is not robust
against backup/restore and multiple-issue errors on the case of the
owner.

unless oren has some new idea about how to establish a stable, robust
linear subgraph, I propose we just let the whole topic drop for a
while.  we've been running around in circles all week, and not come
up with much new since the last time this was raised 6 months ago.
we're all getting bitchy, and there's not much gained by making the
mood hostile. I already made enough bad blood by saying that phonetic
hashes sounded "crazy"; I'm sorry for having said so already, but
it's done. let's just focus on real bugs and easily-agreed-on
improvements for a while.

I'm sorry I can't drop this topic. Switching to monotone to do real _work_ would be dramatically easier if we had a monotone CVS synchronization.

I said I would code it (given that you think it possible) and already looked deep into the CVS server protocol. To make a sync monotone->CVS you need the concept of a HEAD revision (and to make the sync _efficient_ you should not choose a new HEAD which is not a descendant of an old HEAD). So certificates which indicate which DAG branch is a new CVS branch and which one continues an existing CVS branch would be needed as a prerequisite to synchronization (I might abuse timestamps to get a consistent though unstable notation).

All I need is a cert saying "take me as the main branch" which is trusty enough to get considered. Multiple credible (brach-)HEAD-certs must get resolved before sync can take place (like update, which says the branch is unmerged and exits)

------------------

Apart from that: Do you have any design ideas on how to construct a bidirectional CVS gateway? Another (less elegant) solution is to put a CVS checkout into monotone (with CVS/Root,CVS/Repository etc). You get free syncing by updating and then committing into the other VCS.
[This might satisfy my needs but not my taste]

IMHO the main problem is to identify corresponding versions in monotone and CVS [timestamp and changelog might be your only guide] without downloading every revision of every file (to get the SHA1 ID). cvs log (or even less e.g. Entry/Unchanged) should be the main interface to synchronize. But to use "Entry/Unchanged" we need to store the CVS file version in monotone. Any ideas?

Pull idea: Iterate over every file, Iterate over every branch, get the head revision, get the changelog and timestamp of the head, try to identify monotone version, unless you find the last pulled version, create new MT revisions as needed.

Push idea: determine (how???, cvs log on each file?) which revisions are present in CVS and which are missing, determine which of these modify which branch (in order) and perhaps (option?) create additional branches on the fly (you know, I'm kidding if you know the CVS protocol, it does not fly for branches). Sounds like there should be an optimized version which does only determine and commit new changes to the head of a specific branch (looks less network intensive). This sounds more like merkle trees (I don't know their theory) might come in handy.

   Christof

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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