#! /usr/bin/perl -w # # $FreeBSD$ # # This hack is to sanitise the results of what the user may have # "done" while editing the commit log message.. :-) Peter Wemm. # # Note: this uses an enhancement to cvs's verifymsg functionality. # Normally, the check is advisory only, the FreeBSD version reads # back the file after the verifymsg file so that this script can # can make changes. # if (!@ARGV) { die "Usage: logcheck filename\n"; } $filename = $ARGV[0]; $tmpfile = $filename . "tmp"; open(IN, "< $filename") || die "logcheck: Cannot open for reading: $filename: $!\n"; open(OUT, "> $tmpfile") || die "logcheck: Cannot open for writing: $tmpfile: $!\n"; # In-place edit the result of the user's edit on the file. $blank = 0; # true if the last line was blank $first = 0; # true if we have seen the first real text while() { # Dont let CVS: lines upset things, strip them out. if (/^CVS:/) { next; } chop; # strip trailing newline s/[\s]+$//; # strip trailing whitespace # collapse multiple blank lines, and trailing blank lines. if (/^$/) { # Blank line. Remember in case more text follows. $blank = 1; next; } else { # Delete if they only have whitespace after them. if (/^Reviewed by:$/i || /^Submitted by:$/i || /^Obtained from:$/i || /^Approved by:$/i || /^PR:$/i) { next; } if ($blank && $first) { # Previous line(s) was blank, this isn't. Close the # collapsed section. print OUT "\n"; } $blank = 0; # record non-blank $first = 1; # record first line print OUT "$_\n"; } } close(IN); close(OUT); unlink($filename . "~"); # Nuke likely editor backups.. unlink($filename . ".bak"); # Nuke likely editor backups.. rename("$tmpfile", "$filename") || die("logcheck: Could not rename $tmpfile to $filename: $!"); exit(0);