+++ /dev/null
-# The "checkoutlist" file is used to support additional version controlled
-# administrative files in $CVSROOT/CVSROOT, such as template files.
-#
-# The first entry on a line is a filename which will be checked out from
-# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
-# The remainder of the line is an error message to use if the file cannot
-# be checked out.
-#
-# File format:
-#
-# [<whitespace>]<filename><whitespace><error message><end-of-line>
-#
-# comment lines begin with '#'
-syncmail
-ciabot_cvs.pl
+++ /dev/null
-#!/usr/bin/perl -w
-#
-# ciabot -- Mail a CVS log message to a given address, for the purposes of CIA
-#
-# Loosely based on cvslog by Russ Allbery <rra@stanford.edu>
-# Copyright 1998 Board of Trustees, Leland Stanford Jr. University
-#
-# Copyright 2001, 2003, 2004 Petr Baudis <pasky@ucw.cz>
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2, as published by the
-# Free Software Foundation.
-#
-# The master location of this file is
-# http://pasky.or.cz/~pasky/dev/cvs/ciabot.pl.
-#
-# This version has been modified a bit, and is available on CIA's web site:
-# http://cia.navi.cx/clients/cvs/ciabot_cvs.pl
-#
-# This program is designed to run from the loginfo CVS administration file. It
-# takes a log message, massaging it and mailing it to the address given below.
-#
-# Its record in the loginfo file should look like:
-#
-# ALL $CVSROOT/CVSROOT/ciabot_cvs.pl %{,,,s} $USER project from_email dest_email ignore_regexp
-#
-# IMPORTANT: The %{,,,s} in loginfo is new, and is required for proper operation.
-#
-# Make sure that you add the script to 'checkoutlist' and give it
-# 0755 permissions -before- committing it or adding it.
-#
-# Note that the last four parameters are optional, you can alternatively
-# change the defaults below in the configuration section.
-#
-
-use strict;
-use vars qw ($project $from_email $dest_email $rpc_uri $sendmail $sync_delay
- $xml_rpc $ignore_regexp $alt_local_message_target);
-
-
-
-### Configuration
-
-# Project name (as known to CIA).
-$project = 'blootbot';
-
-# The from address in generated mails.
-$from_email = 'micahjd@users.sourceforge.net';
-
-# Mail all reports to this address.
-$dest_email = 'cia@cia.navi.cx';
-
-# If using XML-RPC, connect to this URI.
-$rpc_uri = 'http://cia.navi.cx/RPC2';
-
-# Path to your USCD sendmail compatible binary (your mailer daemon created this
-# program somewhere).
-$sendmail = '/usr/sbin/sendmail';
-
-# Number of seconds to wait for possible concurrent instances. CVS calls up
-# this script for each involved directory separately and this is the sync
-# delay. 5s looks as a safe value, but feel free to increase if you are running
-# this on a slower (or overloaded) machine or if you have really a lot of
-# directories.
-$sync_delay = 15;
-
-# This script can communicate with CIA either by mail or by an XML-RPC
-# interface. The XML-RPC interface is faster and more efficient, however you
-# need to have RPC::XML perl module installed, and some large CVS hosting sites
-# (like Savannah or Sourceforge) might not allow outgoing HTTP connections
-# while they allow outgoing mail. Also, this script will hang and eventually
-# not deliver the event at all if CIA server happens to be down, which is
-# unfortunately not an uncommon condition.
-$xml_rpc = 0;
-
-# You can make this bot to totally ignore events concerning the objects
-# specified below. Each object is composed of <module>/<path>/<filename>,
-# therefore file Manifest in root directory of module gentoo will be called
-# "gentoo/Manifest", while file src/bfu/inphist.c of module elinks will be
-# called "elinks/src/bfu/inphist.c". Easy, isn't it?
-#
-# This variable should contain regexp, against which will each object be
-# checked, and if the regexp is matched, the file is ignored. Therefore ie. to
-# ignore all changes in the two files above and everything concerning module
-# 'admin', use:
-#
-# $ignore_regexp = "^(gentoo/Manifest|elinks/src/bfu/inphist.c|admin/)";
-$ignore_regexp = "";
-
-# It can be useful to also grab the generated XML message by some other
-# programs and ie. autogenerate some content based on it. Here you can specify
-# a file to which it will be appended.
-$alt_local_message_target = "";
-
-
-
-
-### The code itself
-
-use vars qw ($user $module $tag @files $logmsg $message);
-
-my @dir; # This array stores all the affected directories
-my @dirfiles; # This array is mapped to the @dir array and contains files
- # affected in each directory
-
-
-# A nice nonprinting character we can use as a separator relatively safely.
-# The commas in loginfo above give us 4 commas and a space between file
-# names given to us on the command line. This is the separator used internally.
-# Now we can handle filenames containing spaces, and probably anything except
-# strings of 4 commas or the ASCII bell character.
-#
-# This was inspired by the suggestion in:
-# http://mail.gnu.org/archive/html/info-cvs/2003-04/msg00267.html
-#
-$" = "\7";
-
-### Input data loading
-
-
-# These arguments are from %s; first the relative path in the repository
-# and then the list of files modified.
-
-@files = split (' ,,,', ($ARGV[0] or ''));
-$dir[0] = shift @files or die "$0: no directory specified\n";
-$dirfiles[0] = "@files" or die "$0: no files specified\n";
-
-
-# Guess module name.
-
-$module = $dir[0]; $module =~ s#/.*##;
-
-
-# Figure out who is doing the update.
-
-$user = $ARGV[1];
-
-
-# Use the optional parameters, if supplied.
-
-$project = $ARGV[2] if $ARGV[2];
-$from_email = $ARGV[3] if $ARGV[3];
-$dest_email = $ARGV[4] if $ARGV[4];
-$ignore_regexp = $ARGV[5] if $ARGV[5];
-
-
-# Parse stdin (what's interesting is the tag and log message)
-
-while (<STDIN>) {
- $tag = $1 if /^\s*Tag: ([a-zA-Z0-9_-]+)/;
- last if /^Log Message/;
-}
-
-while (<STDIN>) {
- next unless ($_ and $_ ne "\n" and $_ ne "\r\n");
- s/&/&/g;
- s/</</g;
- s/>/>/g;
- $logmsg .= $_;
-}
-
-
-
-### Remove to-be-ignored files
-
-$dirfiles[0] = join (' ',
- grep {
- my $f = "$module/$dir[0]/$_";
- $f !~ m/$ignore_regexp/;
- } split (/\s+/, $dirfiles[0])
-) if ($ignore_regexp);
-exit unless $dirfiles[0];
-
-
-
-### Sync between the multiple instances potentially being ran simultanously
-
-my $sum; # _VERY_ simple hash of the log message. It is really weak, but I'm
- # lazy and it's really sorta exceptional to even get more commits
- # running simultanously anyway.
-map { $sum += ord $_ } split(//, $logmsg);
-
-my $syncfile; # Name of the file used for syncing
-$syncfile = "/tmp/cvscia.$project.$module.$sum";
-
-
-if (-f $syncfile and -w $syncfile) {
- # The synchronization file for this file already exists, so we are not the
- # first ones. So let's just dump what we know and exit.
-
- open(FF, ">>$syncfile") or die "aieee... can't log, can't log! $syncfile blocked!";
- print FF "$dirfiles[0]!@!$dir[0]\n";
- close(FF);
- exit;
-
-} else {
- # We are the first one! Thus, we'll fork, exit the original instance, and
- # wait a bit with the new one. Then we'll grab what the others collected and
- # go on.
-
- # We don't need to care about permissions since all the instances of the one
- # commit will obviously live as the same user.
-
- # system("touch") in a different way
- open(FF, ">>$syncfile") or die "aieee... can't log, can't log! $syncfile blocked!";
- close(FF);
-
- exit if (fork);
- sleep($sync_delay);
-
- open(FF, $syncfile);
- my ($dirnum) = 1; # 0 is the one we got triggerred for
- while (<FF>) {
- chomp;
- ($dirfiles[$dirnum], $dir[$dirnum]) = split(/!@!/);
- $dirnum++;
- }
- close(FF);
-
- unlink($syncfile);
-}
-
-
-
-### Compose the mail message
-
-
-my ($VERSION) = '2.1';
-my ($URL) = 'http://cia.navi.cx/clients/cvs/ciabot_cvs.pl';
-my $ts = time;
-
-$message = <<EM
-<message>
- <generator>
- <name>CIA Perl client for CVS</name>
- <version>$VERSION</version>
- <url>$URL</url>
- </generator>
- <source>
- <project>$project</project>
- <module>$module</module>
-EM
-;
-$message .= " <branch>$tag</branch>" if ($tag);
-$message .= <<EM
- </source>
- <timestamp>
- $ts
- </timestamp>
- <body>
- <commit>
- <author>$user</author>
- <files>
-EM
-;
-
-for (my $dirnum = 0; $dirnum < @dir; $dirnum++) {
- map {
- $_ = $dir[$dirnum] . '/' . $_;
- s#^.*?/##; # weed out the module name
- s/&/&/g;
- s/</</g;
- s/>/>/g;
- $message .= " <file>$_</file>\n";
- } split($", $dirfiles[$dirnum]);
-}
-
-$message .= <<EM
- </files>
- <log>
-$logmsg
- </log>
- </commit>
- </body>
-</message>
-EM
-;
-
-
-
-### Write the message to an alt-target
-
-if ($alt_local_message_target and open (ALT, ">>$alt_local_message_target")) {
- print ALT $message;
- close ALT;
-}
-
-
-
-### Send out the XML-RPC message
-
-
-if ($xml_rpc) {
- # We gotta be careful from now on. We silence all the warnings because
- # RPC::XML code is crappy and works with undefs etc.
- $^W = 0;
- $RPC::XML::ERROR if (0); # silence perl's compile-time warning
-
- require RPC::XML;
- require RPC::XML::Client;
-
- my $rpc_client = new RPC::XML::Client $rpc_uri;
- my $rpc_request = RPC::XML::request->new('hub.deliver', $message);
- my $rpc_response = $rpc_client->send_request($rpc_request);
-
- unless (ref $rpc_response) {
- die "XML-RPC Error: $RPC::XML::ERROR\n";
- }
- exit;
-}
-
-
-
-### Send out the mail
-
-
-# Open our mail program
-
-open (MAIL, "| $sendmail -t -oi -oem") or die "Cannot execute $sendmail : " . ($?>>8);
-
-
-# The mail header
-
-print MAIL <<EOM;
-From: $from_email
-To: $dest_email
-Content-type: text/xml
-Subject: DeliverXML
-
-EOM
-
-print MAIL $message;
-
-
-# Close the mail
-
-close MAIL;
-die "$0: sendmail exit status " . ($? >> 8) . "\n" unless ($? == 0);
-
-# vi: set sw=2:
+++ /dev/null
-# The "commitinfo" file is used to control pre-commit checks.
-# The filter on the right is invoked with the repository and a list
-# of files to check. A non-zero exit of the filter program will
-# cause the commit to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT. For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
+++ /dev/null
-# Set this to "no" if pserver shouldn't check system users/passwords
-#SystemAuth=no
-
-# Set `PreservePermissions' to `yes' to save file status information
-# in the repository.
-#PreservePermissions=no
-
-# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
-# level of the new working directory when using the `cvs checkout'
-# command.
-#TopLevelAdmin=no
+++ /dev/null
-# This file affects handling of files based on their names.
-#
-# The -t/-f options allow one to treat directories of files
-# as a single file, or to transform a file in other ways on
-# its way in and out of CVS.
-#
-# The -m option specifies whether CVS attempts to merge files.
-#
-# The -k option specifies keyword expansion (e.g. -kb for binary).
-#
-# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
-#
-# wildcard [option value][option value]...
-#
-# where option is one of
-# -f from cvs filter value: path to filter
-# -t to cvs filter value: path to filter
-# -m update methodology value: MERGE or COPY
-# -k expansion mode value: b, o, kkv, &c
-#
-# and value is a single-quote delimited value.
-# For example:
-#*.gif -k 'b'
+++ /dev/null
-# The "editinfo" file is used to allow verification of logging
-# information. It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure. Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-# Making sure that the entered bug-id number is correct.
-# Validating that the code that was reviewed is indeed the code being
-# checked in (using the bug-id number or a seperate review
-# number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported. There can be only one entry that matches a given
-# repository.
+++ /dev/null
-# The "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 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.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name ALL appears as a regular expression it is always used
-# in addition to the first matching regex or DEFAULT.
-#
-# You may specify a format string as part of the
-# filter. The string is composed of a `%' followed
-# by a single format character, or followed by a set of format
-# characters surrounded by `{' and `}' as separators. The format
-# characters are:
-#
-# s = file name
-# V = old version number (pre-checkin)
-# v = new version number (post-checkin)
-#
-# For example:
-#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
-# or
-#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog
-DEFAULT $CVSROOT/CVSROOT/syncmail -u %{sVv} blootbot-cvs@lists.sourceforge.net
-ALL $CVSROOT/CVSROOT/ciabot_cvs.pl %{,,,s} $USER
+++ /dev/null
-# Three different line formats are valid:
-# key -a aliases...
-# key [options] directory
-# key [options] directory files...
-#
-# Where "options" are composed of:
-# -i prog Run "prog" on "cvs commit" from top-level of module.
-# -o prog Run "prog" on "cvs checkout" of module.
-# -e prog Run "prog" on "cvs export" of module.
-# -t prog Run "prog" on "cvs rtag" of module.
-# -u prog Run "prog" on "cvs update" of module.
-# -d dir Place module in directory "dir" instead of module name.
-# -l Top-level directory only -- do not recurse.
-#
-# NOTE: If you change any of the "Run" options above, you'll have to
-# release and re-checkout any working directories of these modules.
-#
-# And "directory" is a path to a directory relative to $CVSROOT.
-#
-# The "-a" option specifies an alias. An alias is interpreted as if
-# everything on the right of the "-a" had been typed on the command line.
-#
-# You can encode a module within a module by using the special '&'
-# character to interpose another module into the current module. This
-# can be useful for creating a module that consists of many directories
-# spread out over the entire source repository.
+++ /dev/null
-# The "notify" file controls where notifications from watches set by
-# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
-# a regular expression which is tested against the directory that the
-# change is being made to, relative to the $CVSROOT. If it matches,
-# then the remainder of the line is a filter program that should contain
-# one occurrence of %s for the user to notify, and information on its
-# standard input.
-#
-# "ALL" or "DEFAULT" can be used in place of the regular expression.
-#
-# For example:
-#ALL mail %s -s "CVS notification"
+++ /dev/null
-# The "rcsinfo" file is used to control templates with which the editor
-# is invoked on commit and import.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being made to, relative to the
-# $CVSROOT. For the first match that is found, then the remainder of the
-# line is the name of the file that contains the template.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
+++ /dev/null
-#! /usr/bin/python
-# -*- Python -*-
-
-"""Complicated notification for CVS checkins.
-
-This script is used to provide email notifications of changes to the CVS
-repository. These email changes will include context diffs of the changes.
-Really big diffs will be trimmed.
-
-This script is run from a CVS loginfo file (see $CVSROOT/CVSROOT/loginfo). To
-set this up, create a loginfo entry that looks something like this:
-
- mymodule /path/to/this/script %%s some-email-addr@your.domain
-
-In this example, whenever a checkin that matches `mymodule' is made, this
-script is invoked, which will generate the diff containing email, and send it
-to some-email-addr@your.domain.
-
- Note: This module used to also do repository synchronizations via
- rsync-over-ssh, but since the repository has been moved to SourceForge,
- this is no longer necessary. The syncing functionality has been ripped
- out in the 3.0, which simplifies it considerably. Access the 2.x versions
- to refer to this functionality. Because of this, the script is misnamed.
-
-It no longer makes sense to run this script from the command line. Doing so
-will only print out this usage information.
-
-Usage:
-
- %(PROGRAM)s [options] <%%S> email-addr [email-addr ...]
-
-Where options is:
-
- --cvsroot=<path>
- Use <path> as the environment variable CVSROOT. Otherwise this
- variable must exist in the environment.
-
- --help
- -h
- Print this text.
-
- --context=#
- -C #
- Include # lines of context around lines that differ (default: 2).
-
- -c
- Produce a context diff (default).
-
- -u
- Produce a unified diff (smaller, but harder to read).
-
- <%%S>
- CVS %%s loginfo expansion. When invoked by CVS, this will be a single
- string containing the directory the checkin is being made in, relative
- to $CVSROOT, followed by the list of files that are changing. If the
- %%s in the loginfo file is %%{sVv}, context diffs for each of the
- modified files are included in any email messages that are generated.
-
- email-addrs
- At least one email address.
-
-"""
-
-import os
-import sys
-import string
-import time
-import getopt
-
-# Notification command
-MAILCMD = '/bin/mail -s "CVS: %(SUBJECT)s" %(PEOPLE)s 2>&1 > /dev/null'
-
-# Diff trimming stuff
-DIFF_HEAD_LINES = 20
-DIFF_TAIL_LINES = 20
-DIFF_TRUNCATE_IF_LARGER = 1000
-
-PROGRAM = sys.argv[0]
-
-
-\f
-def usage(code, msg=''):
- print __doc__ % globals()
- if msg:
- print msg
- sys.exit(code)
-
-
-\f
-def calculate_diff(filespec, contextlines):
- try:
- file, oldrev, newrev = string.split(filespec, ',')
- except ValueError:
- # No diff to report
- return '***** Bogus filespec: %s' % filespec
- if oldrev == 'NONE':
- try:
- if os.path.exists(file):
- fp = open(file)
- else:
- update_cmd = 'cvs -fn update -r %s -p %s' % (newrev, file)
- fp = os.popen(update_cmd)
- lines = fp.readlines()
- fp.close()
- lines.insert(0, '--- NEW FILE: %s ---\n' % file)
- except IOError, e:
- lines = ['***** Error reading new file: ',
- str(e), '\n***** file: ', file, ' cwd: ', os.getcwd()]
- elif newrev == 'NONE':
- lines = ['--- %s DELETED ---\n' % file]
- else:
- # This /has/ to happen in the background, otherwise we'll run into CVS
- # lock contention. What a crock.
- if contextlines > 0:
- difftype = "-C " + str(contextlines)
- else:
- difftype = "-u"
- diffcmd = '/usr/bin/cvs -f diff -kk %s -r %s -r %s %s' % (
- difftype, oldrev, newrev, file)
- fp = os.popen(diffcmd)
- lines = fp.readlines()
- sts = fp.close()
- # ignore the error code, it always seems to be 1 :(
-## if sts:
-## return 'Error code %d occurred during diff\n' % (sts >> 8)
- if len(lines) > DIFF_TRUNCATE_IF_LARGER:
- removedlines = len(lines) - DIFF_HEAD_LINES - DIFF_TAIL_LINES
- del lines[DIFF_HEAD_LINES:-DIFF_TAIL_LINES]
- lines.insert(DIFF_HEAD_LINES,
- '[...%d lines suppressed...]\n' % removedlines)
- return string.join(lines, '')
-
-
-\f
-def blast_mail(mailcmd, filestodiff, contextlines):
- # cannot wait for child process or that will cause parent to retain cvs
- # lock for too long. Urg!
- if not os.fork():
- # in the child
- # give up the lock you cvs thang!
- time.sleep(2)
- fp = os.popen(mailcmd, 'w')
- fp.write(sys.stdin.read())
- fp.write('\n')
- # append the diffs if available
- for file in filestodiff:
- fp.write(calculate_diff(file, contextlines))
- fp.write('\n')
- fp.close()
- # doesn't matter what code we return, it isn't waited on
- os._exit(0)
-
-
-\f
-# scan args for options
-def main():
- contextlines = 2
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'hC:cu',
- ['context=', 'cvsroot=', 'help'])
- except getopt.error, msg:
- usage(1, msg)
-
- # parse the options
- for opt, arg in opts:
- if opt in ('-h', '--help'):
- usage(0)
- elif opt == '--cvsroot':
- os.environ['CVSROOT'] = arg
- elif opt in ('-C', '--context'):
- contextlines = int(arg)
- elif opt == '-c':
- if contextlines <= 0:
- contextlines = 2
- elif opt == '-u':
- contextlines = 0
-
- # What follows is the specification containing the files that were
- # modified. The argument actually must be split, with the first component
- # containing the directory the checkin is being made in, relative to
- # $CVSROOT, followed by the list of files that are changing.
- if not args:
- usage(1, 'No CVS module specified')
- SUBJECT = args[0]
- specs = string.split(args[0])
- del args[0]
-
- # The remaining args should be the email addresses
- if not args:
- usage(1, 'No recipients specified')
-
- # Now do the mail command
- PEOPLE = string.join(args)
- mailcmd = MAILCMD % vars()
-
- print 'Mailing %s...' % PEOPLE
- if specs == ['-', 'Imported', 'sources']:
- return
- if specs[-3:] == ['-', 'New', 'directory']:
- del specs[-3:]
- print 'Generating notification message...'
- blast_mail(mailcmd, specs[1:], contextlines)
- print 'Generating notification message... done.'
-
-
-\f
-if __name__ == '__main__':
- main()
- sys.exit(0)
+++ /dev/null
-# The "taginfo" file is used to control pre-tag checks.
-# The filter on the right is invoked with the following arguments:
-#
-# $1 -- tagname
-# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
-# $3 -- repository
-# $4-> file revision [file revision ...]
-#
-# A non-zero exit of the filter program will cause the tag to be aborted.
-#
-# The first entry on a line is a regular expression which is tested
-# against the directory that the change is being committed to, relative
-# to the $CVSROOT. For the first match that is found, then the remainder
-# of the line is the name of the filter to run.
-#
-# If the repository name does not match any of the regular expressions in this
-# file, the "DEFAULT" line is used, if it is specified.
-#
-# If the name "ALL" appears as a regular expression it is always used
-# in addition to the first matching regex or "DEFAULT".
+++ /dev/null
-# The "verifymsg" file is used to allow verification of logging
-# information. It works best when a template (as specified in the
-# rcsinfo file) is provided for the logging procedure. Given a
-# template with locations for, a bug-id number, a list of people who
-# reviewed the code before it can be checked in, and an external
-# process to catalog the differences that were code reviewed, the
-# following test can be applied to the code:
-#
-# Making sure that the entered bug-id number is correct.
-# Validating that the code that was reviewed is indeed the code being
-# checked in (using the bug-id number or a seperate review
-# number to identify this particular code set.).
-#
-# If any of the above test failed, then the commit would be aborted.
-#
-# Actions such as mailing a copy of the report to each reviewer are
-# better handled by an entry in the loginfo file.
-#
-# One thing that should be noted is the the ALL keyword is not
-# supported. There can be only one entry that matches a given
-# repository.