summaryrefslogtreecommitdiffstats
path: root/tools/cvslog2changelog.pl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cvslog2changelog.pl')
-rwxr-xr-xtools/cvslog2changelog.pl67
1 files changed, 67 insertions, 0 deletions
diff --git a/tools/cvslog2changelog.pl b/tools/cvslog2changelog.pl
new file mode 100755
index 000000000..4b33fed45
--- /dev/null
+++ b/tools/cvslog2changelog.pl
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+
+while (<>) {
+ if ($e = /^description:/ .. /^={77}/) {
+ next if $e == 1 || $e =~ /E0/;
+ if (/^-{28}/ .. /^date: /) {
+ if (/^date: (\S+)\s.*author: (\S+);/) {
+ ($date, $user) = ($1, $2);
+ }
+ } elsif (!/^branches: / && !/file .* was initially added on branch/ && !/empty log message/ && !/no_comment/) {
+ $l{$date}{$user}{$file} .= $_;
+ }
+ } elsif (/Working file: (.*)/) {
+ $file = $1;
+ }
+}
+
+foreach $date (reverse sort keys %l) {
+ foreach $user (sort keys %{$l{$date}}) {
+ $fuser = $users{$user} || $user;
+ print "$date $fuser\n\n";
+ my %inv;
+ while (($file, $log) = each %{$l{$date}{$user}}) {
+ $log =~ s/^\s+( \*)?//ms;
+ $log =~ s/\s+$//ms;
+ push @{$inv{$log}}, $file;
+ }
+ foreach $log (keys %inv) {
+ $line = join(', ', @{$inv{$log}}) . ($log !~ /^\(/ && ':') . " $log";
+ print "\t* ", join("\n\t", auto_fill($line, 72)), "\n\n";
+ }
+ }
+}
+
+1;
+
+sub auto_fill {
+ my ($line, $col) = @_;
+ map {
+ my @l;
+ my $l = '';
+ while ($_) {
+ s/^(\s*)(\S*)//;
+ my $m = "$l$1$2";
+ if (length $m > $col) {
+ push @l, $l;
+ $l = $2;
+ } else {
+ $l = $m
+ }
+ }
+ @l, $l;
+ } split("\n", $line);
+}
+
+BEGIN {
+ %users = (
+ 'gc' => 'Guillaume Cottenceau <gc@mandrakesoft.com>',
+ 'fpons' => 'François Pons <fpons@mandrakesoft.com>',
+ 'pablo' => 'Pablo Saratxaga <pablo@mandrakesoft.com>',
+ 'damien' => 'dam\'s <damien@mandrakesoft.com>',
+ 'install' => 'DrakX <install@linux-mandrake.com>',
+ 'prigaux' => 'Pixel <pixel@mandrakesoft.com>',
+ 'flepied' => 'Frederic Lepied <flepied@mandrakesoft.com>',
+ 'chmouel' => 'Chmouel Boudjnah <chmouel@mandrakesoft.com>',
+ );
+}