📄 cvslog2changelog.pl
字号:
#!/usr/bin/perl# use Data::Dumper;%Authors = (roessler => 'Thomas Roessler <roessler@does-not-exist.org>', me => 'Michael Elkins <me@mutt.org>');@Changes = ();$change = {};while (<>) { chomp $_; if ($_ =~ /^Working file: (.*)$/) { $workfile = $1; $change->{workfile} = $workfile; $change->{logmsg} = ''; $change->{author} = ''; $change->{revision} = '';# print STDERR "workfile: ", $workfile, "\n"; } elsif ($_ =~ /^(=======|------)/) { if ($change->{revision}) { # Some beautifications: Date, author. if ($change->{author} =~ /^(.*?)\s?\<(.*)\>/) { $change->{author} = "$1 <$2>"; } $change->{date} =~ s!/!-!g; # Record the change. push @Changes, $change unless $change->{logmsg} =~ /^#/; $change = {}; $change->{workfile} = $workfile; $change->{logmsg} = ''; $change->{author} = ''; } } elsif ($_ =~ /^revision ([0-9.]*)/) { $change->{revision} = $1; } elsif ($_ =~ /^date: ([^; ]*) ([^; ]*)( \+[0-9]+)?; author: ([^;]*);/) { $change->{date} = $1; $change->{hour} = $2; $change->{author} = $Authors{$3} ? $Authors{$3} : $4; $change->{committed} = $4; } elsif ($_ =~ /^From: (.*)$/) { $change->{author} = $1; } elsif ($change->{revision}) { if ($change->{logmsg} || $_) { $change->{logmsg} .= $_ . "\n"; } }}# print Dumper @Changes;undef $last_logmsg; undef $last_author; undef $last_date; undef $last_hour; undef $last_comm;$files = [];for my $k (sort {($b->{date} cmp $a->{date}) || ($b->{hour} cmp $a->{hour}) || ($a->{author} cmp $b->{author}) || ($a->{workfile} cmp $b->{workfile})} @Changes) { if (!($last_date eq $k->{date}) || !($last_author eq $k->{author}) || !($last_comm eq $k->{committed})) { if (@$files) { &print_entry ($files, $last_logmsg); $files = []; } &print_header ($k->{author}, $k->{committed}, $k->{date}, $k->{hour}); } if (@$files && !($last_logmsg eq $k->{logmsg})) { &print_entry ($files, $last_logmsg); $files = []; } $last_comm = $k->{committed}; $last_logmsg = $k->{logmsg}; $last_author = $k->{author}; $last_date = $k->{date}; $last_hour = $k->{hour}; push @$files, $k->{workfile};}if (@$files) { &print_entry ($files, $last_logmsg);}sub print_header { my $author = shift; my $committed = shift; my $date = shift; my $hour = shift; print $date, " ", $hour, " ", $author, " (", $committed, ")\n\n";}sub print_entry { my $files = shift; my $logmsg = shift; print "\t* "; my $c = ''; for my $f (@$files) { print $c, $f; $c = ', ' unless $c; } print ": "; my $t = ''; for my $l (split ('\n', $logmsg)) { print $t, $l, "\n"; $t = "\t" unless $t; } print "\n";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -