Broke CVS
I meant no harm, but I drove the CVS server at the office to a grinding halt.
We're experimenting with CruiseControl, a continuous integration tool. It's supposed to watch the CVS repository where we store our code for changes; when it sees changes it downloads and builds them, optionally running JUnit tests. The CVS server uses SSH, so we added some PGP keys to allow the CVS configuration to be used without exposing passwords. All dandy.
Sadly, the CVS server was configured on-the-quick, and there are flaws with the directory permissions and the desired "read-only" attributes of the user we created for CruiseControl. It happens that whenever a new directory is added, or we try to grab a new project, that the CVS complains and won't let the cruisecontrol user create the necessary #lock files.
In good faith, and with all of the good intentions, I tried to change the CVS configuration file to move these #lock files to somewhere that everyone has access, like /tmp. The #lock files are created before work is done, last only as long as the CVS work is being done, and are deleted promptly after. The directory structure remains, but that's not really using space. The process even survives a /tmp cleaning, as long as there aren't any active locks.
I checked out the CVSROOT/config file, made almost the correct change, and then committed the file. As I watched the screen display the "checking in" message, I slapped myself in the forehead, realizing my mistake. I had put /tmp/cvs in the config file, not /tmp. This in itself isn't horrible, but it causes a problem as the directory must exist for CVS to use it.
Now CVS can't create a #lock file anywhere, for any user, for any CVS purpose. I tried to access the server directly via a shell, but I'm not allowed access.
I sent a note to the CVS admin, but he hasn't responded. Reluctantly I told my boss, who chuckled with me, until I pointed out that no CVS access worked, not just mine. He's still holding a cheery mood about it, which I expect will persist through the resolution.
It's a simple break, and a more simple fix; all for the want of one octothorpe!