forked from oasis-tcs/virtio-spec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
getchangelog.pl
executable file
·114 lines (99 loc) · 2.36 KB
/
getchangelog.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/perl
use strict;
my $rev = undef;
if ($#ARGV >= 0) {
$rev = shift @ARGV;
} else {
open(REV, "git svn log REVISION|") || die;
while (<REV>) {
next unless (m/^(r[0-9]+)/);
#top revision is WD, skip it
if (not defined $rev) {
$rev = $1;
next;
} else {
$rev = $1;
last;
}
}
}
die unless $rev =~ m/^r([0-9]+)$/;
$rev = $1;
sub escapelatex {
my $s = shift;
$s =~ s/[\\]/\\textbackslash /go;
$s =~ s/([&#%{}\$])/\\$1/go;
$s =~ s/[~]/\\~{}/go;
$s =~ s/(https?:\S*)/\\url{$1}/go;
#1st line always on a separate paragraph
$s =~ s/\n/\n\n/o;
#Guess where new paragraph starts
$s =~ s/\\.\n/.\n\n/go;
$s =~ s/\n-/\n\n-/go;
return $s;
}
#map editors to authors
my %editors = {};
$editors{'rusty'} = 'Rusty Russell <[email protected]>';
$editors{'hornet'} = 'Pawel Moll <[email protected]>';
$editors{'cornelia.huck'} = 'Cornelia Huck <[email protected]>';
$editors{'mstsirkin'} = 'Michael S. Tsirkin <[email protected]>';
my $cl = "";
my $signoff = undef;
my $editor = undef;
my $date = undef;
my $r = undef;
open(LOG, "git svn log *tex|") || die;
my $line = undef;
while (<LOG>) {
if (m/^------------------------------------------------------------------------$/) {
next if ($cl eq "");
# act on it
my $author;
if (defined $signoff) {
$author = $signoff;
} else {
$author = $editors{$editor};
}
#strip mail info
$author =~ s/\s*<.*//;
$cl = escapelatex($cl);
print "$r & $date & $author & { $cl } \\\\\n";
print "\\hline\n";
$cl = "";
$signoff = undef;
$editor = undef;
$date = undef;
$r = undef;
$line = 0;
next;
}
$line++;
#r164 | mstsirkin | 2013-12-08 14:30:55 +0200 (Sun, 08 Dec 2013)| 6 lines
if ($line eq 1) {
die unless (m/^r[0-9]/);
my @rinfo = split(/\s*\Q|\E\s*/, $_);
$r = $rinfo[0];
die unless $r =~ m/^r([0-9]+)$/;
$r = $1;
last if ($r <= $rev);
$editor = $rinfo[1];
$date = $rinfo[2];
die unless ($date =~ m/^[^(]*\([^,]*,\s*([^)]+)\)\s*$/);
$date = $1;
next;
}
next if (m/^$/);
# First signature is the author: needed?
# ignore for now
#if (not defined $signoff and m/^Signed-off-by:\s*(.*)/) {
# $signoff = $1;
#}
# skip signatures
next if (m/^\s*[A-Z][A-Za-z-]*-by:/);
# fix bug: wrong date in some commit logs
if (/Change accepted on VIRTIO TC Meeting, 3 December 2013/) {
$_ = "Change accepted on Virtio TC Meeting Minutes: Feb 25, 2014\n";
}
$cl .= $_;
}