tivomirror/CVSROOT/cfg.pm

285 lines
8.8 KiB
Perl
Raw Permalink Normal View History

2006-01-20 12:16:39 +00:00
# $Id$
# $FreeBSD: cfg.pm,v 1.50 2003/02/28 18:28:11 peter Exp $
####################################################################
####################################################################
# This file contains the default configuration for the CVSROOT
# perl scripts. You are advised to override the configuration
# in the cfg_local.pm file instead of here.
#
# WARNING: You are strongly advised to check for syntax errors
# in this file before committing it. Use: perl -cw cfg.pm
####################################################################
####################################################################
package cfg;
use strict;
use vars qw(
$ADD_TO_LINE $AVAIL_FILE $CHECK_HEADERS $COMMITCHECK_EXTRA
@COMMIT_HOSTS $COMMITTER $DEBUG $DIFF_BLOCK_TOTAL_LINES $EXCLUDE_FILE
$FILE_PREFIX $IDHEADER $LAST_FILE @LOG_FILE_MAP $MAILADDRS $MAILBANNER
$MAILCMD $MAIL_BRANCH_HDR $MAIL_ON_DIR_CREATION $MAIL_TRANSFORM
$MINCVSVERSION $MAX_DIFF_SIZE $NO_DOS_LINEBREAKS $PID $PROG_CVS
$PROG_MV %TEMPLATE_HEADERS $TMPDIR $UNEXPAND_RCSID $WARN_HEADERS
);
my $CVSROOT = $ENV{'CVSROOT'} || die "Can't determine \$CVSROOT!";
######################
### global options ###
######################
### WARNING: these aren't global across all the scripts yet.
### This is work in progress.
# Process group id; used as a unique number in temporary file names.
$PID = getpgrp();
# Debug level, 0 = off, 1 = on.
$DEBUG = 0;
# Location of temporary directory.
$TMPDIR = "/tmp/";
# The filename prefix used for temporary files.
$FILE_PREFIX = "#cvs.files.$PID";
# The file used to store the name of the last directory examined
# when processing a multi-directory commit.
$LAST_FILE = "$TMPDIR/$FILE_PREFIX.lastdir";
# System tools.
2017-01-22 22:19:18 +00:00
$PROG_CVS = '/usr/local/bin/cvs'; # cvs(1)
2006-01-20 12:16:39 +00:00
$PROG_MV = '/bin/mv'; # mv(1)
# The username of the committer.
$COMMITTER = $ENV{"LOGNAME"} || $ENV{'USER'} || getlogin
|| (getpwuid($<))[0] || sprintf("uid#%d",$<);
###################
### commitcheck ###
###################
# A list of hosts the it's ok to commit on. Useful if your committers
# take local copies of the repository to work off-line.
# (Empty if you don't want checks.)
@COMMIT_HOSTS = ();
# The minimum version of cvs that we will work with.
$MINCVSVERSION = "1090900"; # 1.9.9p0
# Additional commit time checks. This is an anonymous subroutine
# that gets called early on in the validation process to see whether
# the committer is allowed to commit. It should return true if
# everything is ok, otherwise the commit will be terminated.
$COMMITCHECK_EXTRA = "";
###################
### cvs_acls.pl ###
###################
# The name of the avail file that defines who's allow to
# commit to what.
$AVAIL_FILE = "$CVSROOT/CVSROOT/avail";
################
### logcheck ###
################
# These are the optional headers that can be filled at the end of
# each commit message. The associated value is a regular-expression
# that is used to type-check the entered value. If a match fails
# then the commit is rejected. (See rcstemplate).
#
# Make sure that these are also described in the rcstemplate to
# make their usage clear to committers.
#
# In addition any of these entries that are left blank are removed
# from the log at commit time. [Please note that for them to be
# removed from the rcslog in the repository you need to be running
# the version of cvs in the FreeBSD source tree. We've got a local
# patch that causes cvs to read back the commit message after the
# commit_prep.pl script has had a chance to modify it (via the
# 'commitinfo' hook). ]
%TEMPLATE_HEADERS = (
# "Reviewed by" => '.*',
# "Submitted by" => '.*',
# "Obtained from" => '.*',
# "Approved by" => '.*',
# "PR" => '.*',
# "MFC after" => '\d+(\s+(days?|weeks?|months?))?'
);
######################
### commit_prep.pl ###
######################
# Check for instances of $IDHEADER in committed files, and
# bomb out if they're not present, or corrupted.
# Exclusions can be specified in the exclude file.
# Currently $IDHEADER must be an instance of '$ CVSHeader $', or an alias
# defined in CVSROOT/options.
$CHECK_HEADERS = 0;
$EXCLUDE_FILE = "$CVSROOT/CVSROOT/exclude";
# Make a header check a non-fatal error - just warn, don't exit.
$WARN_HEADERS = 0;
# WARNING: You will also need to be running the version of cvs that
# the FreeBSD project is using; I believe that we have some local patches
# that aren't in the main 'cvs' source.
# Additionally you'll need to tweak CVSROOT/options if you wish to use your
# own ident header.
$IDHEADER = 'CVSHeader';
# Contract any instances of $IDHEADER in the source file before committing.
# This is useful because it means that expanded headers aren't stored in
# the repository as part of the delta.
$UNEXPAND_RCSID = 0;
# Check for DOS/WINDOWS/MAC linebreaks in the file, bomb out if present.
# Exclusions can be specified in the exclude file.
$NO_DOS_LINEBREAKS = 0;
####################
### log_accum.pl ###
####################
# The command used to mail the log messages.
# Usually something like '/usr/sbin/sendmail'.
$MAILCMD = "/usr/sbin/sendmail";
# Email addresses of recipients of commit mail.
$MAILADDRS = 'nobody';
# Extra banner added to the top of commit email.
# Use "" if you don't want one.
# i.e. $MAILBANNER = "Project X CVS Repository";
$MAILBANNER = "";
# Send mail when directories are created in the repository.
# 0 = off, 1 = on.
$MAIL_ON_DIR_CREATION = 0;
# Include the names of the branches committed to in the commit email,
# using this header (leave off the trailing ':').
# Use "" if you don't want one.
$MAIL_BRANCH_HDR = "X-CVS-Branch";
# Include a 'To:' header in the generated commit mail?
$ADD_TO_LINE = 1;
# This is a way to post-process the log email before it is mailed.
# Some people find it useful to use this to create URLs in their
# commit mails to show the patch in a web page (using cvsweb) for
# instance.
#
# The $MAIL_TRANSFORM variable should be "" if you don't want to
# use this feature. Otherwise it should be a reference to a
# subroutine that is passed the email message as a list, and returns
# the modified list to the log_accum.pl script. The list has one
# element per email line, with no trailing line feeds. This function
# shouldn't add them. If $DEBUG is switched on the log_accum.pl
# script will show the before and after on stdout at commit time.
#
# The example below shows a way of inserting links to cvsweb.
$MAIL_TRANSFORM = "";
#$MAIL_TRANSFORM = sub {
# add_cvsweb_entry("http://www.example.org/cgi-bin/cvsweb.cgi", @_);
#};
# A copy of the commit summary is saved locally as well as being
# emailed to the committers. The name of the local log is obtained
# by performing a pattern match on the directory that the files are
# in. The following map defines the file names and their associated
# pattern match. They are checked in order. The name 'other' is
# used if none of the patterns match.
#
# XXX The directory that the logs are placed in should be a
# configuration option too.
@LOG_FILE_MAP = (
'CVSROOT' => '^CVSROOT/',
'doc' => '^doc/',
'user' => '^src/',
'other' => '.*'
);
# Include diffs of not greater than this size in kbytes in the
# commit mail for each file modified. (0 = off).
$MAX_DIFF_SIZE = 0;
# Maximum size of in lines of the diff block.
$DIFF_BLOCK_TOTAL_LINES = 200;
######################
# EXAMPLES
######################
# A function for post-processing a log message
# and outputing it with URLs to a cvsweb.cgi in.
sub add_cvsweb_entry {
my $url_to_cvsweb = shift;
my @input = @_;
my @output = ();
# Skip down to the revision summary.
while (1) {
my $line = shift @input;
last unless defined($line);
push @output, $line;
last if $line =~ /^\s*Revision\s*Changes\s*Path\s*$/;
}
# Add the url links
my $skip = 0;
foreach (@input) {
# The revision block is terminated with an empty line.
$skip = 1 if $_ =~ /^\s*$/;
push @output, $_;
next if $skip;
my ($rev, $add, $sub, $file, $status) = split;
$rev =~ /(?:(.*)\.)?([^\.]+)\.([^\.]+)$/;
my ($base, $r1, $r2) = ($1, $2, $3);
my $prevrev = "";
if ($r2 == 1) {
$prevrev = $base;
} else {
$prevrev = "$base." if $base;
$prevrev .= "$r1." . ($r2 - 1);
}
my $baseurl = "$url_to_cvsweb/$file";
my $extra;
if (defined($status)) {
$rev = $prevrev if $status =~ /dead/;
$extra = "?rev=$rev&content-type=text/plain";
} else {
$extra = ".diff?r1=$prevrev&r2=$rev&f=h";
}
push @output, "$baseurl$extra";
}
return @output;
};
######################################################################
# Load the local configuration file, that allows the entries in this
# file to be overridden.
######################################################################
eval { require "$CVSROOT/CVSROOT/cfg_local.pm" }
if -e "$CVSROOT/CVSROOT/cfg_local.pm";
warn $@ if $@;
1; # Perl requires all modules to return true. Don't delete!!!!
#end