summaryrefslogtreecommitdiffstats
path: root/contrib/cvs/contrib/log_accum.in
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/cvs/contrib/log_accum.in')
-rwxr-xr-xcontrib/cvs/contrib/log_accum.in749
1 files changed, 0 insertions, 749 deletions
diff --git a/contrib/cvs/contrib/log_accum.in b/contrib/cvs/contrib/log_accum.in
deleted file mode 100755
index dbd18f1..0000000
--- a/contrib/cvs/contrib/log_accum.in
+++ /dev/null
@@ -1,749 +0,0 @@
-#! @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 the log messages from the checkin of files in
-# a directory. This script will group the lists of files by log
-# message, and mail a single consolidated log message at the end of
-# the commit.
-#
-# This file assumes a pre-commit checking program that leaves the
-# names of the first and last commit directories in a temporary file.
-#
-# IMPORTANT: what the above means is, this script interacts with
-# commit_prep, in that they have to agree on the tmpfile name to use.
-# See $LAST_FILE below.
-#
-# How this works: CVS triggers this script once for each directory
-# involved in the commit -- in other words, a single commit can invoke
-# this script N times. It knows when it's on the last invocation by
-# examining the contents of $LAST_FILE. Between invocations, it
-# caches information for its future incarnations in various temporary
-# files in /tmp, which are named according to the process group and
-# the committer (by themselves, neither of these are unique, but
-# together they almost always are, unless the same user is doing two
-# commits simultaneously). The final invocation is the one that
-# actually sends the mail -- it gathers up the cached information,
-# combines that with what it found out on this pass, and sends a
-# commit message to the appropriate mailing list.
-#
-# (Ask Karl Fogel <kfogel@collab.net> if questions.)
-#
-# Contributed by David Hampton <hampton@cisco.com>
-# Roy Fielding removed useless code and added log/mail of new files
-# Ken Coar added special processing (i.e., no diffs) for binary files
-#
-
-############################################################
-#
-# Configurable options
-#
-############################################################
-#
-# Where do you want the RCS ID and delta info?
-# 0 = none,
-# 1 = in mail only,
-# 2 = in both mail and logs.
-#
-$rcsidinfo = 2;
-
-#if you are using CVS web then set this to some value... if not set it to ""
-#
-# When set properly, this will cause links to aspects of the project to
-# print in the commit emails.
-#$CVSWEB_SCHEME = "http";
-#$CVSWEB_DOMAIN = "nongnu.org";
-#$CVSWEB_PORT = "80";
-#$CVSWEB_URI = "source/browse/";
-#$SEND_URL = "true";
-$SEND_DIFF = "true";
-
-
-# Set this to a domain to have CVS pretend that all users who make
-# commits have mail accounts within that domain.
-#$EMULATE_LOCAL_MAIL_USER="nongnu.org";
-
-# Set this to '-c' for context diffs; defaults to '-u' for unidiff format.
-$difftype = '-uN';
-
-############################################################
-#
-# Constants
-#
-############################################################
-$STATE_NONE = 0;
-$STATE_CHANGED = 1;
-$STATE_ADDED = 2;
-$STATE_REMOVED = 3;
-$STATE_LOG = 4;
-
-$TMPDIR = $ENV{'TMPDIR'} || '/tmp';
-$FILE_PREFIX = '#cvs.';
-
-$LAST_FILE = "$TMPDIR/${FILE_PREFIX}lastdir"; # Created by commit_prep!
-$ADDED_FILE = "$TMPDIR/${FILE_PREFIX}files.added";
-$REMOVED_FILE = "$TMPDIR/${FILE_PREFIX}files.removed";
-$LOG_FILE = "$TMPDIR/${FILE_PREFIX}files.log";
-$BRANCH_FILE = "$TMPDIR/${FILE_PREFIX}files.branch";
-$MLIST_FILE = "$TMPDIR/${FILE_PREFIX}files.mlist";
-$SUMMARY_FILE = "$TMPDIR/${FILE_PREFIX}files.summary";
-
-$CVSROOT = $ENV{'CVSROOT'};
-
-$MAIL_CMD = "| /usr/lib/sendmail -i -t";
-#$MAIL_CMD = "| /var/qmail/bin/qmail-inject";
-$MAIL_FROM = 'commitlogger'; #not needed if EMULATE_LOCAL_MAIL_USER
-$SUBJECT_PRE = 'CVS update:';
-
-
-############################################################
-#
-# Subroutines
-#
-############################################################
-
-sub format_names {
- local($dir, @files) = @_;
- local(@lines);
-
- $lines[0] = sprintf(" %-08s", $dir);
- foreach $file (@files) {
- if (length($lines[$#lines]) + length($file) > 60) {
- $lines[++$#lines] = sprintf(" %8s", " ");
- }
- $lines[$#lines] .= " ".$file;
- }
- @lines;
-}
-
-sub cleanup_tmpfiles {
- local(@files);
-
- opendir(DIR, $TMPDIR);
- push(@files, grep(/^${FILE_PREFIX}.*\.${id}\.${cvs_user}$/, readdir(DIR)));
- closedir(DIR);
- foreach (@files) {
- unlink "$TMPDIR/$_";
- }
-}
-
-sub write_logfile {
- local($filename, @lines) = @_;
-
- open(FILE, ">$filename") || die ("Cannot open log file $filename: $!\n");
- print(FILE join("\n", @lines), "\n");
- close(FILE);
-}
-
-sub append_to_file {
- local($filename, $dir, @files) = @_;
-
- if (@files) {
- local(@lines) = &format_names($dir, @files);
- open(FILE, ">>$filename") || die ("Cannot open file $filename: $!\n");
- print(FILE join("\n", @lines), "\n");
- close(FILE);
- }
-}
-
-sub write_line {
- local($filename, $line) = @_;
-
- open(FILE, ">$filename") || die("Cannot open file $filename: $!\n");
- print(FILE $line, "\n");
- close(FILE);
-}
-
-sub append_line {
- local($filename, $line) = @_;
-
- open(FILE, ">>$filename") || die("Cannot open file $filename: $!\n");
- print(FILE $line, "\n");
- close(FILE);
-}
-
-sub read_line {
- local($filename) = @_;
- local($line);
-
- open(FILE, "<$filename") || die("Cannot open file $filename: $!\n");
- $line = <FILE>;
- close(FILE);
- chomp($line);
- $line;
-}
-
-sub read_line_nodie {
- local($filename) = @_;
- local($line);
- open(FILE, "<$filename") || return ("");
-
- $line = <FILE>;
- close(FILE);
- chomp($line);
- $line;
-}
-
-sub read_file_lines {
- local($filename) = @_;
- local(@text) = ();
-
- open(FILE, "<$filename") || return ();
- while (<FILE>) {
- chomp;
- push(@text, $_);
- }
- close(FILE);
- @text;
-}
-
-sub read_file {
- local($filename, $leader) = @_;
- local(@text) = ();
-
- open(FILE, "<$filename") || return ();
- while (<FILE>) {
- chomp;
- push(@text, sprintf(" %-10s %s", $leader, $_));
- $leader = "";
- }
- close(FILE);
- @text;
-}
-
-sub read_logfile {
- local($filename, $leader) = @_;
- local(@text) = ();
-
- open(FILE, "<$filename") || die ("Cannot open log file $filename: $!\n");
- while (<FILE>) {
- chomp;
- push(@text, $leader.$_);
- }
- close(FILE);
- @text;
-}
-
-#
-# do an 'cvs -Qn status' on each file in the arguments, and extract info.
-#
-sub change_summary {
- local($out, @filenames) = @_;
- local(@revline);
- local($file, $rev, $rcsfile, $line, $vhost, $cvsweb_base);
-
- while (@filenames) {
- $file = shift @filenames;
-
- if ("$file" eq "") {
- next;
- }
-
- open(RCS, "-|") || exec "$cvsbin/cvs", '-Qn', 'status', '--', $file;
-
- $rev = "";
- $delta = "";
- $rcsfile = "";
-
-
- while (<RCS>) {
- if (/^[ \t]*Repository revision/) {
- chomp;
- @revline = split(' ', $_);
- $rev = $revline[2];
- $rcsfile = $revline[3];
- $rcsfile =~ s,^$CVSROOT/,,;
- $rcsfile =~ s/,v$//;
- }
- }
- close(RCS);
-
-
- if ($rev ne '' && $rcsfile ne '') {
- open(RCS, "-|") || exec "$cvsbin/cvs", '-Qn', 'log', "-r$rev",
- '--', $file;
- while (<RCS>) {
- if (/^date:/) {
- chomp;
- $delta = $_;
- $delta =~ s/^.*;//;
- $delta =~ s/^[\s]+lines://;
- }
- }
- close(RCS);
- }
-
- $diff = "\n\n";
- $vhost = $path[0];
- if ($CVSWEB_PORT eq "80") {
- $cvsweb_base = "$CVSWEB_SCHEME://$vhost.$CVSWEB_DOMAIN/$CVSWEB_URI";
- }
- else {
- $cvsweb_base = "$CVSWEB_SCHEME://$vhost.$CVSWEB_DOMAIN:$CVSWEB_PORT/$CVSWEB_URI";
- }
- if ($SEND_URL eq "true") {
- $diff .= $cvsweb_base . join("/", @path) . "/$file";
- }
-
- #
- # If this is a binary file, don't try to report a diff; not only is
- # it meaningless, but it also screws up some mailers. We rely on
- # Perl's 'is this binary' algorithm; it's pretty good. But not
- # perfect.
- #
- if (($file =~ /\.(?:pdf|gif|jpg|mpg)$/i) || (-B $file)) {
- if ($SEND_URL eq "true") {
- $diff .= "?rev=$rev&content-type=text/x-cvsweb-markup\n\n";
- }
- if ($SEND_DIFF eq "true") {
- $diff .= "\t<<Binary file>>\n\n";
- }
- }
- else {
- #
- # Get the differences between this and the previous revision,
- # being aware that new files always have revision '1.1' and
- # new branches always end in '.n.1'.
- #
- if ($rev =~ /^(.*)\.([0-9]+)$/) {
- $prev = $2 - 1;
- $prev_rev = $1 . '.' . $prev;
-
- $prev_rev =~ s/\.[0-9]+\.0$//;# Truncate if first rev on branch
-
- if ($rev eq '1.1') {
- if ($SEND_URL eq "true") {
- $diff .= "?rev=$rev&content-type=text/x-cvsweb-markup\n\n";
- }
- if ($SEND_DIFF eq "true") {
- open(DIFF, "-|")
- || exec "$cvsbin/cvs", '-Qn', 'update', '-p', '-r1.1',
- '--', $file;
- $diff .= "Index: $file\n=================================="
- . "=================================\n";
- }
- }
- else {
- if ($SEND_URL eq "true") {
- $diff .= ".diff?r1=$prev_rev&r2=$rev\n\n";
- }
- if ($SEND_DIFF eq "true") {
- $diff .= "(In the diff below, changes in quantity "
- . "of whitespace are not shown.)\n\n";
- open(DIFF, "-|")
- || exec "$cvsbin/cvs", '-Qn', 'diff', "$difftype",
- '-b', "-r$prev_rev", "-r$rev", '--', $file;
- }
- }
-
- if ($SEND_DIFF eq "true") {
- while (<DIFF>) {
- $diff .= $_;
- }
- close(DIFF);
- }
- $diff .= "\n\n";
- }
- }
-
- &append_line($out, sprintf("%-9s%-12s%s%s", $rev, $delta,
- $rcsfile, $diff));
- }
-}
-
-
-sub build_header {
- local($header);
- delete $ENV{'TZ'};
- local($sec,$min,$hour,$mday,$mon,$year) = localtime(time);
-
- $header = sprintf(" User: %-8s\n Date: %02d/%02d/%02d %02d:%02d:%02d",
- $cvs_user, $year%100, $mon+1, $mday,
- $hour, $min, $sec);
-# $header = sprintf("%-8s %02d/%02d/%02d %02d:%02d:%02d",
-# $login, $year%100, $mon+1, $mday,
-# $hour, $min, $sec);
-}
-
-# !!! Destination Mailing-list and history file mappings here !!!
-
-#sub mlist_map
-#{
-# local($path) = @_;
-# my $domain = "nongnu.org";
-#
-# if ($path =~ /^([^\/]+)/) {
-# return "cvs\@$1.$domain";
-# } else {
-# return "cvs\@$domain";
-# }
-#}
-
-sub derive_subject_from_changes_file ()
-{
- my $subj = "";
-
- for ($i = 0; ; $i++)
- {
- open (CH, "<$CHANGED_FILE.$i.$id.$cvs_user") or last;
-
- while (my $change = <CH>)
- {
- # A changes file looks like this:
- #
- # src foo.c newfile.html
- # www index.html project_nav.html
- #
- # Each line is " Dir File1 File2 ..."
- # We only care about Dir, since the subject line should
- # summarize.
-
- $change =~ s/^[ \t]*//;
- $change =~ /^([^ \t]+)[ \t]*/;
- my $dir = $1;
- # Fold to rightmost directory component
- $dir =~ /([^\/]+)$/;
- $dir = $1;
- if ($subj eq "") {
- $subj = $dir;
- } else {
- $subj .= ", $dir";
- }
- }
- close (CH);
- }
-
- if ($subj ne "") {
- $subj = "MODIFIED: $subj ...";
- }
- else {
- # NPM: See if there's any file-addition notifications.
- my $added = &read_line_nodie("$ADDED_FILE.$i.$id.$cvs_user");
- if ($added ne "") {
- $subj .= "ADDED: $added ";
- }
-
-# print "derive_subject_from_changes_file().. added== $added \n";
-
- ## NPM: See if there's any file-removal notications.
- my $removed = &read_line_nodie("$REMOVED_FILE.$i.$id.$cvs_user");
- if ($removed ne "") {
- $subj .= "REMOVED: $removed ";
- }
-
-# print "derive_subject_from_changes_file().. removed== $removed \n";
-
- ## NPM: See if there's any branch notifications.
- my $branched = &read_line_nodie("$BRANCH_FILE.$i.$id.$cvs_user");
- if ($branched ne "") {
- $subj .= "BRANCHED: $branched";
- }
-
-# print "derive_subject_from_changes_file().. branched== $branched \n";
-
- ## NPM: DEFAULT: DIRECTORY CREATION (c.f. "Check for a new directory first" in main mody)
- if ($subj eq "") {
- my $subject = join("/", @path);
- $subj = "NEW: $subject";
- }
- }
-
- return $subj;
-}
-
-sub mail_notification
-{
- local($addr_list, @text) = @_;
- local($mail_to);
-
- my $subj = &derive_subject_from_changes_file ();
-
- if ($EMULATE_LOCAL_MAIL_USER ne "") {
- $MAIL_FROM = "$cvs_user\@$EMULATE_LOCAL_MAIL_USER";
- }
-
- $mail_to = join(", ", @{$addr_list});
-
- print "Mailing the commit message to $mail_to (from $MAIL_FROM)\n";
-
- $ENV{'MAILUSER'} = $MAIL_FROM;
- # Commented out on hocus, so comment it out here. -kff
- # $ENV{'QMAILINJECT'} = 'f';
-
- open(MAIL, "$MAIL_CMD -f$MAIL_FROM");
- print MAIL "From: $MAIL_FROM\n";
- print MAIL "To: $mail_to\n";
- print MAIL "Subject: $SUBJECT_PRE $subj\n\n";
- print(MAIL join("\n", @text));
- close(MAIL);
-# print "Mailing the commit message to $MAIL_TO...\n";
-#
-# #added by jrobbins@collab.net 1999/12/15
-# # attempt to get rid of anonymous
-# $ENV{'MAILUSER'} = 'commitlogger';
-# $ENV{'QMAILINJECT'} = 'f';
-#
-# open(MAIL, "| /var/qmail/bin/qmail-inject");
-# print(MAIL "To: $MAIL_TO\n");
-# print(MAIL "Subject: cvs commit: $ARGV[0]\n");
-# print(MAIL join("\n", @text));
-# close(MAIL);
-}
-
-## process the command line arguments sent to this script
-## it returns an array of files, %s, sent from the loginfo
-## command
-sub process_argv
-{
- local(@argv) = @_;
- local(@files);
- local($arg);
- print "Processing log script arguments...\n";
-
- while (@argv) {
- $arg = shift @argv;
-
- if ($arg eq '-u') {
- $cvs_user = shift @argv;
- } else {
- ($donefiles) && die "Too many arguments!\n";
- $donefiles = 1;
- $ARGV[0] = $arg;
- @files = split(' ', $arg);
- }
- }
- return @files;
-}
-
-
-#############################################################
-#
-# Main Body
-#
-############################################################
-#
-# Setup environment
-#
-umask (002);
-
-# Connect to the database
-$cvsbin = "/usr/bin";
-
-#
-# Initialize basic variables
-#
-$id = getpgrp();
-$state = $STATE_NONE;
-$cvs_user = $ENV{'USER'} || getlogin || (getpwuid($<))[0] || sprintf("uid#%d",$<);
-@files = process_argv(@ARGV);
-@path = split('/', $files[0]);
-if ($#path == 0) {
- $dir = ".";
-} else {
- $dir = join('/', @path[1..$#path]);
-}
-#print("ARGV - ", join(":", @ARGV), "\n");
-#print("files - ", join(":", @files), "\n");
-#print("path - ", join(":", @path), "\n");
-#print("dir - ", $dir, "\n");
-#print("id - ", $id, "\n");
-
-#
-# Map the repository directory to an email address for commitlogs to be sent
-# to.
-#
-#$mlist = &mlist_map($files[0]);
-
-##########################
-#
-# Check for a new directory first. This will always appear as a
-# single item in the argument list, and an empty log message.
-#
-if ($ARGV[0] =~ /New directory/) {
- $header = &build_header;
- @text = ();
- push(@text, $header);
- push(@text, "");
- push(@text, " ".$ARGV[0]);
- &mail_notification([ $mlist ], @text);
- exit 0;
-}
-
-#
-# Iterate over the body of the message collecting information.
-#
-while (<STDIN>) {
- chomp; # Drop the newline
- if (/^Revision\/Branch:/) {
- s,^Revision/Branch:,,;
- push (@branch_lines, split);
- next;
- }
-# next if (/^[ \t]+Tag:/ && $state != $STATE_LOG);
- if (/^Modified Files/) { $state = $STATE_CHANGED; next; }
- if (/^Added Files/) { $state = $STATE_ADDED; next; }
- if (/^Removed Files/) { $state = $STATE_REMOVED; next; }
- if (/^Log Message/) { $state = $STATE_LOG; next; }
- s/[ \t\n]+$//; # delete trailing space
-
- push (@changed_files, split) if ($state == $STATE_CHANGED);
- push (@added_files, split) if ($state == $STATE_ADDED);
- push (@removed_files, split) if ($state == $STATE_REMOVED);
- if ($state == $STATE_LOG) {
- if (/^PR:$/i ||
- /^Reviewed by:$/i ||
- /^Submitted by:$/i ||
- /^Obtained from:$/i) {
- next;
- }
- push (@log_lines, $_);
- }
-}
-
-#
-# Strip leading and trailing blank lines from the log message. Also
-# compress multiple blank lines in the body of the message down to a
-# single blank line.
-# (Note, this only does the mail and changes log, not the rcs log).
-#
-while ($#log_lines > -1) {
- last if ($log_lines[0] ne "");
- shift(@log_lines);
-}
-while ($#log_lines > -1) {
- last if ($log_lines[$#log_lines] ne "");
- pop(@log_lines);
-}
-for ($i = $#log_lines; $i > 0; $i--) {
- if (($log_lines[$i - 1] eq "") && ($log_lines[$i] eq "")) {
- splice(@log_lines, $i, 1);
- }
-}
-
-#
-# Find the log file that matches this log message
-#
-for ($i = 0; ; $i++) {
- last if (! -e "$LOG_FILE.$i.$id.$cvs_user");
- @text = &read_logfile("$LOG_FILE.$i.$id.$cvs_user", "");
- last if ($#text == -1);
- last if (join(" ", @log_lines) eq join(" ", @text));
-}
-
-#
-# Spit out the information gathered in this pass.
-#
-&write_logfile("$LOG_FILE.$i.$id.$cvs_user", @log_lines);
-&append_to_file("$BRANCH_FILE.$i.$id.$cvs_user", $dir, @branch_lines);
-&append_to_file("$ADDED_FILE.$i.$id.$cvs_user", $dir, @added_files);
-&append_to_file("$CHANGED_FILE.$i.$id.$cvs_user", $dir, @changed_files);
-&append_to_file("$REMOVED_FILE.$i.$id.$cvs_user", $dir, @removed_files);
-&append_line("$MLIST_FILE.$i.$id.$cvs_user", $mlist);
-if ($rcsidinfo) {
- &change_summary("$SUMMARY_FILE.$i.$id.$cvs_user", (@changed_files, @added_files));
-}
-
-#
-# Check whether this is the last directory. If not, quit.
-#
-if (-e "$LAST_FILE.$id.$cvs_user") {
- $_ = &read_line("$LAST_FILE.$id.$cvs_user");
- $tmpfiles = $files[0];
- $tmpfiles =~ s,([^a-zA-Z0-9_/]),\\$1,g;
- if (! grep(/$tmpfiles$/, $_)) {
- print "More commits to come...\n";
- exit 0
- }
-}
-
-#
-# This is it. The commits are all finished. Lump everything together
-# into a single message, fire a copy off to the mailing list, and drop
-# it on the end of the Changes file.
-#
-$header = &build_header;
-
-#
-# Produce the final compilation of the log messages
-#
-@text = ();
-@mlist_list = ();
-push(@text, $header);
-push(@text, "");
-for ($i = 0; ; $i++) {
- last if (! -e "$LOG_FILE.$i.$id.$cvs_user");
- push(@text, &read_file("$BRANCH_FILE.$i.$id.$cvs_user", "Branch:"));
- push(@text, &read_file("$CHANGED_FILE.$i.$id.$cvs_user", "Modified:"));
- push(@text, &read_file("$ADDED_FILE.$i.$id.$cvs_user", "Added:"));
- push(@text, &read_file("$REMOVED_FILE.$i.$id.$cvs_user", "Removed:"));
- push(@text, " Log:");
- push(@text, &read_logfile("$LOG_FILE.$i.$id.$cvs_user", " "));
- push(@mlist_list, &read_file_lines("$MLIST_FILE.$i.$id.$cvs_user"));
- if ($rcsidinfo == 2) {
- if (-e "$SUMMARY_FILE.$i.$id.$cvs_user") {
- push(@text, " ");
- push(@text, " Revision Changes Path");
- push(@text, &read_logfile("$SUMMARY_FILE.$i.$id.$cvs_user", " "));
- }
- }
- push(@text, "");
-}
-
-#
-# Now generate the extra info for the mail message..
-#
-if ($rcsidinfo == 1) {
- $revhdr = 0;
- for ($i = 0; ; $i++) {
- last if (! -e "$LOG_FILE.$i.$id.$cvs_user");
- if (-e "$SUMMARY_FILE.$i.$id.$cvs_user") {
- if (!$revhdr++) {
- push(@text, "Revision Changes Path");
- }
- push(@text, &read_logfile("$SUMMARY_FILE.$i.$id.$cvs_user", ""));
- }
- }
- if ($revhdr) {
- push(@text, ""); # consistancy...
- }
-}
-
-%mlist_hash = ();
-
-foreach (@mlist_list) { $mlist_hash{ $_ } = 1; }
-
-#
-# Mail out the notification.
-#
-&mail_notification([ keys(%mlist_hash) ], @text);
-&cleanup_tmpfiles;
-exit 0;
OpenPOWER on IntegriCloud