summaryrefslogtreecommitdiff
path: root/contrib/commit_prep.in
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/commit_prep.in')
-rwxr-xr-xcontrib/commit_prep.in86
1 files changed, 86 insertions, 0 deletions
diff --git a/contrib/commit_prep.in b/contrib/commit_prep.in
new file mode 100755
index 0000000..c795533
--- /dev/null
+++ b/contrib/commit_prep.in
@@ -0,0 +1,86 @@
+#! @PERL@ -T
+# -*-Perl-*-
+
+# Copyright (C) 1994-2005 The Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+###############################################################################
+###############################################################################
+###############################################################################
+#
+# THIS SCRIPT IS PROBABLY BROKEN. REMOVING THE -T SWITCH ON THE #! LINE ABOVE
+# WOULD FIX IT, BUT THIS IS INSECURE. WE RECOMMEND FIXING THE ERRORS WHICH THE
+# -T SWITCH WILL CAUSE PERL TO REPORT BEFORE RUNNING THIS SCRIPT FROM A CVS
+# SERVER TRIGGER. PLEASE SEND PATCHES CONTAINING THE CHANGES YOU FIND
+# NECESSARY TO RUN THIS SCRIPT WITH THE TAINT-CHECKING ENABLED BACK TO THE
+# <@PACKAGE_BUGREPORT@> MAILING LIST.
+#
+# For more on general Perl security and taint-checking, please try running the
+# `perldoc perlsec' command.
+#
+###############################################################################
+###############################################################################
+###############################################################################
+
+# Perl filter to handle pre-commit checking of files. This program
+# records the last directory where commits will be taking place for
+# use by the log_accum.pl script.
+#
+# IMPORTANT: this script interacts with log_accum, they have to agree
+# on the tmpfile name to use. See $LAST_FILE below.
+#
+# Contributed by David Hampton <hampton@cisco.com>
+# Stripped to minimum by Roy Fielding
+#
+############################################################
+$TMPDIR = $ENV{'TMPDIR'} || '/tmp';
+$FILE_PREFIX = '#cvs.';
+
+# If see a "-u $USER" argument, then destructively remove it from the
+# argument list, so $ARGV[0] will be the repository dir again, as it
+# used to be before we added the -u flag.
+if ($ARGV[0] eq '-u') {
+ shift @ARGV;
+ $CVS_USERNAME = shift (@ARGV);
+}
+
+# This needs to match the corresponding var in log_accum.pl, including
+# the appending of the pgrp and username suffixes (see uses of this
+# var farther down).
+$LAST_FILE = "$TMPDIR/${FILE_PREFIX}lastdir";
+
+sub write_line {
+ my ($filename, $line) = @_;
+
+# A check of some kind is needed here, but the rules aren't apparent
+# at the moment:
+
+# foreach($filename, $line){
+# $_ =~ m#^([-\@\w.\#]+)$#;
+# $_ = $1;
+# }
+
+ open(FILE, ">$filename") || die("Cannot open $filename: $!\n");
+ print(FILE $line, "\n");
+ close(FILE);
+}
+
+#
+# Record this directory as the last one checked. This will be used
+# by the log_accumulate script to determine when it is processing
+# the final directory of a multi-directory commit.
+#
+$id = getpgrp();
+
+&write_line("$LAST_FILE.$id.$CVS_USERNAME", $ARGV[0]);
+
+exit(0);