diff options
Diffstat (limited to '')
-rwxr-xr-x | mantools/make-relnotes | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/mantools/make-relnotes b/mantools/make-relnotes new file mode 100755 index 0000000..f5d26f3 --- /dev/null +++ b/mantools/make-relnotes @@ -0,0 +1,85 @@ +#!/usr/bin/perl + +# Transform RELEASE_NOTES, split into "leader", and "major changes", +# split into major categories, and prepend dates to paragraphs. +# +# Input format: the leader text is copied verbatim; each section +# starts with "Incompatible changes with snapshot YYYYMMDD" or "Major +# changes with snapshot YYYYMMDD"; each paragraph starts with [class, +# class] where a class specifies one or more categories that the +# change should be listed under. Adding class info is the only manual +# processing needed to go from a RELEASE_NOTES file to the transformed +# representation. +# +# Output format: each category is printed with a little header and +# each paragraph is tagged with [Incompat yyyymmdd] or with [Feature +# yyyymmdd]. + +%leader = (); %body = (); +$append_to = \%leader; + +while (<>) { + + if (/^(Incompatible changes|Incompatibility) with/) { + die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/; + $append_to = \%body; + $prefix = "[Incompat $1] "; + while (<>) { + last if /^====/; + } + next; + } + + if (/^Major changes with/) { + die "No date found: $_" unless /(\d\d\d\d\d\d\d\d)/; + $append_to = \%body; + $prefix = "[Feature $1] "; + while (<>) { + last if /^====/; + } + next; + } + + if (/^\s*\n/) { + if ($paragraph) { + for $class (@classes) { + ${$append_to}{$class} .= $paragraph . $_; + } + $paragraph = ""; + } + } else { + if ($paragraph eq "") { + if ($append_to eq \%leader) { + @classes = ("default"); + $paragraph = $_; + } elsif (/^\[([^]]+)\]\s*(.*)/s) { + $paragraph = $prefix . $2; + ($junk = $1) =~ s/\s*,\s*/,/g; + $junk =~ s/^\s+//; + $junk =~ s/\s+$//; + #print "junk >$junk<\n"; + @classes = split(/,+/, $junk); + #print "[", join(', ', @classes), "] ", $paragraph; + } else { + $paragraph = $_; + } + } else { + $paragraph .= $_; + } + } +} + +if ($paragraph) { + for $class (@classes) { + ${$append_to}{$class} .= $prefix . $paragraph . $_; + } +} + +print $leader{"default"}; + +for $class (sort keys %body) { + print "Major changes - $class\n"; + ($junk = "Major changes - $class") =~ s/./-/g; + print $junk, "\n\n"; + print $body{$class}; +} |