By Matt Butcher
Shell script to simplify Drupal CVS module checkouts
I am finally fed up enough with the multi-step process for checking out a Drupal contrib module that I created a simple shell script to do the dirty work for me. This script is named cvs_checkout_module.sh (imaginative, huh?). In hopes that this might be of interest/use to others... here it is.
#!/bin/bash ##################################################################### # This script checks out a contrib module. # It sets up the environment first, and then does a CVS login and # a CVS checkout. ##################################################################### if [[ $# == 0 ]]; then echo "Usage: $0 module_name [branch_or_tag]" echo " " echo " module_name: " echo " Module name must be the name of the module in Drupal's CVS repo." echo " branch_or_tag: " echo " If no branch/tag is specified, HEAD will be used." echo " " echo "Example: " echo " $0 cacheexclude DRUPAL-6--2" echo " " exit 1; fi # This directory will be created, and then used to house the # new code. dest="./$1/$2" mkdir -p $dest cd $dest export CVSROOT=:pserver:$DRUPAL_USERNAME@cvs.drupal.org:/cvs/drupal-contrib cvs login TAG='HEAD'; if [[ $# > 1 ]]; then TAG=$2; fi echo "Checking out $1 with revision $TAG" cvs -z6 checkout -r $TAG -d $1 contributions/modules/$1
(The code above is public domain. Use it however.)
Make sure to set $DRUPAL_USERNAME to your username.
Running this script is as easy as this:
$ ./cvs_checkout_module.sh cacheexclude DRUPAL-6--2
This will check out the DRUPAL-6--2 branch of the cacheexclude module.
How the code works
The code above does the following:
- It creates a new directory of the form ./MODULE_NAME/TAG. For example,
./cacheexclude/DRUPAL-6--2. This allows you to conveniently keep multiple versions of a module in the same place. - It logs into the Drupal CVS server. Again, make sure that
$DRUPAL_USERNAMEis set. - It checks out the new module into the appropriate directory.
When this is done, you should have a directory layout looking like this:
./cacheexclude/
DRUPAL-6--2/
cacheexclude/
cacheexclude.module
cacheexclude.info
# etc.Checking out multiple branches of the same project
Need to grab another branch? You can run the same command again, passing a different branch:
$ ./cvs_checkout_module.sh cacheexclude DRUPAL-5--2
That will give you a directory layout that looks like this:
./cacheexclude/
DRUPAL-6--2/
cacheexclude/
cacheexclude.module
cacheexclude.info
# etc.
DRUPAL-5--2/
cacheexclude/
cacheexclude.module
cacheexclude.info
# etc.From inside of each of branch directories, you can use CVS as usual.








