From 93fe9eecc442eb9168f22b4af30c57868717e0e6 Mon Sep 17 00:00:00 2001 From: roktas Date: Mon, 30 Oct 2006 12:10:38 +0000 Subject: Modifications to create a nice ChangeLog. + Add new file 'gnuify-changelog.pl' grabbed and adapted from subversion distribution. + Add 'ChangeLog' target to create/update ChangeLog. + Update current ChangeLog. git-svn-id: https://pandoc.googlecode.com/svn/trunk@44 788f1e2b-df1e-0410-8736-df70ead52e1b --- gnuify-changelog.pl | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100755 gnuify-changelog.pl (limited to 'gnuify-changelog.pl') diff --git a/gnuify-changelog.pl b/gnuify-changelog.pl new file mode 100755 index 000000000..7f6d3bf7c --- /dev/null +++ b/gnuify-changelog.pl @@ -0,0 +1,84 @@ +#!/usr/bin/perl -w + +# a script to munge the output of 'svn log' into something approaching the +# style of a GNU ChangeLog. +# +# to use this, just fill in the 'hackers' hash with the usernames and +# name/emails of the people who work on your project, go to the top level +# of your working copy, and run: +# +# $ svn log | /path/to/gnuify-changelog.pl > ChangeLog + +require 5.0; +use strict; + +my %hackers = ( + "fiddlosopher" => 'John MacFarlane ', + "jgm" => 'John MacFarlane ', + "roktas" => 'Recai Oktaş ', +); + +my $parse_next_line = 0; +my $last_line_empty = 0; +my $last_rev = ""; + +while (my $entry = <>) { + + # Axe windows style line endings, since we should try to be consistent, and + # the repos has both styles in its log entries + $entry =~ s/\r\n$/\n/; + + # Remove trailing whitespace + $entry =~ s/\s+$/\n/; + + my $this_line_empty = $entry eq "\n"; + + # Avoid duplicate empty lines + next if $this_line_empty and $last_line_empty; + + # Don't fail on valid dash-only lines + if ($entry =~ /^-+$/ and length($entry) >= 72) { + + # We're at the start of a log entry, so we need to parse the next line + $parse_next_line = 1; + + # Check to see if the final line of the commit message was blank, + # if not insert one + print "\n" if $last_rev ne "" and !$last_line_empty; + + } elsif ($parse_next_line) { + + # Transform from svn style to GNU style + $parse_next_line = 0; + + my @parts = split (/ /, $entry); + $last_rev = $parts[0]; + my $hacker = $parts[2]; + my $tstamp = $parts[4]; + + # Use alias if we can't resolve to name, email + $hacker = $hackers{$hacker} if defined $hackers{$hacker}; + + printf "%s %s\n", $tstamp, $hacker; + + } elsif ($this_line_empty) { + + print "\n"; + + } else { + + print "\t$entry"; + + } + + $last_line_empty = $this_line_empty; +} + +# As a HERE doc so it also sets the final changelog's coding +print <