/contrib/cvs/contrib/commit_prep.in
https://bitbucket.org/freebsd/freebsd-head/ · Autoconf · 86 lines · 16 code · 13 blank · 57 comment · 3 complexity · b36a525677fa9c3885e60392722c115b MD5 · raw file
- #! @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);