NAME¶
cvs-mailcommit - Send CVS commitments via mail
SYNOPSIS¶
cvs-mailcommit [options] [version*]
DESCRIPTION¶
cvs-mailcommit is a helper application to CVS to help people keep track
of CVS repositories via mail. It is hooked into the CVS system via the
CVSROOT/
loginfo file. It will read modification information
from CVS via
stdin and require version information via the commandline.
cvs-mailcommit will send differences of modified files or entire new
files via mail to the denoted address.
You'll have to hook it into CVS for each module in a repository that you want to
monitor via mail. See
INSTALLATION below
OPTIONS¶
This program supports the following arguments. When the arguments don't make
sense the program won't do anything.
- -m address, --mailto address
- Send the mail to the specified address. This option can be
specified on the commandline multiple times.
- --diff
- Generate unified diffs for all modified files.
- --full
- Include the entire fill for newly created files that were added to the
repository.
- --maxlines nnn
- You can specify how many lines per file may be quoted in the resulting
mail. Limiting the number of quoted lines may be useful for repositories
with excessive changes that are similar. The default is to copy 400
lines.
- --xloop address
- Include a special X-Loop header in the generated mail. This is
intended for users to be able to filter CVS mails by a common header line.
The line will look like
X-Loop: address
- --from address
- Generate a From:-line of the form
From: CVS User foo < address>
Otherwise the local user the program runs under will be used instead of
address. With this parameter you can ensure that all such mails
will be sent with the same from line, which may be useful for moderated
lists or some where only subscribers may write.
- --replyto address
- Try to redirect replies to CVS mails to another address by setting proper
header lines such as
Reply-To: address
Mail-Followup-To: address
- --approved address
- Include a special Approved:-line in the mail. This header is
intended for moderated mailing-lists to pass the SmartList moderation
mechanism. The created header will look like
Approved: address
- --cvs version string
- This option carries the CVS version info from CVS into the program. It
will be added automatically by CVS. When installing this program into the
loginfo file of a CVS repository, you will need to add the
following option:
--cvs %{sVv}
If you want to test this program manually you'll have to supply the module
directory and the modified files including the old and new versions. This
will look like
--cvs 'CVSROOT loginfo,1.1,1.2'
This option is only usful for old-style CVS format strings (i.e. prior to
CVS 1.12.6). You can continue using old-style format strings with newer
cvs if you write %1{sVv} and set UseNewInfoFmtStrings=yes in
CVSROOT/config. For more recent versions of CVS you should, however, use
the new --root and --dir arguments and place %{sVv} at the end of the
commandline.
- --root cvs repository
- Specify the CVS repository directory. This is normally done by the CVS
server. Prior to version 1.12 the repository was transmitted to the log
processor via the CVSROOT environment variable. The parameter to
this option is normally filled in by CVS using the %r format string:
--root %r
- --dir module directory
- Specify the directory within the CVS repository in which directories or
file were added or modified. The parameter to this option is normally
filled in by CVS using the %p format string:
--dir %p
CONFIGURATION FILE¶
cvs-mailcommit supports an additional configuration file
/etc/cvs-mailcommit.pl so that hard-coded default values can be
overwritten. The file is included via require and hence needs to contain valid
Perl code, which evaluates to
true. I.e. place
1; at the end of
the file.
INSTALLATION¶
The
CVSROOT/
loginfo file controls where
cvs commit log
information is sent. The first entry on a line is a regular expression which
must match the directory (alias module) that the change is being made to,
relative to the $
CVSROOT. If a match is found, then the remainder of
the line is a filter program that should expect log information on its
standard input.
A
loginfo line looks like
<directory> <command> --<option> --<option>
NOTES¶
The
--cvs option is only valid for old-style CVS format strings prior to
version 1.12.6 of CVS with
%{sVv} or for new-style CVS format strings
using the compatibility hack with
%1{sVv}.
For new-style CVS format strings for CVS version 1.12.6 or higher
--cvs
must not be used anymore, but instead
--root and
--dir are
required. The version information
%{sVv} must be added at the end of
the command line.
EXAMPLE¶
Assume you want to monitor changes in the
CVSROOT module, then you may
want to use the following line.
CVSROOT cvs-mailcommit \
--mailto master@host.org \
--from cvs@cvshost.com \
--cvs %{sVv} --diff --full
If you want to distribute changes in a module via a mailing list where only
these log messages should appear you may have to add an X-Loop: or Approved:
header line.
webwml cvs-mailcommit \
--mailto master@host.org \
--from cvs@cvshost.com \
--approved cvsmaster@cvshost.com \
--cvs %{sVv} --diff --full
The above configuration lines are valid only for old-style format strings. With
a more recent version of CVS (1.12.6 or newer) you'll have to replace
%{sVv} with
%1{sVv} and set
UseNewInfoFmtStrings to
yes in
CVSROOT/config.
For new-style CVS format strings other parameters need to be used since CVS
changed the syntax and semantics. You must not use the
--cvs option
anymore but need to use
--root and
--dir and place the version
list at the end. The last example converted for new-style format strings looks
like the following:
webwml cvs-mailcommit \
--mailto master@host.org \
--from cvs@cvshost.com \
--approved cvsmaster@cvshost.com \
--diff --full --root %r --dir %p %{sVv}
To improve readability, the above lines were broken up into several lines using
normal continuation lines. This is not supported by CVS. You will have to
write it in one single line.
WARNING¶
CVS does not support continuation lines (multiple lines per command) in the
CVSROOT/
loginfo file. You'll have to write each filter in a
single line of its own.
SOURCE¶
http://www.infodrom.org/Infodrom/tools/cvs-mailcommit.html