285 lines
8.8 KiB
Perl
285 lines
8.8 KiB
Perl
|
# $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.
|
||
|
$PROG_CVS = '/usr/bin/cvs'; # cvs(1)
|
||
|
$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
|