diff options
Diffstat (limited to 'scripts/mkchlog')
-rwxr-xr-x | scripts/mkchlog | 140 |
1 files changed, 104 insertions, 36 deletions
diff --git a/scripts/mkchlog b/scripts/mkchlog index fa54b5d..8d1d431 100755 --- a/scripts/mkchlog +++ b/scripts/mkchlog @@ -14,9 +14,17 @@ use strict; my $emailsuffix; my $symbolic_name_regexp; my (@ignoreprefix); +my $reverse = 0; +my $use_rcs_filename = 0; +my $print_each_file = 0; +my $print_time = 0; GetOptions("e:s" => \$emailsuffix, "X=s" => \@ignoreprefix, + "r!" => \$reverse, + "R!" => \$use_rcs_filename, + "v!" => \$print_each_file, + "t!" => \$print_time, "s:s" => \$symbolic_name_regexp); my %logmsgs = (); # Index by date, time, and author @@ -44,7 +52,7 @@ foreach my $d (@cvsdirs) { } } -sub compare_versions +sub compare_versions($$) { # vw: version of the working file # vl: version from the log @@ -135,6 +143,7 @@ sub compare_versions } my ($in_header) = 0; +my ($has_rcs_file) = 0; my (%symbols); my $revision; my $ignore; @@ -144,10 +153,32 @@ my $currentbasefile; my %symbols_printed = (); while (<>) { - if (/^Working file: /) { + if (/^RCS file: /) { + next if (! $use_rcs_filename); $in_header = 1; + $has_rcs_file = 1; chomp; - ($ignore, $ignore, $currentfile) = split; + $currentfile = $_; + $currentfile =~ s,/RCS/,/,; + $currentfile =~ s,^RCS file: *\./,,; + $currentfile =~ s/,v$//; + $currentfile =~ s/\s/\000/g; + if (grep { $currentfile =~ /^$_/ } @ignoreprefix) { + $skipfile = 1; + } else { + $skipfile = 0; + } + $symbols{$currentfile} = {}; + next; + } elsif (/^Working file: /) { + if ($has_rcs_file) { + $has_rcs_file = 0; + next; + } + $in_header = 1; + chomp; + ($ignore, $ignore, $currentfile) = split(/\s+/, $_, 3); + $currentfile =~ s/\s/\000/g; if (grep { $currentfile =~ /^$_/ } @ignoreprefix) { $skipfile = 1; } else { @@ -196,11 +227,29 @@ while (<>) { $skipme = 1; } } elsif (! $in_header && $_ =~ /^date: /) { - my ($ignore, $date, $time, $ignore, $author, $ignore, $state, - $ignore, $plus, $minus, $ignore) = split; + my (@stuff) = split; + my ($date, $time, $author, $state, $plus, $minus); + if ($stuff[3] =~ /^[-+][0-9][0-9][0-9][0-9]/) { + $date = $stuff[1]; + $time = $stuff[2]; + $author = $stuff[5]; + $state = $stuff[7]; + $plus = $stuff[9]; + $minus = $stuff[10]; + } else { + $date = $stuff[1]; + $time = $stuff[2]; + $author = $stuff[4]; + $state = $stuff[6]; + $plus = $stuff[8]; + $minus = $stuff[9]; + } # $time =~ s/[0-9]:[0-9][0-9];$//; # $time =~ s/[0-9][0-9];$//; + $time =~ s/;$//; $author =~ s/;$//; + $plus =~ s/;$//; + $minus =~ s/;$//; my $body = ""; my $firstline = 1; while (<>) { @@ -238,14 +287,47 @@ while (<>) { } my $prevmsg=""; +my $prevdate=""; +my $prevtime=""; +my $prevauthor=""; my $header=""; -my @fileinfo = (); +my %deltainfo = (); +my %revinfo = (); -my @chlog = reverse sort keys %logmsgs; +my @chlog = $reverse ? sort keys %logmsgs : reverse sort keys %logmsgs; my %filenames_printed = (); my ($date, $time, $author, $junk, $file, $revision, @symbols); my $filestuff; +sub printmsg($$$$$\%\%) +{ + my ($date, $time, $author, $emailsuffix, $prevmsg, $revinfo, $deltainfo) = @_; + if ($print_time) { + $time = " $time"; + } else { + $time = ""; + } + print "$date$time\t<$author$emailsuffix>\n\n"; + my $filestuff = join "", (map { "\t\t$_ ($$revinfo{$_}) ($$deltainfo{$_})\n" } sort keys %revinfo); + $filestuff =~ s/\000/ /g; + $filestuff =~ s/\t/\tFiles:/; + print "$filestuff\n"; + $prevmsg =~ s/^/\t/g; + $prevmsg =~ s/\n/\n\t/g; + $prevmsg =~ s/[ \t]+\n/\n/g; + $prevmsg =~ s/[ \t]+$//g; + print "$prevmsg\n"; +} + +sub printsyms(@) { + my (@symbols_to_print) = @_; + print "===============================================================================\n"; + map { + print "Name: $_\n"; + } @symbols_to_print; + print "\n"; +} + foreach (@chlog) { ($date, $time, $author, $junk, $file, $revision, @symbols) = split; $date =~ s,/,-,g; @@ -256,25 +338,23 @@ foreach (@chlog) { } else { $delta = "$plus{$_} $minus{$_}"; } - if ($prevmsg eq $msg && !$filenames_printed{$file}) { - push @fileinfo, "\t\t$file ($revision) ($delta)\n"; + if (! $print_each_file && $prevmsg eq $msg && !$filenames_printed{$file}) { + $deltainfo{$file} = $delta; + $revinfo{$file} = $revision; } else { - if ($prevmsg ne "" || $#fileinfo >= 0) { - print $header; - $filestuff = join "", sort @fileinfo; - $filestuff =~ s/\t/\tFiles:/; - print "$filestuff\n"; - $prevmsg =~ s/^/\t/g; - $prevmsg =~ s/\n/\n\t/g; - $prevmsg =~ s/[ \t]+\n/\n/g; - $prevmsg =~ s/[ \t]+$//g; - print "$prevmsg\n"; + if ($prevmsg ne "" || keys %deltainfo > 0) { + printmsg($prevdate, $prevtime, $prevauthor, $emailsuffix, $prevmsg, %revinfo, %deltainfo); %filenames_printed = (); } $header = "$date\t<$author$emailsuffix>\n\n"; $prevmsg = $msg; - @fileinfo = (); - push @fileinfo, "\t\t$file ($revision) ($delta)\n"; + $prevdate = $date; + $prevauthor = $author; + $prevtime = $time; + %deltainfo = (); + %revinfo = (); + $deltainfo{$file} = $delta; + $revinfo{$file} = $revision; $filenames_printed{$file} = 1; } my (@symbols_to_print); @@ -285,22 +365,10 @@ foreach (@chlog) { } } if (@symbols_to_print) { - print "===============================================================================\n"; - map { - print "Name: $_\n"; - } @symbols_to_print; - print "\n"; + printsyms(@symbols_to_print); } } -if ($prevmsg ne "" or $#fileinfo >= 0) { - print "$date\t<$author$emailsuffix>\n\n"; - $filestuff = join "", sort @fileinfo; - $filestuff =~ s/\t/\tFiles:/; - print "$filestuff\n"; - $prevmsg =~ s/^/\t/g; - $prevmsg =~ s/\n/\n\t/g; - $prevmsg =~ s/[ \t]+\n/\n/g; - $prevmsg =~ s/[ \t]+$//g; - print "$prevmsg\n"; +if ($prevmsg ne "" || keys %deltainfo > 0) { + printmsg($prevdate, $prevtime, $prevauthor, $emailsuffix, $prevmsg, %revinfo, %deltainfo); } |