CVS hatefulness

CVS might be considered an easy target for software hate, but that doesn’t stop it annoying the hell out of you. Here’s an instance I encountered today, trying to use cvs annotate.

So, here I am in my CVS working copy.

$ cvs status src/blah.c
File: blah.c          Status: Up-to-date

   Working revision:
   Repository revision: /srv/cvs/project/src/Attic/blah.c,v
   Sticky Tag:          ramulus (branch: 1.1.2)
   Sticky Date:         (none)
   Sticky Options:      (none)


Good-o — I’m on the branch I expect to be, and the file’s up-to-date with respect to the repository. Now I’d like to see who last touched a particular line in the file.

$ cvs annotate src/blah.c | head -1

Annotations for src/blah.c

What? No blame? But the file… she exist!

Oh, I see:

$ cvs annotate -r ramulus src/blah.c | head -1

Annotations for src/blah.c
***************      (aaron   10-Apr-08): #include <stdio.h>

So, when a file was created on a branch, you have to specify that branch name to be able to see its annotations. (And even if it already existed when you branched, by default you just see the blame for the HEAD revision.)

I can’t imagine what in the name of all that is unholy possessed the perpetrator of this excrescence to consider that a reasonable design.