Tuesday, June 4, 2013

Adding multiple files to CVS

Since the beginning, this blog was meant more as short mental notes for future retrieval. So, here comes another one:

I am a long term CVS users. I have lots of old projects which still being maintained with CVS for version control, backup and central repository. Most of these projects must be updated and/or must have new features added to them, some times I have to add lots of files to the repository, and doing this from the command line would be very painful if there were not powerful command line tools such as "find", "grep", "cut" and "xargs".

First, I have to add everything which is not a CVS control folder to the repository:

find . -not -name CVS -not -name Root -not -name Entries -not -name Repository -exec cvs add {} \;

Second, the remaning files from the projects root folder must be added to. Issuing a "cvs update", the appear with a question mark (?), but cvs echos a lot more info to the stderr. We can cut that off, rederecting the stderr to NULL, and grepping the question marks, cutting the second field and piping it to xargs to add those files to the cvs repository:
cvs update -R -P -d 2> /dev/null | grep "?" | cut -d " " -f 2 | xargs cvs add

Fine. Everything new is in the cvs repository.