# Leave the first line of this file blank! # This is a Perl script; the following two lines allow us to avoid # embedding the path of the perl interpreter in the script. eval "exec perl -S $0 $*" if $running_under_some_shell; #-----------------------------------------------------------------------------# # summarize_cvslog: A Perl script for summarizing CVS commitlog files. # # The commitlog for a set of changes gets generated with a different entry # for each directory or branch changed. # This script reads through the commitlog file, merging different # entries with the same log message into a single combined entry. #-----------------------------------------------------------------------------# $prev_invariant_part_1 = ""; $prev_invariant_part_2 = ""; $prev_invariant_part_3 = ""; $prev_invariant_part_4 = ""; $accumulate_variant_part_1 = ""; $accumulate_variant_part_2 = ""; $accumulate_variant_part_3 = ""; $accumulate_variant_part_4 = ""; $next_blank_line = <>; $next_asterisk_line = <>; while(<>) { $blank_line = $next_blank_line; $asterisk_line = $next_asterisk_line; $date_line = $_; $author_line = <>; $blank_line_2 = <>; $repository_line = <>; $working_space_line = <>; $blank_line_3 = <>; $next = <>; $modified_files = ""; until (!defined($next) || $next =~ /^Log Message:/ || $next =~ /^File:/ || $next =~ /^\*\*\*\*\*\*\*\*\*\*\*\*\*/) { $modified_files .= $next; $next = <>; } $log_message = ""; until (!defined($next) || $next =~ /^File:/ || $next =~ /^\*\*\*\*\*\*\*\*\*\*\*\*\*/) { $log_message .= $next; $next = <>; } $files = ""; until (!defined($next) || $next =~ /^\*\*\*\*\*\*\*\*\*\*\*\*\*/) { $files .= $next; $prev = $next; $next = <>; } $next_blank_line = $prev; $next_asterisk_line = $next; $log_message =~ s/^Log Message:\n\n//; $log_message =~ s/\n\n*$/\n\n/; if (0) { print "[[[DEBUG INFO]]]\n" . "[[Date]]" . $date_line . "[[author]]" . $author_line . "[[blank]]" . $blank_line_2 . "[[repository]]" . $repository_line . "[[ws]]" . $working_space_line . "[[blank]]" . $blank_line_3 . "[[modified_files]]" . $modified_files . "[[log]]" . $log_message . "[[files]]" . $files . "[[asterisk]]" . $asterisk_line . "[[[END DEBUG INFO]]]\n"; } $invariant_part_1 = $blank_line . $asterisk_line; $variant_part_1 = $date_line; $invariant_part_2 = $author_line . $blank_line_2; $variant_part_2 = $repository_line . $working_space_line . $modified_files; $invariant_part_3 = $blank_line_3 . $log_message; $variant_part_3 = $files; $invariant_part_4 = ""; $variant_part_4 = ""; if ($invariant_part_1 ne $prev_invariant_part_1 || $invariant_part_2 ne $prev_invariant_part_2 || $invariant_part_3 ne $prev_invariant_part_3 || $invariant_part_4 ne $prev_invariant_part_4) { if (0) { if ($invariant_part_1 ne $prev_invariant_part_1) { print "<<1>>"; } if ($invariant_part_2 ne $prev_invariant_part_2) { print "<<2>>"; } if ($invariant_part_3 ne $prev_invariant_part_3) { print "<<3>>"; } if ($invariant_part_4 ne $prev_invariant_part_4) { print "<<4>>"; } } print $prev_invariant_part_1 . $accumulate_variant_part_1 . $prev_invariant_part_2 . $accumulate_variant_part_2 . $prev_invariant_part_3 . $accumulate_variant_part_3 . $prev_invariant_part_4 . $accumulate_variant_part_4; $accumulate_variant_part_1 = ""; $accumulate_variant_part_2 = ""; $accumulate_variant_part_3 = ""; $accumulate_variant_part_4 = ""; $prev_invariant_part_1 = $invariant_part_1; $prev_invariant_part_2 = $invariant_part_2; $prev_invariant_part_3 = $invariant_part_3; $prev_invariant_part_4 = $invariant_part_4; } $accumulate_variant_part_1 .= $variant_part_1; $accumulate_variant_part_2 .= $variant_part_2; $accumulate_variant_part_3 .= $variant_part_3; $accumulate_variant_part_4 .= $variant_part_4; } print $prev_invariant_part_1 . $accumulate_variant_part_1 . $prev_invariant_part_2 . $accumulate_variant_part_2 . $prev_invariant_part_3 . $accumulate_variant_part_3 . $prev_invariant_part_4 . $accumulate_variant_part_4;