#!/usr/bin/perl

#This parses a file generated with "cvs log -rrelease_0_81:" to give the
#log messages of all files that have changed.  An executive summary is
#provided at the end.

sub DoRevisions
{
local($File, $LastRev) = @_;
local($Rev);

	while (!(($Rev = <>) =~ m/^=============================================================================$/))
	{
	    chop($Rev);
	    if ($Rev =~ m/^revision /)
	    {
		$Rev =~ s/^revision //;
		if ($Rev != $LastRev)
		{
		    printf("%s %s\n",$File, $Rev);
		    while (!(($Text = <>) =~ m/^----------------------------$/))
		    {
		    	printf("   $Text");
		    }
		}
	    }
	}
	#printf("End Revisions %s\n\n", $File);
	printf("\n\n");
}

sub DoFile
{
local($File) = @_;
local($WorkFile, $Head, $Branch, $Locks, $Access, $Symbolic);

	$WorkFile = <>;
	chop($WorkFile);
	$WorkFile =~ s/^Working file: //;
	$Head = <>;
	chop($Head);
	$Head =~ s/^head: //;
	$Branch = <>;
	$Locks = <>;
	$Access = <>;
	$Symbolic = <>;
	$Symbolic = <>;
	chop($Symbolic);
	if (! ($Symbolic =~ m/^\t/))
	{
		$Symbolic = $Head;
	}
	else
	{
	    $Symbolic =~ s/^.*: //;
	}
	if ($Symbolic != $Head)
	{
	    printf("%s Current rev %s Last Release %s\n",$WorkFile, $Head, $Symbolic);
	    $Changed++;
	    push(@Summary, "$WorkFile $Head $Symbolic");
	    while (!(($_ = <>) =~ m/^----------------------------$/))
	    {
	    }
	    &DoRevisions($WorkFile, $Symbolic);
	}
	else
	{
	    #printf("%s - No change\n", $WorkFile);
	    $NotChanged++;
	    push(@Summary, "$WorkFile $Head $Symbolic No Change");
	    while (!(<> =~ m/^=============================================================================$/))
	    {
	    }
	}
}

while (<>)
{
	chop;
        if (! (m/^RCS file:.*\/Attic\/.*/)) {
	    if (m/^RCS file: /)
	    {
		&DoFile($_);
	    }
	} 
}

printf("Executive Summary\n");
printf("Of %d files, %d changed, and %d had no change\n\n",$Changed + $NotChanged, $Changed, $NotChanged);
printf("%-15s %-12s %-12s\n","File","Current Rev.","Last Release");
foreach (@Summary)
{
	($File,$Cur,$Last,$Stat) = split(' ', $_, 4);
	printf("%-15s %-12s %-6s %s\n",$File, $Cur, $Last, $Stat);
}
