diff --git a/CVSROOT/checkoutlist b/CVSROOT/checkoutlist deleted file mode 100644 index 4c45a691d0..0000000000 --- a/CVSROOT/checkoutlist +++ /dev/null @@ -1,14 +0,0 @@ -# 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: -# -# [] -# -# comment lines begin with '#' -syncmail diff --git a/CVSROOT/commitinfo b/CVSROOT/commitinfo deleted file mode 100644 index b19e7b7a63..0000000000 --- a/CVSROOT/commitinfo +++ /dev/null @@ -1,15 +0,0 @@ -# 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". diff --git a/CVSROOT/config b/CVSROOT/config deleted file mode 100644 index ff43ec005a..0000000000 --- a/CVSROOT/config +++ /dev/null @@ -1,14 +0,0 @@ -# Set this to "no" if pserver shouldn't check system users/passwords -#SystemAuth=no - -# Put CVS lock files in this directory rather than directly in the repository. -#LockDir=/var/lock/cvs - -# 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 - -# Set `LogHistory' to `all' or `TOFEWGCMAR' to log all transactions to the -# history file, or a subset as needed (ie `TMAR' logs all write operations) -#LogHistory=TOFEWGCMAR diff --git a/CVSROOT/cvswrappers b/CVSROOT/cvswrappers deleted file mode 100644 index 050bf44f30..0000000000 --- a/CVSROOT/cvswrappers +++ /dev/null @@ -1,78 +0,0 @@ -# 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' -*.JPG -k 'b' -m 'COPY' -*.avi -k 'b' -m 'COPY' -*.bin -k 'b' -m 'COPY' -*.bz -k 'b' -m 'COPY' -*.bz2 -k 'b' -m 'COPY' -*.doc -k 'b' -m 'COPY' -*.exe -k 'b' -m 'COPY' -*.gif -k 'b' -m 'COPY' -*.gz -k 'b' -m 'COPY' -*.hqx -k 'b' -m 'COPY' -*.jar -k 'b' -m 'COPY' -*.jpeg -k 'b' -m 'COPY' -*.jpg -k 'b' -m 'COPY' -*.mov -k 'b' -m 'COPY' -*.mp3 -k 'b' -m 'COPY' -*.mpg -k 'b' -m 'COPY' -*.pdf -k 'b' -m 'COPY' -*.png -k 'b' -m 'COPY' -*.ppt -k 'b' -m 'COPY' -*.rpm -k 'b' -m 'COPY' -*.sit -k 'b' -m 'COPY' -*.srpm -k 'b' -m 'COPY' -*.swf -k 'b' -m 'COPY' -*.tar -k 'b' -m 'COPY' -*.tbz -k 'b' -m 'COPY' -*.tgz -k 'b' -m 'COPY' -*.tif -k 'b' -m 'COPY' -*.tiff -k 'b' -m 'COPY' -*.xbm -k 'b' -m 'COPY' -*.xls -k 'b' -m 'COPY' -*.zip -k 'b' -m 'COPY' -*.keystore -k 'b' -m 'COPY' -# File types added by Borland JBuilder -*.aiff -k 'b' -*.midi -k 'b' -*.jds -k 'b' -*.asx -k 'b' -*.wav -k 'b' -*.war -k 'b' -*.ear -k 'b' -*.obj -k 'b' -*.dcu -k 'b' -*.class -k 'b' -*.au -k 'b' -*.eargrp -k 'b' -*.jpe -k 'b' -*.o -k 'b' -*.asf -k 'b' -*.rar -k 'b' -*.library -k 'b' -*.ejbgrp -k 'b' -*.ram -k 'b' -*.ejbgrpx -k 'b' -*.mid -k 'b' -*.rmf -k 'b' diff --git a/CVSROOT/editinfo b/CVSROOT/editinfo deleted file mode 100644 index d78886c152..0000000000 --- a/CVSROOT/editinfo +++ /dev/null @@ -1,21 +0,0 @@ -# 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. diff --git a/CVSROOT/loginfo b/CVSROOT/loginfo deleted file mode 100644 index 16edbeb19a..0000000000 --- a/CVSROOT/loginfo +++ /dev/null @@ -1,28 +0,0 @@ -# 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 -CVSROOT $CVSROOT/CVSROOT/syncmail %{sVv} tomcopeland@users.sourceforge.net -DEFAULT $CVSROOT/CVSROOT/syncmail %{sVv} pmd-devel@lists.sourceforge.net diff --git a/CVSROOT/modules b/CVSROOT/modules deleted file mode 100644 index 657b5c5d80..0000000000 --- a/CVSROOT/modules +++ /dev/null @@ -1,42 +0,0 @@ -# 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. -#pmd-base -a pmd/pmd -pmd-swingui -a pmd/pmd-swingui -#pmd-web -a pmd/pmd-web -#pmd-rx -a pmd/pmd-rx -#pmd-netbeans -a pmd/pmd-netbeans -#pmd-mysql -a pmd/pmd-mysql -#pmd-jedit -a pmd/pmd-jedit -#pmd-jdeveloper -a pmd/pmd-jdeveloper -#pmd-jbuilder -a pmd/pmd-jbuilder -#pmd-gel -a pmd/pmd-gel -#pmd-emacs -a pmd/pmd-emacs -#pmd-eclipse -a pmd-eclicpse-pmd pmd/pmd-eclipse pmd-eclipse-feature -#pmd-eclipse-pmd -a pmd/pmd-eclipse-pmd -#pmd-eclipse-feature -a pmd/pmd-eclipse-feature -#pmd-dcpd -a pmd/pmd-dcpd - diff --git a/CVSROOT/notify b/CVSROOT/notify deleted file mode 100644 index 34f0bc2888..0000000000 --- a/CVSROOT/notify +++ /dev/null @@ -1,12 +0,0 @@ -# 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" diff --git a/CVSROOT/rcsinfo b/CVSROOT/rcsinfo deleted file mode 100644 index 49e59f4d0d..0000000000 --- a/CVSROOT/rcsinfo +++ /dev/null @@ -1,13 +0,0 @@ -# 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". diff --git a/CVSROOT/syncmail b/CVSROOT/syncmail deleted file mode 100755 index 3a75302e43..0000000000 --- a/CVSROOT/syncmail +++ /dev/null @@ -1,438 +0,0 @@ -#! /usr/bin/python - -# Copyright (c) 2002, 2003, Barry Warsaw, Fred Drake, and contributors -# All rights reserved. -# See the accompanying LICENSE file for details. - -# NOTE: SourceForge currently runs Python 2.2.3, so we need to remain -# compatible with the Python 2.2 line. - -"""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 are: - - --cvsroot= - Use as the environment variable CVSROOT. Otherwise this - variable must exist in the environment. - - --context=# - -C # - Include # lines of context around lines that differ (default: 2). - - -c - Produce a context diff (default). - - -m hostname - --mailhost hostname - The hostname of an available SMTP server. The default is - 'localhost'. - - -u - Produce a unified diff (smaller). - - -S TEXT - --subject-prefix=TEXT - Prepend TEXT to the email subject line. - - -R ADDR - --reply-to=ADDR - Add a "Reply-To: ADDR" header to the email message. - - --quiet / -q - Don't print as much status to stdout. - - --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. - -The rest of the command line arguments are: - - <%%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. -""" -__version__ = '1.3' - -import os -import sys -import re -import time -import getopt -import smtplib -import pwd -import socket - -from cStringIO import StringIO - -# Which SMTP server to do we connect to? -MAILHOST = 'localhost' -MAILPORT = 25 - -# Diff trimming stuff -DIFF_HEAD_LINES = 20 -DIFF_TAIL_LINES = 20 -DIFF_TRUNCATE_IF_LARGER = 1000 - -COMMASPACE = ', ' - -PROGRAM = sys.argv[0] - -BINARY_EXPLANATION_LINES = [ - "(This appears to be a binary file; contents omitted.)\n" - ] - -NOVERSION = "Couldn't generate diff; no version number found for file: %s" -BACKSLASH = "Couldn't generate diff: backslash in filespec's filename: %s" - - - -def usage(code, msg=''): - print __doc__ % globals() - if msg: - print msg - sys.exit(code) - - - -def calculate_diff(entry, contextlines): - file = entry.name - oldrev = entry.revision - newrev = entry.new_revision - - # Make sure we can find a CVS version number - if oldrev is None and newrev is None: - return NOVERSION % file - - if file.find("'") <> -1: - # Those crazy users put single-quotes in their file names! Now we - # have to escape everything that is meaningful inside double-quotes. - filestr = filestr.replace('\\', '\\\\') - filestr = filestr.replace('`', '\`') - filestr = filestr.replace('"', '\"') - filestr = filestr.replace('$', '\$') - # and quote it with double-quotes. - filestr = '"' + filestr + '"' - else: - # quote it with single-quotes. - filestr = "'" + file + "'" - if oldrev is None: - # File is being added. - try: - if os.path.exists(file): - fp = open(file) - else: - update_cmd = "cvs -fn update -r %s -p %s" % (newrev, filestr) - fp = os.popen(update_cmd) - lines = fp.readlines() - fp.close() - # Is this a binary file? Let's look at the first few - # lines to figure it out: - for line in lines[:5]: - for c in line.rstrip(): - if c.isspace(): - continue - if c < ' ' or c > chr(127): - lines = BINARY_EXPLANATION_LINES[:] - break - 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 is None: - lines = ['--- %s DELETED ---\n' % file] - else: - # File has been changed. - # 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 --minimal -r %s -r %s %s" \ - % (difftype, oldrev, newrev, filestr) - fp = os.popen(diffcmd) - lines = fp.readlines() - # ignore the error code, it always seems to be 1 :( - fp.close() - 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 ''.join(lines) - - - -rfc822_specials_re = re.compile(r'[\(\)\<\>\@\,\;\:\\\"\.\[\]]') - -def quotename(name): - if name and rfc822_specials_re.search(name): - return '"%s"' % name.replace('"', '\\"') - else: - return name - - - -def blast_mail(subject, people, entries, contextlines, fromhost, replyto): - # 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) - # Create the smtp connection to the localhost - conn = smtplib.SMTP() - conn.connect(MAILHOST, MAILPORT) - pwinfo = pwd.getpwuid(os.getuid()) - user = pwinfo[0] - name = pwinfo[4].split(',')[0] - domain = fromhost or socket.getfqdn() - address = '%s@%s' % (user, domain) - s = StringIO() - sys.stdout = s - datestamp = time.strftime('%a, %d %b %Y %H:%M:%S +0000', - time.gmtime(time.time())) - try: - vars = {'address' : address, - 'name' : quotename(name), - 'people' : COMMASPACE.join(people), - 'subject' : subject, - 'version' : __version__, - 'date' : datestamp, - } - print '''\ -From: %(name)s <%(address)s> -To: %(people)s''' % vars - if replyto: - print 'Reply-To: %s' % replyto - print '''\ -Subject: %(subject)s -Date: %(date)s -X-Mailer: Python syncmail %(version)s -''' % vars - s.write(sys.stdin.read()) - # append the diffs if available - print - for entry in entries: - print calculate_diff(entry, contextlines) - finally: - sys.stdout = sys.__stdout__ - resp = conn.sendmail(address, people, s.getvalue()) - conn.close() - os._exit(0) - - - -class CVSEntry: - def __init__(self, name, revision, timestamp, conflict, options, tagdate): - self.name = name - self.revision = revision - self.timestamp = timestamp - self.conflict = conflict - self.options = options - self.tagdate = tagdate - -def get_entry(prefix, mapping, line, filename): - line = line.strip() - parts = line.split("/") - _, name, revision, timestamp, options, tagdate = parts - key = namekey(prefix, name) - try: - entry = mapping[key] - except KeyError: - if revision == "0": - revision = None - if timestamp.find("+") != -1: - timestamp, conflict = tuple(timestamp.split("+")) - else: - conflict = None - entry = CVSEntry(key, revision, timestamp, conflict, - options, tagdate) - mapping[key] = entry - return entry - -def namekey(prefix, name): - if prefix: - return os.path.join(prefix, name) - else: - return name - -def load_change_info(prefix=None): - if prefix is not None: - entries_fn = os.path.join(prefix, "CVS", "Entries") - else: - entries_fn = os.path.join("CVS", "Entries") - entries_log_fn = entries_fn + ".Log" - mapping = {} - f = open(entries_fn) - while 1: - line = f.readline() - if not line: - break -## if line.strip() == "D": -## continue - # we could recurse down subdirs, except the Entries.Log files - # we need haven't been written to the subdirs yet, so it - # doesn't do us any good -## if line[0] == "D": -## name = line.split("/")[1] -## dirname = namekey(prefix, name) -## if os.path.isdir(dirname): -## m = load_change_info(dirname) -## mapping.update(m) - if line[0] == "/": - # normal file - get_entry(prefix, mapping, line, entries_fn) - # else: bogus Entries line - f.close() - if os.path.isfile(entries_log_fn): - f = open(entries_log_fn) - while 1: - line = f.readline() - if not line: - break - if line[1:2] != ' ': - # really old version of CVS - break - entry = get_entry(prefix, mapping, line[2:], entries_log_fn) - parts = line.split("/")[1:] - if line[0] == "A": - # adding a file - entry.new_revision = parts[1] - elif line[0] == "R": - # removing a file - entry.new_revision = None - f.close() - for entry in mapping.values(): - if not hasattr(entry, "new_revision"): - print 'confused about file', entry.name, '-- ignoring' - del mapping[entry.name] - return mapping - -def load_branch_name(): - tag_fn = os.path.join("CVS", "Tag") - if os.path.isfile(tag_fn): - f = open(tag_fn) - line = f.readline().strip() - f.close() - if line[:1] == "T": - return line[1:] - return None - -# scan args for options -def main(): - # XXX Should really move all the options to an object, just to - # avoid threading so many positional args through everything. - try: - opts, args = getopt.getopt( - sys.argv[1:], 'hC:cuS:R:qf:m:', - ['fromhost=', 'context=', 'cvsroot=', 'mailhost=', - 'subject-prefix=', 'reply-to=', - 'help', 'quiet']) - except getopt.error, msg: - usage(1, msg) - - # parse the options - contextlines = 2 - verbose = 1 - subject_prefix = "" - replyto = None - fromhost = None - 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 - elif opt in ('-S', '--subject-prefix'): - subject_prefix = arg - elif opt in ('-R', '--reply-to'): - replyto = arg - elif opt in ('-q', '--quiet'): - verbose = 0 - elif opt in ('-f', '--fromhost'): - fromhost = arg - elif opt in ('-m', '--mailhost'): - global MAILHOST - MAILHOST = arg - - # 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 = subject_prefix + args[0] - specs = args[0].split() - 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 = args - - if specs[-3:] == ['-', 'Imported', 'sources']: - print 'Not sending email for imported sources.' - return - - branch = load_branch_name() - changes = load_change_info() - - if verbose: - print 'Mailing %s...' % COMMASPACE.join(people) - print 'Generating notification message...' - blast_mail(subject, people, changes.values(), - contextlines, fromhost, replyto) - if verbose: - print 'Generating notification message... done.' - - - -if __name__ == '__main__': - main() - sys.exit(0) diff --git a/CVSROOT/taginfo b/CVSROOT/taginfo deleted file mode 100644 index 274a46dd5b..0000000000 --- a/CVSROOT/taginfo +++ /dev/null @@ -1,20 +0,0 @@ -# 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". diff --git a/CVSROOT/verifymsg b/CVSROOT/verifymsg deleted file mode 100644 index 86f747ce22..0000000000 --- a/CVSROOT/verifymsg +++ /dev/null @@ -1,21 +0,0 @@ -# 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.