Next: SVNCommitEmailMaildirSource, Previous: Parsing Email Change Messages, Up: Mail-parsing ChangeSources
This parser works with the buildbot_cvs_maildir.py script in the contrib directory.
The script sends an email containing all the files submitted in one directory. It is invoked by using the CVSROOT/loginfo facility.
The Buildbot's CVSMaildirSource
knows how to parse
these messages and turn them into Change objects. It takes two parameters,
the directory name of the maildir root, and an optional function to create
a URL for each file. The function takes three parameters:
file - file name oldRev - old revision of the file newRev - new revision of the file
It must return, oldly enough, a url for the file in question. For example:
def fileToUrl( file, oldRev, newRev ): return 'http://example.com/cgi-bin/cvsweb.cgi/' + file + '?rev=' + newRev from buildbot.changes.mail import CVSMaildirSource c['change_source'] = CVSMaildirSource("/home/buildbot/Mail", urlmaker=fileToUrl)
CVS must be configured to invoke the buildbot_cvs_mail.py script when files are checked in. This is done via the CVS loginfo configuration file.
To update this, first do:
cvs checkout CVSROOT
cd to the CVSROOT directory and edit the file loginfo, adding a line like:
SomeModule /cvsroot/CVSROOT/buildbot_cvs_mail.py --cvsroot :ext:example.com:/cvsroot -e buildbot -P SomeModule %{sVv}
NOTE: For cvs version 1.12.x, the '--path %p
' option is required.
Version 1.11.x and 1.12.x report the directory path differently.
The above example you put the buildbot_cvs_mail.py script under /cvsroot/CVSROOT.
It can be anywhere. Run the script with –help to see all the options.
At the very least, the
options -e
(email) and -P
(project) should be specified. The line must end with %{sVv}
This is expanded to the files that were modified.
Additional entries can be added to support more modules.
The following is an abreviated form of buildbot_cvs_mail.py –help
Usage: buildbot-cvs-mail [options] %{sVv} Where options are: --category=category -C Catagory for change. This becomes the Change.cagatory attribute. This may not make sense to specify it here, as category is meant to distinguish the diffrent types of bots inside a same project, such as "test", "docs", "full" --cvsroot=<path> -c CVSROOT for use by buildbot slaves to checkout code. This becomes the Change.repository attribute. Exmaple: :ext:myhost:/cvsroot --email=email -e email Email address of the buildbot. --fromhost=hostname -f hostname The hostname that email messages appear to be coming from. The From: header of the outgoing message will look like user@hostname. By default, hostname is the machine's fully qualified domain name. --help / -h Print this text. -m hostname --mailhost=hostname The hostname of an available SMTP server. The default is 'localhost'. --mailport=port The port number of SMTP server. The default is '25'. --quiet / -q Don't print as much status to stdout. --path=path -p path The path for the files in this update. This comes from the %p parameter in loginfo for CVS version 1.12.x. Do not use this for CVS version 1.11.x --project=project -P project The project for the source. Use the CVS module being modified. This becomes the Change.project attribute. -R ADDR --reply-to=ADDR Add a "Reply-To: ADDR" header to the email message. -t --testing Construct message and send to stdout for testing The rest of the command line arguments are: %{sVv} CVS %{sVv} loginfo expansion. When invoked by CVS, this will be a single string containing the files that are changing.