#!/usr/bin/perl

use strict;
use warnings;

my $current_file = "";
my $current_log_msg = "";
my $date = "";
my %LOGS;
my %FILES;
my %AUTHOR;
my $author = '';
my %entries;

# 0 = cruising through garbage
# 1 = accumulating log message
my $state = 0;

while ( <> ) {
    if ( m/^RCS file: / ) {
        # snag current file nam
        chomp;
        $current_file = $_;
        $current_file =~ s/^RCS file: //;
        $current_file =~ s/,v$//;
        $state = 0;
        # print "$current_file\n";
    } elsif ( m/total revisions:/ and m/selected revisions:/ ) {
        # snag number of revisions (log messages)
        my (undef, undef, undef, undef, undef, $revs ) = split();
        # print "revisions = $revs\n";
    } elsif ( m/^----------------------------$/ ) {
        # if there are log messages, parse/save them
        store_log_msg();

        $state = 1;

        my $revnum = <>;
        # print "1 $revnum";
        my $dateline = <>;
        # print "2 $dateline";
        my ($year, $time);
        (undef, $year, $time, undef, undef, $author) = split(/\s+/, $dateline);
        $date = "$year\_$time";
        $author =~ s/\;$//;
        # print "3 $date\n";
    } elsif ( m/^=============================================================================$/ ) {
        # end of information for this file
        store_log_msg();
        $state = 0;
    } elsif ( $state == 1 ) {
        # accumulate log message
        $current_log_msg .= $_;
    }

}


# dump log messages.
foreach my $description (sort {$entries{$a}{dates}[0] cmp $entries{$b}{dates}[0]} keys %entries) {
    my $entry = $entries{$description};
    print 
        "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n",
        join ("\n",
                sort keys %{ { map {$_ => 1} @{ $entry->{dates} } } },
                sort keys %{ $entry->{files} }
             ),
        "\n\n",
        $description, "\n\n";
}

print "2f585eeea02e2c79d7b1d8c4963bae2d\n";


# store individual log messages in a hash by date
sub store_log_msg {
    return unless $current_log_msg;
    my $entry = ($entries{$current_log_msg} ||= {});
    push @{ $entry->{dates} }, $date;
    $entry->{files}{"$current_file ($author)"} = 1;
    $date = '';
    $current_log_msg = '';
}

