Your browser doesn't seem to support CSS, which this page uses for all styling. Don't be surprised if it looks kinda boring.

[Jump to nav]


This is a suite of scripts, in Perl, to provide for notification mailings from a CVS repository on any commit.

For a long time, I used a very hacked and very old version of the scripts used in the FreeBSD repository, but while it worked well if I didn't touch it, it was a twisted mess, and difficult to implement on new repositories. This is based heavily on the methods used in the newer verion of those scripts, but it's all developed here. It's a lot more stripped-down than those scripts are, but also more generalized.


Installation is something of a breeze. Download the tarball, and follow the instructions. If you have a pristine CVSROOT, you can install via an automated script included in the package. If you've been messing with it yourself, you may still be able to use the script, but if not, there's a quick rundown of doing it manually.


The current version is cvsmail 1.4. This fixes the following bugs in previous versions:

  • If just the right number of files are commited, the Subject: line will get broken up by a blank line and the end of it (and subsequent headers) end up in the message body.
  • If a file is "cvs rm"'d, will spew out a harmless but bloody annoying error message.
  • will end up commiting all files with a mode left over from its hard-coded 077 umask, which means they'd end up without world read/execute permissions, regardless of how they're intended to be. Annoying for webpages and the like.

And adds some features:

  • An exclusion list ($NO_UNEXPAND) that specifies a regexp of filenames which will not have RCS ID unexpansion attempted. This is useful for files like uuencoded or diff/patch files whose contents shouldn't be altered, and for binary files like JPEG's. In the case of binary files, it's an optimization in the general case, and a bugfix for some versions of Perl with Unicode or multibyte support, which will attempt to parse them as multibyte text and blow chunks all over the regexp for unexpansion.


  • cvsmail 1.3 fixed 1.2's broken handling of "cvs import"'s.
  • cvsmail 1.2 is the oldest one that really worked at all.

The future?

While I have no pressing need for future development of this, I'm sure bits and pieces will crawl to the surface over time. Expect there to occasionally be new releases as bugs surface or new features strike my fancy. However, this is not intended to be a be-all and end-all script for CVS mailings by any means. Simplicity is my primary goal here.