SF.net SVN: geany:[4082] trunk/scripts/changelist.pl
ntrel at users.sourceforge.net
ntrel at xxxxx
Fri Aug 14 13:50:41 UTC 2009
Revision: 4082
http://geany.svn.sourceforge.net/geany/?rev=4082&view=rev
Author: ntrel
Date: 2009-08-14 13:50:41 +0000 (Fri, 14 Aug 2009)
Log Message:
-----------
Format output to be easier to read and edit into a NEWS file.
Minor tidying & commenting.
Modified Paths:
--------------
trunk/scripts/changelist.pl
Modified: trunk/scripts/changelist.pl
===================================================================
--- trunk/scripts/changelist.pl 2009-08-14 11:13:22 UTC (rev 4081)
+++ trunk/scripts/changelist.pl 2009-08-14 13:50:41 UTC (rev 4082)
@@ -1,5 +1,5 @@
#!/usr/bin/env perl
-# Copyright: 2008, Nick Treleaven
+# Copyright: 2008-2009, Nick Treleaven
# License: GNU GPL V2 or later
# Warranty: NONE
@@ -8,23 +8,41 @@
# repeats until all matching blocks of text are found.
# Results are printed in reverse, hence in chronological order (as ChangeLogs
# are usually written in reverse date order).
+#
+# The resulting lines are then formatted to be easier to read and edit into a
+# NEWS file.
+# Example ChangeLog format:
+#2009-04-03 Joe Author <joe at example.net>
+#
+# * src/file.c, src/file.h,
+# src/another.c:
+# Some change description,
+# spanning several lines.
+
use strict;
use warnings;
my $scriptname = "changelist.pl";
my $argc = $#ARGV + 1;
-($argc == 2)
- or die "Usage:\n$scriptname matchstring changelogfile\n";
+($argc == 2) or die <<END;
+Usage:
+$scriptname matchstring changelogfile >outfile
+ matchstring is not case sensitive.
+END
+
my ($matchstr, $infile) = @ARGV;
open(INPUT, $infile)
or die "Couldn't open $infile for reading: $!\n";
my $entry; # the current matching block of text
-my @entries;
+my @entries; # changelog entries, one per date
+
+# first parse each ChangeLog entry into an array
+
my $found = 0; # if we're in a matching block of text
my $blank = 0; # whether the last line was empty
@@ -34,8 +52,7 @@
if (! $found) {
($line =~ m/$matchstr/) and $found = 1;
} else {
- if (length($line) <= 1) # current line is empty
- {
+ if (length($line) <= 1) { # current line is empty
if ($blank > 0) { # previous line was also empty
push(@entries, $entry); # append entry
$entry = "";
@@ -47,10 +64,52 @@
}
}
}
- $found and $entry .= $line;
+ if ($found) {
+ $entry .= $line;
+ }
}
close(INPUT);
+# reformat entries
foreach $entry (reverse @entries) {
- print "$entry\n\n";
+ my @lines = split(/\n/, $entry);
+ my $fl = 0; # in file list lines
+ my $cm = 0; # in commit message lines
+
+ foreach my $line (@lines){
+ my $flset = $fl;
+
+ if (!$cm){
+ # check if in filelist
+ ($line =~ m/ \* /) and $fl = 1;
+ # join filelist together on one line
+ $fl and ($line =~ s/^ / /);
+ $fl and ($line =~ m/:/) and $fl = 0;
+ $fl and ($line =~ m/,$/) or $fl = 0;
+ }
+ if (!$flset){
+ # Asterisk commit messages
+ if (!$cm and ($line =~ m/^ /)){
+ $cm = 1;
+ $line =~ s/^( )/$1* /;
+ } else {
+ $cm and ($line =~ s/^( )/$1 /); # indent continuing lines
+ }
+ $cm and ($line =~ m/\.$/) and $cm = 0;
+ }
+ #~ print $fl.','.$cm.','.$line."\n"; next; # debug
+
+ # change file list start char to easily distinguish between file list and commit messages
+ $line =~ s/^ \* /@ /g;
+ # strip date line
+ $line =~ s/^([0-9-]+(\s+\w+)+).*/$1/g;
+ # remove indent
+ $line =~ s/^ //g;
+
+ if ($line ne ""){
+ print $line;
+ (!$fl) and print "\n";
+ }
+ }
+ print "\n";
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list