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