Stupid software tricks

   :) boreale$ cvs update -q
   cvs [update aborted]: -q or -Q must be specified before "update"

Translated: “I know what you’re trying to do, but it’s not the way
I want it, so I’m going to make you retype the command.” Not only that,
it doesn’t even give you something to cut and paste. Not only
that, but it apparently can’t tell if I typed -q
or "-Q"! Stupid, stupid, stupid.

Not only that, but having gone through the entire cvs(1)
manual page, I discover that there is no cvs subcommand
(update is the subcommand there) that takes a -q, so
the command is completely unambiguous with the -q
following update, and it doesn’t accept it anyhow. That
goes beyond stupid to hostile.

It’s worse: I want quiet mode when I update, but not when
I commit. CVS has a .cvsrc file that you can set
defaults in; the syntax consists of one line per subcommand, where
the first word is the subcommand and everything following are the
default arguments. Default global arguments use cvs as
the subcommand. This makes it impossible to do this:

    update -q

Instead you can only do

    cvs -q

so that it affects all the subcommands. Otherwise you have to type
it in every time you want it (and in the right place!). Of course, the
fact that you can put cvs -q in that file at all is not
documented in the section of the manual (“CVS STARTUP FILE”) that
explains the .cvsrc syntax. It’s also not documented in
the FILES section, which helpfully explains again how to
use that file, identically to the previous explanation, right down
to omitting how to set global options.

Also: If you have the cvs(1) manual page handy, look and
see how many places you have to look to read everything there is
to know about what one subcommand — say, update — does.
In mine, I counted four, each separated by pages of text, none
of which tell you to read more below: in “ESSENTIAL COMMANDS”,
by option, not by subcommand, so you have to do a text search through
the whole section to find out what applies to update), and
in “CVS COMMANDS”. Some of you might think that “ESSENTIAL COMMANDS”,
“CVS COMMAND SUMMARY”, and “CVS COMMANDS” do not seem to be particularly
different. Some of you might be right.

Also, the section on cvs add tells you how to combine
update properly with that subcommand, as does the section
on commit, and part of the “FILES” and “ENVIRONMENT
VARIABLES” sections talk about how
to modify the behavior of update. In short, the only way
you can find out exactly how update behaves is to at least
skim the entire 23-page manual.

Stupid, hostile, and poorly documented. It must be open-source!

Additionally there is a special circle in hell for those of you who
use this as an opportunity to advocate your favorite source code
control system in comments.

23 responses to “Stupid software tricks”

  1. Grr. I know you’re joking but it will turn into a really annoying discussion if people start talking about their favorite revision control systems.

  2. Out of sheer curiosity you got me digging around in the cvs package documentation (answer to curiosity: GPL version 1, yow), and I found HACKING, which contains in part:

       Low-priority bugs go here.  Actually, most every documented bug is 
       "low-priority"--in the sense that if it is documented it means noone 
       has gotten around to fixing it.
       * If a ~/CVS/Root file exists on the server and you are using rsh to 
       connect to the server, CVS may loose [sic] its mind

    Somehow this was not reassuring.

  3.     This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 1, or (at your option)
        any later version.

    Feel free to redestribute it as version 2.

    Of course, I know you won’t, and with good reason. CVS is a complete and total sinkhole. AFAIK, nobody has ever gone into CVS to “fix” things and a) reversed any of the existing damage, b) come out willing and able to write any useful software that wasn’t some completely different version control system.

  4. I find it alarming how many pedantic wank arguments you’re getting from people, considering that you are pro-open-source. Just because you’re for it though, doesn’t mean you’re for sloppiness and shit that just plain doesn’t work. =) Ah well. Also, having the right to discuss what you find frustrating seems to be fully within the purview of your own journal, or so one would think. ;)

  5. I’m pretty familiar with CVS; that’s what we use to manage forked and locally-generated packages for our Linux distribution. It’s just stupid, hostile, and poorly documented. I don’t think you’ll find many people that use CVS heavily on a daily basis that wouldn’t agree with one or more of those descriptions occasionally. We’ve got a lot in CVS and some of the breakage we’ve experienced has been interesting, to say the least. (Fixing it is my problem.)

    Should I talk about large binary files and CVS? No? Ok.

    Also, you can put different options for different commands in your .cvsrc file, right?

    Well, yes, that’s what I described in my post up there.

    But you can’t do what I complained about — make only “update” quiet — because you can only pass “-q” as a global option. If you could pass “-q” to a subcommand — and since it’s unique it’s unambiguous and the only reason it doesn’t work is because they didn’t feel like it (strongly enough to make a specific error message for that condition). If I could put “update -q” in .cvsrc I would be a happy camper (in this regard — this is not my only complaint about this particular source motel), but I can’t.

  6. I checked the rules, and it appears the “watched 12 hours of LOTR in one sitting” ring takes precedence anyhow. But I tried!

  7. I was thinking about the fact that I have two tattoos and I’m now back living with my father, who only knows about one of them. Then I got to thinking of the different ways to state the above information (he doesn’t know about half of them, I have one he doesn’t know about, he only knows about one of them, etc.) and the different mental images you would construct from hearing that and not being privy to all of the information. I considered asking others what they thought about this, which led me to think of posting it to an LJ community. In the end, I didn’t do anything because I didn’t want to suffer through grammarpolice giving me shit about sentences ending with a preposition or linguaphiles saying something about it being a single-language question.

    Because, y’know, who doesn’t like getting responses that are answers to completely different questions?


  8. You want to start me on that too? :-) I get frustrated reading that because it’s as much advocacy and PEBCAK as it is broken software. I go read up every now and again but I don’t really plan on being a regular — that sort of advocacy is not much fun. (This sort is fun though.)

    Besides, I have here to post :-)

  9. ‘boreale’ makes me nostalgic. Are all your hostnames different beers? Can you get that in Ottawa? It’s unheard-of here.

    ObOnTopic: uhh… CVS sucks. The Cederqvist book reveals some secrets, which tricks you into thinking that you’re winning, but you’re just losing less.

  10. You can get Boreale in Ottawa by driving to Hull! As far as I can tell it’s only available in Quebec.

    And yes, not just beer but Quebecois beer (and mostly Unibroue at that)! My workstation is boreale, Candice‘s is quelquechose, my laptop is maudite, the firewall is griffon, the Mac is (Blanche de) chambly, the Qube that will be the mp3 player is bolduc, and the SS20 soon to be running a tape library is ephemere.

  11. Oops, no. PLEASE don’t mention large binary files! Hey, why is this update over my DSL talking 5 minutes?

    Yeah, I noticed your .cvsrc later–I guess I did not read carefully enough at first. Sorry.

    One of these days, I want to try Subversion. While I love being an early adopter, I am a little nervous about early-adopting an entire source control system…