Gentoo Archives: gentoo-dev

From: Ryan Phillips <rphillips@g.o>
To: Grant Goodyear <g2boojum@g.o>
Cc: gentoo-dev@l.g.o
Subject: [gentoo-dev] Re: CVS alternatives -- meta-cvs
Date: Wed, 28 Jan 2004 20:16:16
Message-Id: 20040128150254.GA9483@trolocsis
In Reply to: [gentoo-dev] CVS alternatives -- meta-cvs by Grant Goodyear
1 * Grant Goodyear <g2boojum@g.o> [2004-01-27 12:30]:
2 > A recent thread discussed alternatives to CVS. As our developers know
3 > all too well (but some -dev readers may not), the portage tree is kept
4 > in CVS, which serves us reasonably well until somebody wants to move
5 > files around, rename files, or create symbolic links, all of which are a
6 > real hassle.
7 >
8 > I've been casually looking into alternatives for a while, and it's still
9 > not clear that there is a viable alternative just yet. Subversion is
10 > not yet stable, and at least until recently it was prohibitively slow,
11 > but it does have the desired features. Arch would probably work as
12 > well, but the docs are just awful so somebody other than me would have
13 > to evaluate it. (Being able to have distributed trees _would_ be nice,
14 > however!)
15 >
16 > While looking into arch I discovered meta-cvs
17 > (http://users.footprints.net/~kaz/mcvs.html), which is also not entirely
18 > ready for prime time (in terms of migrating portage), but it might be
19 > closer, and it might be _really_ nice for gentoo subprojects. Thanks to
20 > the work of mkennedy, we now have an mcvs ebuild, and I just added an
21 > mcvs patch to the latest ~x86 version of viewcvs.
22 >
23 > What makes mcvs potentially useful for us is that mcvs is essentially a
24 > front-end to CVS which, on the server side, requires _nothing_ more than
25 > a normal CVS repository. The way that mcvs works, in essence, is that
26 > when files are added to an cvs repository they are actually saved using
27 > cryptic F-uglyhash.foo filenames along with entries in a MAP file. This
28 > level of indirection means that when a file is renamed, or moved, all
29 > that really changes in the repository is the entry in the MAP file that
30 > maps the F-uglyhash.foo file to the new location in the tree. (Symlinks
31 > are stored only as entries in the MAP file.) To get a feeling for
32 > what's going on, take a look at
33 > http://cvs.grantgoodyear.org/viewcvs/chem332.ces.clemson.edu/?root=cvs.
34 > That page looks mostly like a normal cvs tree, but it's actually an mcvs
35 > tree sitting in my cvs repository. Viewcvs (or, to be honest, the mcvs
36 > patch for viewcvs) doesn't handle mcvs directories as well as it might,
37 > so instead of having actual directories (which mcvs would create upon
38 > checkout) the directory structure is reflected in rather long filenames.
39 > *Shrug* If you look at the MAP file, though, you can see the mapping
40 > between the ugly filenames and the real files.
41 >
42 > In my opinion, the big drawbacks to meta-cvs right now are: (a) no good
43 > tool for converting a cvs repository to mcvs without losing history and
44 > commit comments, although it shouldn't be _that_ hard to script one, (b)
45 > the viewcvs patch produces results that are not very pretty, (c) users,
46 > but not cvs servers, need to install clisp to use mcvs, and (d) mcvs
47 > needs to parse the MAP file, which could be memory intensive and lengthy
48 > for a really large mcvs tree (such as portage), although the author of
49 > the program notes that running CVS update on large trees takes so long
50 > that the linear scaling to parse the MAP file may not be all that
51 > noticeable.
52 >
53
54 I have some experience with ARCH/TLA but only on small projects. It
55 is very nice in terms of distributed repositories, and the
56 documentation isn't all that bad. There is a wiki
57 (http://wiki.sourcecontrol.net/moin.cgi/) that has a whole bunch of
58 information.
59
60 What is is nice about arch is the branches. In arch you can actually
61 keep track of different branches easily and painlessly. Say we want a
62 stable, unstable, cutting-edge branch for the portage tree. It is
63 possible to merge specific patches from one branch into another for
64 say security fixes, and maintainability. Say KDE from the unstable
65 branch becomes stable, just merge the patch-set for kde over to the
66 stable branch.
67
68 In addition, CVS and ARCH can be used together for a 'trial run'.
69 There is a guide here
70 (http://wiki.sourcecontrol.net/moin.cgi/Arch_20and_20CVS_20in_20the_20same_20tree)
71 to help you. Using arch and CVS together shouldn't mess up anything,
72 the arch directories are not committed to the CVS.
73
74 Regards,
75 Ryan