| #!/usr/bin/perl |
| |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| use strict; |
| use warnings; |
| use Text::Wrap qw( wrap ); |
| |
| $Text::Wrap::unexpand = 0; # tabs must die |
| |
| my %section_headers = ( |
| Bug => 'Bugfixes', |
| Improvement => 'Improvements', |
| "New Feature" => 'New features', |
| Task => 'Tasks', |
| 'Sub-task' => 'Tasks', |
| Test => 'Tests', |
| ); |
| |
| while (<>) { |
| next unless /\S/; |
| s/\s*$//; |
| s/^\s*//; |
| |
| if (/^\s*Release Notes/) { |
| # Start the entry with the release number. |
| /(\d+\.\d+\.\d+)/ or die "Couldn't match version number in $_"; |
| my $version = $1; |
| print "$1 XXXX-XX-XX\n"; |
| } |
| elsif (/^\*\*\s*(.*)/) { |
| # Start a new section. |
| my $section_header = $section_headers{$1} |
| or die "Unknown issue type: '$1'"; |
| print "\n"; |
| print " $section_header:\n\n"; |
| } |
| elsif (/\* (\[LUCY-\d+\] - )\s*(.*)/) { |
| # Process an issue. |
| my $issue_start = " * $1"; |
| my $title = $2; |
| my $indent_amount = length($issue_start); |
| my $indent = " " x $indent_amount; |
| $Text::Wrap::columns = 78 - $indent_amount; |
| $title = wrap( "", $indent, $title ); |
| print "$issue_start$title\n"; |
| } |
| else { |
| die "Unexpected line: $_"; |
| } |
| } |
| |
| print "\n"; |
| |
| __END__ |
| |
| =head1 NAME |
| |
| format_changes_entry.pl |
| |
| =head1 SYNOPSIS |
| |
| cat jira_release_notes.txt | format_changes_entry.pl > changes_entry.txt |
| |
| =head1 DESCRIPTION |
| |
| JIRA can automatically generate a "Release Notes" in text format, but the |
| layout is less than ideal for the purposes of Lucy CHANGES entries and release |
| announcement emails. This script makes the text more user-friendly by |
| wrapping long lines, collapsing whitespace and so on. |
| |
| =cut |
| |