summaryrefslogtreecommitdiff
path: root/tools/dev/gnuify-changelog.pl
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dev/gnuify-changelog.pl')
-rwxr-xr-xtools/dev/gnuify-changelog.pl164
1 files changed, 164 insertions, 0 deletions
diff --git a/tools/dev/gnuify-changelog.pl b/tools/dev/gnuify-changelog.pl
new file mode 100755
index 0000000..a4112c7
--- /dev/null
+++ b/tools/dev/gnuify-changelog.pl
@@ -0,0 +1,164 @@
+#!/usr/bin/perl -w
+# ====================================================================
+# 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.
+# ====================================================================
+# 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 = (
+ "svn" => 'Collab.net Subversion Team',
+ "jimb" => 'Jim Blandy <jimb@redhat.com>',
+ "sussman" => 'Ben Collins-Sussman <sussman@collab.net>',
+ "kfogel" => 'Karl Fogel <kfogel@collab.net>',
+ "gstein" => 'Greg Stein <gstein@lyra.org>',
+ "brane" => 'Branko Cibej <brane@xbc.nu>',
+ "joe" => 'Joe Orton <joe@light.plus.com>',
+ "ghudson" => 'Greg Hudson <ghudson@mit.edu>',
+ "lefty" => 'Lee P. W. Burgess <lefty@red-bean.com>',
+ "fitz" => 'Brian Fitzpatrick <fitz@red-bean.com>',
+ "mab" => 'Matthew Braithwaite <matt@braithwaite.net>',
+ "daniel" => 'Daniel Stenberg <daniel@haxx.se>',
+ "mmurphy" => 'Mark Murphy <mmurphy@collab.net>',
+ "cmpilato" => 'C. Michael Pilato <cmpilato@collab.net>',
+ "kevin" => 'Kevin Pilch-Bisson <kevin@pilch-bisson.net>',
+ "philip" => 'Philip Martin <philip@codematters.co.uk>',
+ "jerenkrantz" => 'Justin Erenkrantz <jerenkrantz@apache.org>',
+ "rooneg" => 'Garrett Rooney <rooneg@electricjellyfish.net>',
+ "bcollins" => 'Ben Collins <bcollins@debian.org>',
+ "blair" => 'Blair Zajac <blair@orcaware.com>',
+ "striker" => 'Sander Striker <striker@apache.org>',
+ "XelaRellum" => 'Alexander Mueller <alex@littleblue.de>',
+ "yoshiki" => 'Yoshiki Hayashi <yoshiki@xemacs.org>',
+ "david" => 'David Summers <david@summersoft.fay.ar.us>',
+ "rassilon" => 'Bill Tutt <rassilon@lyra.org>',
+ "kbohling" => 'Kirby C. Bohling <kbohling@birddog.com>',
+ "breser" => 'Ben Reser <ben@reser.org>',
+ "bliss" => 'Tobias Ringstrom <tobias@ringstrom.mine.nu>',
+ "dionisos" => 'Erik Huelsmann <e.huelsmann@gmx.net>',
+ "josander" => 'Jostein Andersen <jostein@josander.net>',
+ "julianfoad" => 'Julian Foad <julianfoad@btopenworld.com>',
+ "clkao" => 'Chia-Liang Kao <clkao@clkao.org>',
+ "xsteve" => 'Stefan Reichör <reichoer@web.de>',
+ "mbk" => 'Mark Benedetto King <mbk@lowlatency.com>',
+ "patrick" => 'Patrick Mayweg <mayweg@qint.de>',
+ "jrepenning" => 'Jack Repenning <jrepenning@collab.net>',
+ "epg" => 'Eric Gillespie <epg@pretzelnet.org>',
+ "dwhedon" => 'David Kimdon <David_Kimdon@alumni.hmc.edu>',
+ "djh" => 'D.J. Heap <dj@shadyvale.net>',
+ "mprice" => 'Michael Price <mprice@atl.lmco.com>',
+ "jszakmeister" => 'John Szakmeister <john@szakmeister.net>',
+ "bdenny" => 'Brian Denny <brian@briandenny.net>',
+ "rey4" => 'Russell Yanofsky <rey4@columbia.edu>',
+ "maxb" => 'Max Bowsher <maxb@ukf.net>',
+ "dlr" => 'Daniel Rall <dlr@finemaltcoding.com>',
+ "jaa" => 'Jani Averbach <jaa@iki.fi>',
+ "pll" => 'Paul Lussier <p.lussier@comcast.net>',
+ "shlomif" => 'Shlomi Fish <shlomif@vipe.technion.ac.il>',
+ "jpieper" => 'Josh Pieper <jpieper@andrew.cmu.edu>',
+ "dimentiy" => 'Dmitriy O. Popkov <dimentiy@dimentiy.info>',
+ "kellin" => 'Shamim Islam <files@poetryunlimited.com>',
+ "sergeyli" => 'Sergey A. Lipnevich <sergey@optimaltec.com>',
+ "kraai" => 'Matt Kraai <kraai@alumni.cmu.edu>',
+ "ballbach" => 'Michael Ballbach <ballbach@rten.net>',
+ "kon" => 'Kalle Olavi Niemitalo <kon@iki.fi>',
+ "knacke" => 'Kai Nacke <kai.nacke@redstar.de>',
+ "gthompson" => 'Glenn A. Thompson <gthompson@cdr.net>',
+ "jespersm" => 'Jesper Steen Møller <jesper@selskabet.org>',
+ "naked" => 'Nuutti Kotivuori <naked@iki.fi>',
+ "niemeyer" => 'Gustavo Niemeyer <niemeyer@conectiva.com>',
+ "trow" => 'Jon Trowbridge <trow@ximian.com>',
+ "mmacek" => 'Marko Macek <Marko.Macek@gmx.net>',
+ "zbrown" => 'Zack Brown <zbrown@tumblerings.org>',
+ "morten" => 'Morten Ludvigsen <morten@2ps.dk>',
+ "fmatias" => 'Féliciano Matias <feliciano.matias@free.fr>',
+ "nsd" => 'Nick Duffek <nick@duffek.com>',
+);
+
+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 <<LOCAL;
+;; Local Variables:
+;; coding: utf-8
+;; End:
+LOCAL
+
+1;