Wednesday, May 30, 2007

version control

well, yesterday was the first official day of coding for SoC. Besides spending time looking through code and playing around with some ideas, I also decided to set up some revision control for myself.

Gsharp is held in CVS on common-lisp.net, which i do not have write access to (nor do I want to at this time). My initial thought was to check it out of CVS, and then use some tool to make a private, local branch that I could work on (since CVS itself can't do branches which the central repository doesn't know about, hence requiring a commit bit on the tree). Some quick reading revealed that the newfangled git did exactly this fairly well, so i set about the task.

first step: checking out the source from common-lisp.net. No problem here, just followed instructions.

step 2: running git-cvsimport. You are supposed to be able to simply enter the checked-out cvs directory, specify where you want the git repository, et voila. It didn't really work like that. I tried specifying the cvsroot manually, running it from different directories and on and on, to no avail. I got a number of different error messages depending on exactly what directory I ran the command in and other things, but the one that kept popping up again and again was:

AuthReply: cvs [pserver aborted]: descramble: unknown scrambling method
After wrestling this for a while I gave up and skipped step 3.

step 3: run git-clone on the new git repository and get coding.

after spending some time dealing with the problem in step 2, i thought about what i was doing. in the end, 99.9% of my changes are going to be in one, new file. There are a couple of existing files that will get touched, but only in very small, easily reproduced ways (things like the asd file, which has a list of all of the other files). Thinking about it, I decided that this whole git operation was overkill anyhow. I'm just gonna use RCS.

UPDATE: since writing this, I couldn't help but think about the error message I got, and eventually I figured out what the problem was: when checking out the source from CVS, I used a newer form of the checkout command for anonymous pserver access. older clients (and apparently git or possibly cvsps which is used by git) require the old style cvs login in order to work with pserver. I was able to get the whole thing working fairly easily after that, but decided that my previous conclusion (learning a new VC just to maintain one file is silly) was still valid. I do have a tip however: when using git-cvsimport, be sure to use the -v flag. It can take a few minutes to run, so without output it's hard to tell if it's actually working.