When will CVS be replaced by modern version control system?

Nils Philippsen nphilipp at redhat.com
Sun Nov 11 13:53:11 UTC 2007


On Sat, 2007-11-10 at 10:42 -0500, Jesse Keating wrote: 
> On Sat, 10 Nov 2007 14:10:38 +0100
> Nils Philippsen <nphilipp at redhat.com> wrote:
> 
> > > a) quick operations by avoiding round-trips to a remote server if
> > > not necessary
> > > b) easy branching and merging
> > > c) atomic operations
> > > d) co-maintainers (or maintainer apprentices) wouldn't need commit
> > > access to the main repository
> > > e) ability to do embargoed stuff like security fixes before they're
> > > public  
> > 
> > f) ability to rename things, especially handy for re-worked patches in
> > our context
> 
> I don't disagree that those things are nice with DVCS.  What I question
> is the amount of times they're necessary to warrant the extra
> complexity of a DVCS thrown at every user.
> 
> And still I continue to hear just features of dvcs, but not applied to
> a workflow for our Package vcs.

In that case, enjoy the list of problem areas below, i.e. where
non-distributed VCSs stand in the way. I've marked things where the
workflow would benefit with "===> ... <===" ;-).

How I see it is that the features of DVCSs are often deficiencies in
non-distributed VCSs. Using a better VCS would be worthwhile because of
the many situations where CVS stands in the way (and SVN isn't much
better):

- Slow operations, almost(?(*)) everything needs server round-trips,
just one example: for the CVS changelog I like to grep the changes in
the RPM %changelog. It usually takes a 10-20 seconds round-trip to
generate the diff of the spec file. That sucks. Same goes for tagging
though this isn't as tragic as you can chain the build after it in the
same make command. ===> I would be a good deal happier and probably more
productive if these operations were quicker <===.

(*) ok, just about everything with CVS. SVN manages to diff *against the
currently checked out revision* without a round trip. Big deal.

- Merging sucks with CVS. We currently have that byzantine setup of
not-real-branches-but-subdirectories specifically because merging with
CVS is an exercise in masochism and copying files around is much easier.
I thought that this was a mistake from the beginning, but with CVS that
wasn't obvious and when we did it there were few real alternatives.
Practically CVS is of no help for merging, the person in front of the
computer is effectively the VCS. Linus asks a good question in his
Google Techtalk speech (paraphrased): "How many of you merged branches
with CVS and enjoyed the experience?".

        - I regularly do the same release for 3 Fedora versions --
        Rawhide, F8, F7 nowadays -- (or more than one at least) and ===>
        it'd be so much better if I could change the spec file, add one
        patch, remove a second and update another just in the devel
        branch, then merge that changeset over to the other Fedora
        versions <===. If there are conflicts, the VCS shouldn't clutter
        up my files but run a tool like meld which lets me resolve the
        conflicts rather easily. And it should remember the merges, so I
        can merge again in the future and keep my sanity. With CVS/SVN,
        this is a no go.

        - Often I get bug reports with specific patches and related
        changed spec files. Again, often these changes are done against
        an older revision of the spec file so I need to re-do the
        changes so they match what is current. ===> If we used a DVCS,
        people could just e.g. "hg bundle" up their changes they did in
        their own repo, attach them to the bug or mail them to me, I
        could unbundle the changeset into the repo, merge and be happy
        <===.

These extra "complexities"(**) you mention, in fact the whole VCS
implementation, could easily be hidden behind "make [up|update]", "make
[commit|ci]", etc. Makefile targets.

(**): ... which I don't deem really complex. It took me about half an
hour to "master" the switch from CVS to Hg. Let me postulate that CVS
just isn't deemed as complex because we're used to it.

I know that we get by with using CVS, but I hope we're not content with
just getting by. CVS is at points so cumbersome that I think we're at a
point where we need reasons for staying with it rather than for moving
away from it. We consistently push the envelope in new technology in the
distribution, I think we should do the same in how the distribution is
built.

Mind that people mastered the "complexities" of having to deal with
bodhi as well, which was much more disruptive for someone who in the
past got by with "cvs up, <change stuff>, cvs ci, make tag build". If
they can do that, they can surely master using a DVCS, especially if
it's 90% command line compatible like Mercurial. If we don't hide the
used VCS and its complexity behind Makefile targets anyway that is.

Nils
-- 
     Nils Philippsen    /    Red Hat    /    nphilipp at redhat.com
"Those who would give up Essential Liberty to purchase a little Temporary
 Safety, deserve neither Liberty nor Safety."  --  B. Franklin, 1759
 PGP fingerprint:  C4A8 9474 5C4C ADE3 2B8F  656D 47D8 9B65 6951 3011




More information about the fedora-devel-list mailing list