#!/usr/bin/perl

#
# Script to mail CVS commit log information.
# Copyright (C) 2001,2002 Erik Cumps <erik.cumps@chello.be>
# Licence: GPL
#

# Adapted for use at ICOS <erik.cumps@icos.be>
# $Id: logit4me,v 1.2 2003/01/21 11:07:43 ec Exp $
#

use strict;

my (@INFO, @AMINF, @PMINF);
my (@CINFO, @VINFO, $LOGFILE, $USER, $DEST);
my ($REPOSITORY);
my ($i, @list, $s);

# Store arguments
$ARGV[0] =~ s/'//g;
@CINFO   = split (/\s+/, $ARGV[0]);
$LOGFILE = $ARGV[1];
$USER    = $ARGV[2];
$DEST    = $ARGV[3];
if (!$DEST) { $DEST = "cvsmaster"; }

# Process version info
$REPOSITORY = $CINFO[0];
undef (@VINFO);
for $i (1 .. $#CINFO) {
  @list = split (",", $CINFO[$i]);
  push @VINFO, ( [ @list ] );
}

# Store temp copy
undef @INFO;
push @INFO, ( "\[$REPOSITORY\] ".`/bin/date` ); chop ($INFO[0]);
push @INFO, ( "Committed by $USER" );
for $i (0 .. $#VINFO) {
  if (!$VINFO[$i]->[1] && !$VINFO[$i]->[2]) {
    push @AMINF, ( $VINFO[$i]->[0] );
  } else {
    $s = sprintf "%-30s: %-5s -> %-5s", ( ${$VINFO[$i]}[0], ${$VINFO[$i]}[1], ${$VINFO[$i]}[2] );
    push @PMINF, ( $s );
  }
}
$s = join (" ", @AMINF);
push @INFO, ( $s );
push @INFO, @PMINF;
push @INFO, ( "" );
open (IN, "-");
while (<IN>) {
  chop;
  push @INFO, ( $_ );
}
close (IN);

# Send mail
$::subject = "NONISO-CVS \[$REPOSITORY\]";
if ($#VINFO == 0) {
  $::subject .= " ${$VINFO[0]}[0]: ${$VINFO[0]}[1] -> ${$VINFO[0]}[2]";
}
$::rc = open (OUTF, "|/bin/mail -s \"$::subject\" $DEST");
if ($::rc) {
  for $i (0 .. $#INFO) {
    print OUTF $INFO[$i]."\n";
  }
  close (OUTF);
  $::nomail = 0;
} else {
  $::nomail = 1;
}

# Append to logfile
$::rc = open (OUTF, ">>$LOGFILE");
if ($::rc) {
  print OUTF "----------------------------------------\n";
  if ($::nomail) {
    print OUTF ">>> Warning: failed to send mail!\n\n";
  }
  for $i (0 .. $#INFO) {
    print OUTF $INFO[$i]."\n";
  }
  close (OUTF);
}

# Done! :)

