mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Replace gitlog2ul.sh with git-release-notes.pl.
git-release-notes.pl finds the last release on its own and formats the log output separately as text for NEWS and HTML for the announcements.
This commit is contained in:
96
util/git-release-notes.pl
Normal file
96
util/git-release-notes.pl
Normal file
@@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env perl -w
|
||||
use strict;
|
||||
|
||||
use Git;
|
||||
use Cwd qq(getcwd);
|
||||
use Text::Wrap;
|
||||
|
||||
|
||||
sub print_notes {
|
||||
my $notes = shift;
|
||||
print ("\nNOTES:\n");
|
||||
print fill ('', '', $notes);
|
||||
print "\n\n";
|
||||
}
|
||||
|
||||
sub text_format {
|
||||
my ($string, $indent, $tab) = @_;
|
||||
my ($sum, $desc, $notes) = split('\<\|\>', $string);
|
||||
$sum = wrap($indent, $tab, $sum);
|
||||
print "$sum\n";
|
||||
if ($desc) {
|
||||
$desc = fill($tab, $tab, $desc);
|
||||
print "$desc\n";
|
||||
}
|
||||
print_notes($notes) if ($notes);
|
||||
}
|
||||
|
||||
sub html_format_bug {
|
||||
my $string = shift;
|
||||
my $href='"https://bugs.gnucash.org/show_bug.cgi?id=XXXXXX"';
|
||||
my ($sum, $desc, $notes) = split('\<\|\>', $string);
|
||||
$sum =~ m/Bug ([0-9]+) - /;
|
||||
my $num = $1;
|
||||
die "No bug number in $sum" if ! $num;
|
||||
$href =~ s/XXXXXX/$num/;
|
||||
print "<li><a href=$href>$sum</a>";
|
||||
print "<p>$desc</p>" if ($desc);
|
||||
print_notes($notes) if ($notes);
|
||||
print "</li>\n";
|
||||
}
|
||||
|
||||
sub html_format_other {
|
||||
my $string = shift;
|
||||
my ($sum, $desc, $notes) = split('\<\|\>', $string);
|
||||
die "No summary in $string" if not $sum;
|
||||
print "<li>$sum";
|
||||
print "<p>$desc</p>" if ($desc);
|
||||
print_notes($notes) if ($notes);
|
||||
print"</li>\n";
|
||||
}
|
||||
|
||||
my $repo = Git->repository(Directory => getcwd);
|
||||
$repo->command('describe') =~ m/(^[.\d]+)/;
|
||||
my $tag = $1 or die "Unable to determine tag";
|
||||
|
||||
my (@bugs, @improves);
|
||||
my ($revs, $c) = $repo->command_output_pipe('log', '--topo-order', '--format=%s<|>%b<|>%N<{}>', "$tag..HEAD");
|
||||
my $item = "";
|
||||
while(<$revs>) {
|
||||
my $rev = $_;
|
||||
chomp($rev);
|
||||
$item .= ' ' if $item;
|
||||
$item .= $rev;
|
||||
if ($rev =~ /<\{\}>$/) {
|
||||
$item =~ s/<\{\}>//;
|
||||
if ($item =~ m/^Bug[\s:]?[0-9]+/) {
|
||||
$item =~ s/^Bug[\s:]?([0-9]+)[ -]*/Bug $1 - /;
|
||||
push @bugs, $item;
|
||||
} else {
|
||||
push @improves, $item;
|
||||
}
|
||||
$item = '';
|
||||
}
|
||||
}
|
||||
$repo->command_close_pipe($revs, $c);
|
||||
|
||||
print "\nThe following bugs have been fixed:\n";
|
||||
foreach my $bug (sort @bugs) {
|
||||
text_format($bug, ' ', ' ');
|
||||
}
|
||||
|
||||
print "\nOther repairs or enhancements not marked as bugs:\n\n";
|
||||
foreach my $other (@improves) {
|
||||
text_format($other, ' ', ' ');
|
||||
}
|
||||
|
||||
print "*****HTML OUTPUT*****\n\n";
|
||||
print "<h6>Between $tag and XXX, the following bugfixes were accomplished:</h6>\n<ul>\n";
|
||||
foreach my $bug (sort @bugs) {
|
||||
html_format_bug($bug);
|
||||
}
|
||||
print "</ul>\n<h6>The following fixes and improvements were not associated with bug reports:</h6>\n<ul>\n";
|
||||
foreach my $other (@improves) {
|
||||
html_format_other($other);
|
||||
}
|
||||
print "</ul>\n";
|
||||
@@ -1,55 +0,0 @@
|
||||
#! /bin/bash
|
||||
#
|
||||
# gitlog2ul.sh <prevrelease> <newrelease>
|
||||
#
|
||||
# This script will extract all the commit messages from the git
|
||||
# repository between two releases or from a previous release and the
|
||||
# current checkout's HEAD.
|
||||
# The result will be printed on standard out as a
|
||||
# html unordered list ("bulleted list").
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# <prevrelease> : the git tag for the release to start
|
||||
# the commit message search
|
||||
# <newrelease> : the git tag for the release to end
|
||||
# the commit message search
|
||||
#
|
||||
# The search will return all commit messages between
|
||||
# <prevrelease> and <newrelease>
|
||||
#
|
||||
# Examples:
|
||||
# This will compile the changes between two tagged releases:
|
||||
# gitlog2ul.sh 2.3.7 2.3.8
|
||||
# This will compile the changes between the tagged release and the
|
||||
# current HEAD in checked out working copy:
|
||||
# gitlog2ul.sh 2.4.7
|
||||
|
||||
oldrelease=$1
|
||||
newrelease=$2
|
||||
|
||||
dir=`dirname "$0"`
|
||||
|
||||
# Print basic headers (to match what svn2log generates)
|
||||
cat <<EOF
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
</head>
|
||||
<body>
|
||||
<ul>
|
||||
EOF
|
||||
|
||||
if [ "x$2" == "x" ]
|
||||
then
|
||||
newrelease=HEAD
|
||||
fi
|
||||
|
||||
git --no-pager log --format="<li>%s%n<br/>%b</li>" $oldrelease..$newrelease | egrep -v "git-svn-id|^(<br/>)?BP$|^$"
|
||||
|
||||
cat <<EOF
|
||||
</ul>
|
||||
</body>
|
||||
EOF
|
||||
Reference in New Issue
Block a user