Home | History | Annotate | Line # | Download | only in mantools
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