#!/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;
	    $log = "\n$log" if $log =~ /^-/;
	    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 = '';
	$_ = "  $_" if /^-/;
	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  <dams@idm.fr>',
	      'install' => 'DrakX  <install@mandrakesoft.com>',
	      'prigaux' => 'Pixel  <pixel@mandrakesoft.com>',
	      'flepied' => 'Frederic Lepied  <flepied@mandrakesoft.com>',
	      'chmouel' => 'Chmouel Boudjnah  <chmouel@mandrakesoft.com>',
	      'uid526'  => 'dam\'s  <damien@mandrakesoft.com>',
	      'uid533'  => 'Fran�ois Pons  <fpons@mandrakesoft.com>',
	      'uid535'  => 'Guillaume Cottenceau  <gc@mandrakesoft.com>',
	      'uid553'  => 'Pixel  <pixel@mandrakesoft.com>',
	      'tvignaud' => 'Thierry Vignaud  <tvignaud@mandrakesoft.com>',
	      'sbenedict'=>'Stew Benedict  <sbenedict@mandrakesoft.com>',
	      'tkamppeter' => 'Till Kamppeter  <till@mandrakesoft.com>',
	      'yduret'  => 'Yves Duret  <yduret@mandrakesoft.com>',
	      'daouda'  => 'Daouda Lo  <daouda@mandrakesoft.com>',
	      'dchaumette' => 'Damien Chaumette  <dchaumette@mandrakesoft.com>',
	      'cbelisle' => 'Christian Belisle  <cbelisle@mandrakesoft.com>',
	      'warly'   => 'Warly  <warly@mandrakesoft.com>',
	      'jgotti'  => 'Jonathan Gotti  <jgotti@mandrakesoft.com>',
	      'fcrozat' => 'Frederic Crozat  <fcrozat@mandrakesoft.com>',
	      'baudens' => 'David Baudens  <baudens@mandrakesoft.com>',
	     );
}
all</option>
<option value='topic/gdk-pixbuf-0-branch'>topic/gdk-pixbuf-0-branch</option>
<option value='topic/gi-ppc'>topic/gi-ppc</option>
<option value='topic/ia64-8_1'>topic/ia64-8_1</option>
<option value='topic/mandrakesoft'>topic/mandrakesoft</option>
<option value='topic/mlcd4'>topic/mlcd4</option>
<option value='topic/ppp'>topic/ppp</option>
<option value='topic/rp-pppoe'>topic/rp-pppoe</option>
<option value='topic/switching_to_urpmi'>topic/switching_to_urpmi</option>
<option value='topic/unlabeled-1.1.1'>topic/unlabeled-1.1.1</option>
<option value='topic/v_webmin_0_87'>topic/v_webmin_0_87</option>
<option value='topic/x86_64-branch'>topic/x86_64-branch</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>Mageia Installer and base platform for many utilities</td><td class='sub right'>Thierry Vignaud [tv]</td></tr></table>
<table class='tabs'><tr><td>
<a href='/software/drakx-backup-do-not-use/'>summary</a><a href='/software/drakx-backup-do-not-use/refs/?id=2217db2d8f69a6800b63756da7b49e85388ca593'>refs</a><a href='/software/drakx-backup-do-not-use/log/rescue/devices.pl'>log</a><a href='/software/drakx-backup-do-not-use/tree/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>tree</a><a class='active' href='/software/drakx-backup-do-not-use/commit/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>commit</a><a href='/software/drakx-backup-do-not-use/diff/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>diff</a><a href='/software/drakx-backup-do-not-use/stats/rescue/devices.pl'>stats</a></td><td class='form'><form class='right' method='get' action='/software/drakx-backup-do-not-use/log/rescue/devices.pl'>
<input type='hidden' name='id' value='2217db2d8f69a6800b63756da7b49e85388ca593'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/software/drakx-backup-do-not-use/commit/?id=2217db2d8f69a6800b63756da7b49e85388ca593'>root</a>/<a href='/software/drakx-backup-do-not-use/commit/rescue?id=2217db2d8f69a6800b63756da7b49e85388ca593'>rescue</a>/<a href='/software/drakx-backup-do-not-use/commit/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>devices.pl</a></div><div class='content'><div class='cgit-panel'><b>diff options</b><form method='get'><input type='hidden' name='id' value='2217db2d8f69a6800b63756da7b49e85388ca593'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'>
<tr><th>author</th><td>Olivier Blin &lt;oblin@mandriva.org&gt;</td><td class='right'>2004-08-26 11:44:13 +0000</td></tr>
<tr><th>committer</th><td>Olivier Blin &lt;oblin@mandriva.org&gt;</td><td class='right'>2004-08-26 11:44:13 +0000</td></tr>
<tr><th>commit</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/commit/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>2217db2d8f69a6800b63756da7b49e85388ca593</a> (<a href='/software/drakx-backup-do-not-use/patch/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>patch</a>)</td></tr>
<tr><th>tree</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/tree/?id=2217db2d8f69a6800b63756da7b49e85388ca593'>ab6251114734d0ad7a6743cd0810311f417a8da6</a> /<a href='/software/drakx-backup-do-not-use/tree/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593'>rescue/devices.pl</a></td></tr>
<tr><th>parent</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/commit/rescue/devices.pl?id=5b144db234759e521ca2adab99c0d15792ecf4c3'>5b144db234759e521ca2adab99c0d15792ecf4c3</a> (<a href='/software/drakx-backup-do-not-use/diff/rescue/devices.pl?id=2217db2d8f69a6800b63756da7b49e85388ca593&amp;id2=5b144db234759e521ca2adab99c0d15792ecf4c3'>diff</a>)</td></tr><tr><th>download</th><td colspan='2' class='sha1'><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar'>drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.gz'>drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.gz</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.bz2'>drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.bz2</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.xz'>drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.tar.xz</a><br/><a href='/software/drakx-backup-do-not-use/snapshot/drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.zip'>drakx-backup-do-not-use-2217db2d8f69a6800b63756da7b49e85388ca593.zip</a><br/></td></tr></table>
<div class='commit-subject'>(set_xfree_conf) don't create crappy auxmouse if there is none