addrutil: Re-indent.
[wk-misc.git] / log.pl
1 #!/usr/bin/perl
2
3 # Modified by wk@gnupg.org so that -m list does only 
4 #       work with one mail address (usually a ML), set a fixed 
5 #       From: address so that mailman needs only one allowed poster,
6 #       Use a default logfile with with not -f arg.             2001-10-18
7 # Modified by werner.koch@guug.de to add support for
8 #       automagically extraction of ChangeLog entries           1998-11-27
9 # Modified by woods@web.apc.org to add support for mailing      3/29/93
10 #       use '-m user' for each user to receive cvs log reports
11 #       and use '-f logfile' for the logfile to append to
12 #
13 # Modified by berliner@Sun.COM to add support for CVS 1.3       2/27/92
14 #
15 # Date: Tue, 6 Aug 91 13:27 EDT
16 # From: samborn@sunrise.com (Kevin Samborn)
17 #
18 # I revised the perl script I sent you yesterday to use the info you
19 # send in on stdin.  (I am appending the newer script to the end)
20 #
21 # $Revision: 1.2 $
22
23 $cvsroot = $ENV{'CVSROOT'};
24 $fromaddr = "cvs\@cvs.gnupg.org";
25 # turn off setgid
26 #
27 $) = $(;
28
29 # parse command line arguments
30 #
31 while (@ARGV) {
32         $arg = shift @ARGV;
33
34         if ($arg eq '-m') {
35                 ($users) && die "Too many '-m' args";
36                 $users = shift @ARGV;
37         } elsif ($arg eq '-f') {
38                 ($logfile) && die "Too many '-f' args";
39                 $logfile = shift @ARGV;
40         } else {
41                 ($donefiles) && die "Too many arguments!\n";
42                 $donefiles = 1;
43                 @files = split(/ /, $arg);
44         }
45 }
46
47 ($logfile) || ($logfile = "$cvsroot/CVSROOT/commitlog");
48
49 $srepos = shift @files;
50 $mailcmd = "| /usr/sbin/sendmail -t -oi";
51
52 # Some date and time arrays
53 #
54 @mos = (January,February,March,April,May,June,July,August,September,
55         October,November,December);
56 @days = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
57
58 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
59
60 $year = $year + 1900;
61
62 # get login name
63 #
64 $login = getlogin || (getpwuid($<))[0] || "nobody";
65
66 # open log file for appending
67 #
68 open(OUT, ">>" . $logfile) || die "Could not open(" . $logfile . "): $!\n";
69 if ($users) {
70         open(MAIL, $mailcmd) || die "Could not Exec($mailcmd): $!\n";
71 }
72
73 # print out the log Header
74 #
75 print OUT "\n";
76 print OUT "**************************************\n";
77 print OUT "Date:\t$days[$wday] $mos[$mon] $mday, $year @ $hour:" . sprintf("%02d", $min) . "\n";
78 print OUT "Author:\t$login\n\n";
79
80 if (MAIL) {
81         print MAIL "From: $fromaddr\n";
82         print MAIL "To: $users\n";
83         print MAIL "Subject: $login committed to $srepos\n";
84         print MAIL "\n";
85         print MAIL "Date:\t$days[$wday] $mos[$mon] $mday, $year @ $hour:" . sprintf("%02d", $min) . "\n";
86         print MAIL "Author:\t$login\n\n";
87 }
88
89 # print the stuff from logmsg that comes in on stdin to the logfile
90 #
91 open(IN, "-");
92 while (<IN>) {
93         chop;
94         if( /^See[ ]ChangeLog:[ ](.*)/ ) {
95             $changelog = $1;
96             $okay = false;
97             open(RCS, "-|") || exec 'cvs', '-Qn', 'update', '-p', 'ChangeLog';
98             while (<RCS>) {
99                 if( /^$changelog .*/ ) {
100                     $okay = true;
101                     print OUT;
102                     MAIL && print MAIL;
103                 }
104                 elsif( $okay ) {
105                     last if( /^[A-Z]+.*/ );
106                     print OUT;
107                     MAIL && print MAIL;
108                 }
109             }
110             while (<RCS>) { ; }
111             close(RCS);
112         }
113         print OUT $_, "\n";
114         MAIL && print MAIL $_, "\n";
115 }
116 close(IN);
117
118 print OUT "\n";
119
120
121
122 # after log information, do an 'cvs -Qn status' on each file in the arguments.
123 #
124 while (@files) {
125         $file = shift @files;
126         if ($file eq "-") {
127                 print OUT "[input file was '-']\n";
128                 if (MAIL) {
129                         print MAIL "[input file was '-']\n";
130                 }
131                 last;
132         }
133
134         open(RCS, "-|") || exec 'cvs', '-Qn', 'status', $file;
135
136         while (<RCS>) {
137                 if (/^[ \t]*Version/ || /^File:/) {
138                         print OUT;
139                         if (MAIL) {
140                                 print MAIL;
141                         }
142                 }
143         }
144         close(RCS);
145 }
146
147 close(OUT);
148 die "Write to $logfile failed" if $?;
149
150 close(MAIL);
151 die "Pipe to $mailcmd failed" if $?;
152
153 exit 0;
154