make-relnotes revision 1.1.1.1.4.2 1 1.1.1.1.4.2 matt #!/usr/bin/perl
2 1.1.1.1.4.2 matt
3 1.1.1.1.4.2 matt # Transform RELEASE_NOTES, split into "leader", and "major changes",
4 1.1.1.1.4.2 matt # split into major categories, and prepend dates to paragraphs.
5 1.1.1.1.4.2 matt #
6 1.1.1.1.4.2 matt # Input format: the leader text is copied verbatim; each paragraph
7 1.1.1.1.4.2 matt # starts with [class, class] where a class specifies one or more
8 1.1.1.1.4.2 matt # categories that the change should be listed under. Adding class
9 1.1.1.1.4.2 matt # info is the only manual processing needed to go from a RELEASE_NOTES
10 1.1.1.1.4.2 matt # file to the transformed representation.
11 1.1.1.1.4.2 matt #
12 1.1.1.1.4.2 matt # Output format: each category is printed with a little header and
13 1.1.1.1.4.2 matt # each paragraph is tagged with [Incompat yyyymmdd] or with [Feature
14 1.1.1.1.4.2 matt # yyyymmdd].
15 1.1.1.1.4.2 matt
16 1.1.1.1.4.2 matt %leader = (); %body = ();
17 1.1.1.1.4.2 matt $append_to = \%leader;
18 1.1.1.1.4.2 matt
19 1.1.1.1.4.2 matt while (<>) {
20 1.1.1.1.4.2 matt
21 1.1.1.1.4.2 matt if (/^Incompatible changes with/) {
22 1.1.1.1.4.2 matt die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
23 1.1.1.1.4.2 matt $append_to = \%body;
24 1.1.1.1.4.2 matt $prefix = "[Incompat $1] ";
25 1.1.1.1.4.2 matt while (<>) {
26 1.1.1.1.4.2 matt last if /^====/;
27 1.1.1.1.4.2 matt }
28 1.1.1.1.4.2 matt next;
29 1.1.1.1.4.2 matt }
30 1.1.1.1.4.2 matt
31 1.1.1.1.4.2 matt if (/^Major changes with/) {
32 1.1.1.1.4.2 matt die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/;
33 1.1.1.1.4.2 matt $append_to = \%body;
34 1.1.1.1.4.2 matt $prefix = "[Feature $1] ";
35 1.1.1.1.4.2 matt while (<>) {
36 1.1.1.1.4.2 matt last if /^====/;
37 1.1.1.1.4.2 matt }
38 1.1.1.1.4.2 matt next;
39 1.1.1.1.4.2 matt }
40 1.1.1.1.4.2 matt
41 1.1.1.1.4.2 matt if (/^\s*\n/) {
42 1.1.1.1.4.2 matt if ($paragraph) {
43 1.1.1.1.4.2 matt for $class (@classes) {
44 1.1.1.1.4.2 matt ${$append_to}{$class} .= $paragraph . $_;
45 1.1.1.1.4.2 matt }
46 1.1.1.1.4.2 matt $paragraph = "";
47 1.1.1.1.4.2 matt }
48 1.1.1.1.4.2 matt } else {
49 1.1.1.1.4.2 matt if ($paragraph eq "") {
50 1.1.1.1.4.2 matt if ($append_to eq \%leader) {
51 1.1.1.1.4.2 matt @classes = ("default");
52 1.1.1.1.4.2 matt $paragraph = $_;
53 1.1.1.1.4.2 matt } elsif (/^\[([^]]+)\]\s*(.*)/s) {
54 1.1.1.1.4.2 matt $paragraph = $prefix . $2;
55 1.1.1.1.4.2 matt ($junk = $1) =~ s/\s*,\s*/,/g;
56 1.1.1.1.4.2 matt $junk =~ s/^\s+//;
57 1.1.1.1.4.2 matt $junk =~ s/\s+$//;
58 1.1.1.1.4.2 matt #print "junk >$junk<\n";
59 1.1.1.1.4.2 matt @classes = split(/,+/, $junk);
60 1.1.1.1.4.2 matt #print "[", join(', ', @classes), "] ", $paragraph;
61 1.1.1.1.4.2 matt } else {
62 1.1.1.1.4.2 matt $paragraph = $_;
63 1.1.1.1.4.2 matt }
64 1.1.1.1.4.2 matt } else {
65 1.1.1.1.4.2 matt $paragraph .= $_;
66 1.1.1.1.4.2 matt }
67 1.1.1.1.4.2 matt }
68 1.1.1.1.4.2 matt }
69 1.1.1.1.4.2 matt
70 1.1.1.1.4.2 matt if ($paragraph) {
71 1.1.1.1.4.2 matt for $class (@classes) {
72 1.1.1.1.4.2 matt ${$append_to}{$class} .= $prefix . $paragraph . $_;
73 1.1.1.1.4.2 matt }
74 1.1.1.1.4.2 matt }
75 1.1.1.1.4.2 matt
76 1.1.1.1.4.2 matt print $leader{"default"};
77 1.1.1.1.4.2 matt
78 1.1.1.1.4.2 matt for $class (sort keys %body) {
79 1.1.1.1.4.2 matt print "Major changes - $class\n";
80 1.1.1.1.4.2 matt ($junk = "Major changes - $class") =~ s/./-/g;
81 1.1.1.1.4.2 matt print $junk, "\n\n";
82 1.1.1.1.4.2 matt print $body{$class};
83 1.1.1.1.4.2 matt }
84