From 3810eccf6bc5af413d883fd298d59e0d7bdb96ea Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 31 May 2004 22:16:54 +0000 Subject: Added a simple utility for converting CVS log messages to a reasonable changelog format. --- tools/cvslog | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 tools/cvslog (limited to 'tools') diff --git a/tools/cvslog b/tools/cvslog new file mode 100755 index 0000000..41abbc2 --- /dev/null +++ b/tools/cvslog @@ -0,0 +1,60 @@ +#!/usr/bin/perl +# Process `cvs log' output to get a resonable changelog +# (c) 2003--2004 Martin Mares + +use Digest::MD5; +use POSIX; + +my %names= ( + 'mj' => 'Martin Mares ', + 'feela' => 'Ondrej Filip ', + 'pavel' => 'Pavel Machek ' +); + +while () { + chomp; + /^$/ && next; + /^[?]/ && next; + /^RCS file: / || die; + $_ = ; + chomp; + my ($file) = /^Working file: (.*)$/ or die; + #print "$file\n"; + do { + $_ = or die; + } while (!/^description:/); + $_ = ; + for(;;) { + /^======/ && last; + if (/^------/) { $_ = ; next; } + /^revision / || die; + $_ = ; + my ($author) = /;\s*author:\s*([^;]+)/ or die; + my ($yy,$mm,$dd,$HH,$MM,$SS) = /^date: (....)\/(..)\/(..) (..):(..):(..);/ or die; + my $t = POSIX::mktime($SS,$MM,$HH,$dd,$mm-1,$yy-1900) or die; + my $T = sprintf("%06d", int(($t + 1800)/3600)); + $d = ""; + while ($_ = ) { + /^(-----|=====)/ && last; + $d .= " $_"; + } + my $id = "$T:" . Digest::MD5::md5_hex($d); + if (!defined $msg{$id}) { + $date{$id} = "$yy-$mm-$dd $HH:$MM:$SS"; + $msg{$id} = $d; + $files{$id} = ""; + $author{$id} = $author; + } + $files{$id} .= " * $file\n"; + #print "\t$id\n"; + } +} + +foreach $id (sort keys %date) { + if (!exists ($names{$author{$id}})) { + die "Unknown commiter $author{$id}"; + } + print "### ", $date{$id}, " ", $names{$author{$id}}, "\n\n"; + print $files{$id}, "\n"; + print $msg{$id}, "\n"; +} -- cgit v1.2.3