blob: 8d5bb0cb0af859b76f2afc4386efee14508e6ded [file] [log] [blame]
#!/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