1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
# $FreeBSD$
####################################################################
####################################################################
# 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 $CHECK_HEADERS $DEBUG $FILE_PREFIX $IDHEADER
$LAST_FILE $MAILADDRS $MAILBANNER $MAILCMD $MAIL_BRANCH_HDR
$MAIL_ON_DIR_CREATION $MAIL_TRANSFORM $PID $TMPDIR $UNEXPAND_RCSID
%TEMPLATE_HEADERS @COMMIT_HOSTS
);
######################
### 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";
###################
### 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 = ();
################
### 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.
%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 CVSROOT/exclude file.
# Currently $IDHEADER must be an instance of '$ CVSHeader $', or an alias
# defined in CVSROOT/options.
$CHECK_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;
####################
### 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 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
foreach (@input) {
# Skip any trailing blank lines.
unless ($_) {
push @output, $_;
next;
}
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, $_;
push @output, "$baseurl$extra";
}
return @output;
};
######################################################################
# Load the local configuration file, that allows the entries in this
# file to be overridden.
######################################################################
eval { require "$ENV{CVSROOT}/CVSROOT/cfg_local.pm" }
if -e "$ENV{CVSROOT}/CVSROOT/cfg_local.pm";
warn $@ if $@;
1; # Perl requires all modules to return true. Don't delete!!!!
#end
|