LWN.net Logo

lk-changelog.pl 0.167

From:  Matthias Andree <matthias.andree@gmx.de>
To:  torvalds@osdl.org, marcelo@conectiva.com.br
Subject:  lk-changelog.pl 0.167
Date:  Sun, 31 Aug 2003 16:17:28 +0200 (CEST)
Cc:  linux-kernel@vger.kernel.org, matthias.andree@gmx.de

This is a semi-automatic announcement.

lk-changelog.pl aka. shortlog version 0.167 has been released.

This script is used by Linus and Marcelo to rearrange and reformat BK
ChangeSet logs into a more human-readable format, and the official
repository is bk://kernel.bkbits.net/torvalds/tools/

As the script has grown large, this mail only contains a diff against
the last released version.

You can always download the full script and GPG signatures from
http://mandree.home.pages.de/linux/kernel/

My thanks go to Vitezslav Samel who has spent a lot of time on digging
out the real names for addresses sending in BK ChangeSets.

Note that your mailer must be MIME-capable to save this mail properly,
because it is in the "quoted-printable" encoding.

= <- if you see just an equality sign, but no "3D", your mailer is fine.
= <- if you see 3D on this line, then upgrade your mailer or pipe this mail
= <- into metamail.

-- 
A sh script on behalf of Matthias Andree
-------------------------------------------------------------------------
Changes since last release:

----------------------------
revision 0.167
date: 2003/08/31 14:08:56;  author: emma;  state: Exp;  lines: +16 -4
ADD: --selftest now checks for non-obfuscated addresses
FIX: 1 address (wasn't obfuscated)
REMOVE: 1 address (didn't contain domain part)
----------------------------
revision 0.166
date: 2003/08/31 14:05:04;  author: emma;  state: Exp;  lines: +110 -10
SECURITY: fix obfuscation of unknown addresses in terse/oneline modes
ADD: Add 9 new addresses.
ADD: Implement --mode=fixup to postprocess this script's output,
     replacing addresses by names (useful after updates of this script)
DOC: add empty line before =head1 NAME to fix pod2html output.
DOC: document --mode options in man page.
----------------------------
revision 0.165
date: 2003/08/29 11:56:43;  author: vita;  state: Exp;  lines: +5 -1
1 new address
----------------------------
revision 0.164
date: 2003/08/27 13:34:29;  author: vita;  state: Exp;  lines: +5 -1
1 new address
----------------------------
revision 0.163
date: 2003/08/26 10:09:13;  author: vita;  state: Exp;  lines: +10 -3
4 new addresses; fix Bryan O'Sullivan's regexp
----------------------------
revision 0.162
date: 2003/08/26 00:01:23;  author: emma;  state: Exp;  lines: +5 -2
Fix typo in @addresses_handled_in_regexp, Bryan O'Sullivan's address got hosed.
----------------------------
revision 0.161
date: 2003/08/25 23:56:43;  author: emma;  state: Exp;  lines: +7 -2
Bryan O'Sullivan sent a notice about the other addresses he might be using.
----------------------------
revision 0.160
date: 2003/08/24 10:47:13;  author: emma;  state: Exp;  lines: +5 -1
Merge one mapping from Linus.
=============================================================================
Index: lk-changelog.pl
===================================================================
RCS file: /var/CVS/lk-changelog/lk-changelog.pl,v
retrieving revision 0.160
retrieving revision 0.167
diff -u -r0.160 -r0.167
--- lk-changelog.pl	24 Aug 2003 10:47:13 -0000	0.160
+++ lk-changelog.pl	31 Aug 2003 14:08:56 -0000	0.167
@@ -8,7 +8,7 @@
 #			Tomas Szepe <szepe@pinerecords.com>
 #			Vitezslav Samel <samel@mail.cz>
 #
-# $Id: lk-changelog.pl,v 0.160 2003/08/24 10:47:13 emma Exp $
+# $Id: lk-changelog.pl,v 0.167 2003/08/31 14:08:56 emma Exp $
 # ----------------------------------------------------------------------
 # Distribution of this script is permitted under the terms of the
 # GNU General Public License (GNU GPL) v2.
@@ -59,6 +59,9 @@
 # customize the following line to change the indentation of the change
 # lines, $indent1 is used for the first line of an entry, $indent for
 # all subsequent lines. $indent is auto-generated from $indent1.
+#
+# WARNING: $indent1 and $indent MUST NOT contain characters that are
+# special in a regular expression!
 my $indent1 = "  o ";
 my $indent  = " " x length($indent1);
 # change this to enable some debugging stuff:
@@ -68,6 +71,7 @@
 # Perl syntax magic here, "=>" is equivalent to ","
 my @addrregexps = (
 [ 'alan@[^.]+\.swansea\.linux\.org\.uk' => 'Alan Cox', ],
+[ 'bos@([^.]+\.)?serpentine\.com' => 'Bryan O\'Sullivan', ],
 [ 'davem@[^.]+\.ninka\.net' => 'David S. Miller', ],
 [ 'kuznet@[^.]+\.inr\.ac\.ru' => 'Alexey Kuznetsov', ],
 [ 'torvalds@([^.]+\.)?transmeta\.com' => 'Linus Torvalds', ],
@@ -94,6 +98,8 @@
 my @addresses_handled_in_regexp = (
 'alan:hraefn.swansea.linux.org.uk' => 'Alan Cox',
 'alan:irongate.swansea.linux.org.uk' => 'Alan Cox',
+'bos:camp4.serpentine.com' => 'Bryan O\'Sullivan',
+'bos:serpentine.com' => 'Bryan O\'Sullivan',
 'davem:cheetah.ninka.net' => 'David S. Miller',
 'davem:nuts.ninka.net' => 'David S. Miller',
 'davem:pizda.ninka.net' => 'David S. Miller', # guessed
@@ -178,6 +184,7 @@
 'alfre:ibd.es' => 'Alfredo Sanjuán',
 'ambx1:com.rmk.(none)' => 'Adam Belay',
 'ambx1:neo.rr.com' => 'Adam Belay',
+'amir.noam:intel.com' => 'Amir Noam',
 'amunoz:vmware.com' => 'Alberto Munoz',
 'andersen:codepoet.org' => 'Erik Andersen',
 'andersg:0x63.nu' => 'Anders Gustafsson',
@@ -255,7 +262,6 @@
 'bmatheny:purdue.edu' => 'Blake Matheny', # google
 'bombe:informatik.tu-muenchen.de' => 'Andreas Bombe',
 'borisitk:fortunet.com' => 'Boris Itkis', # by Kristian Peters
-'bos:camp4.serpentine.com' => 'Bryan O\'Sullivan',
 'braam:clusterfs.com' => 'Peter Braam',
 'brett:bad-sports.com' => 'Brett Pemberton',
 'brihall:pcisys.net' => 'Brian Hall', # google
@@ -324,6 +330,7 @@
 'ctindel:cup.hp.com' => 'Chad N. Tindel',
 'cubic:miee.ru' => 'Ruslan U. Zakirov',
 'cw:f00f.org' => 'Chris Wedgwood',
+'cw:sgi.com' => 'Chris Wedgwood',
 'cweidema:indiana.edu' => 'Christoph Weidemann',
 'cwf:sgi.com' => 'Charles Fumuso',
 'cyeoh:samba.org' => 'Christopher Yeoh',
@@ -465,6 +472,7 @@
 'fubar:us.ibm.com' => 'Jay Vosburgh',
 'fw:deneb.enyo.de' => 'Florian Weimer', # lbdb
 'fzago:austin.rr.com' => 'Frank Zago', # google
+'gaa:ulticom.com' => 'Gary Algier', # google
 'ganadist:nakyup.mizi.com' => 'Cha Young-Ho',
 'gandalf:netfilter.org' => 'Martin Josefsson',
 'gandalf:wlug.westbo.se' => 'Martin Josefsson',
@@ -547,6 +555,7 @@
 'ianw:gelato.unsw.edu.au' => 'Ian Wienand', # lbdb
 'ica2_ts:csv.ica.uni-stuttgart.de' => 'Thiemo Seufer', # google
 'ilmari:ilmari.org' => 'Dagfinn Ilmari Mannsåker',
+'inaky.perez-gonzalez:intel.com' => 'Iñaky Pérez-González', # LK 20030829
 'info:usblcd.de' => 'Adams IT Services',
 'ink:jurassic.park.msu.ru' => 'Ivan Kokshaysky',
 'ink:ru.rmk.(none)' => 'Ivan Kokshaysky',
@@ -593,6 +602,7 @@
 'jbourne:hardrock.org' => 'James Bourne',
 'jcdutton:users.sourceforge.net' => 'James Courtier-Dutton',
 'jdavid:farfalle.com' => 'David Ruggiero',
+'jdewand:redhat.com' => 'Julie DeWandel',
 'jdike:jdike.wstearns.org' => 'Jeff Dike',
 'jdike:karaya.com' => 'Jeff Dike',
 'jdike:uml.karaya.com' => 'Jeff Dike',
@@ -781,6 +791,7 @@
 'mac:melware.de' => 'Armin Schindler',
 'macro:ds2.pg.gda.pl' => 'Maciej W. Rozycki',
 'makisara:abies.metla.fi' => 'Kai Makisara',
+'malte.d:gmx.net' => 'Malte Doersam', # google
 'manand:us.ibm.com' => 'Mala Anand',
 'maneesh:in.ibm.com' => 'Maneesh Soni',
 'manfred:colorfullife.com' => 'Manfred Spraul',
@@ -809,6 +820,7 @@
 'martin:bruli.net' => 'Martin Brulisauer',
 'martin:mdiehl.de' => 'Martin Diehl',
 'martin:meltin.net' => 'Martin Schwenke',
+'masanari.iida:hp.com' => 'Masanari Iida', # lbdb
 'mashirle:us.ibm.com' => 'Shirley Ma',
 'mason:suse.com' => 'Chris Mason',
 'mathieu:newview.com' => 'Mathieu Chouquet-Stringer',
@@ -862,6 +874,7 @@
 'mlang:delysid.org' => 'Mario Lang', # google
 'mlindner:syskonnect.de' => 'Mirko Lindner',
 'mlocke:mvista.com' => 'Montavista Software, Inc.',
+'mmagallo:debian.org' => 'Marcelo E. Magallon',
 'mmcclell:bigfoot.com' => 'Mark McClelland',
 'mochel:geena.pdx.osdl.net' => 'Patrick Mochel',
 'mochel:osdl.org' => 'Patrick Mochel',
@@ -872,6 +885,7 @@
 'mostrows:speakeasy.net' => 'Michal Ostrowski',
 'mostrows:watson.ibm.com' => 'Michal Ostrowski',
 'mporter:cox.net' => 'Matt Porter',
+'mporter:kernel.crashing.org' => 'Matt Porter',
 'mrr:nexthop.com' => 'Mathew Richardson',
 'msdemlei:cl.uni-heidelberg.de' => 'Markus Demleitner',
 'msw:redhat.com' => 'Matt Wilson',
@@ -903,10 +917,10 @@
 'nmiell:attbi.com' => 'Nicholas Miell',
 'nobita:t-online.de' => 'Andreas Busch',
 'nstraz:sgi.com' => 'Nathan Straz',
+'ntfs:flatcap.org' => 'Richard Russon', # lbdb
 'okir:suse.de' => 'Olaf Kirch', # lbdb
 'okurth:gmx.net' => 'Oliver Kurth',
 'olaf.dietsche#list.linux-kernel:t-online.de' => 'Olaf Dietsche',
-'olaf.dietsche' => 'Olaf Dietsche',
 'oleg:tv-sign.ru' => 'Oleg Nesterov',
 'olh:suse.de' => 'Olaf Hering',
 'oliendm:us.ibm.com' => 'Dave Olien',
@@ -992,7 +1006,7 @@
 'quinlan:transmeta.com' => 'Daniel Quinlan',
 'quintela:mandrakesoft.com' => 'Juan Quintela',
 'r.a.mercer:blueyonder.co.uk' => 'Adam Mercer',
-'r.e.wolff:bitwizard.nl' => 'Rogier Wolff', # lbdbq
+'r.e.wolff:bitwizard.nl' => 'Rogier Wolff', # lbdb
 'ralf:dea.linux-mips.net' => 'Ralf Bächle',
 'ralf:linux-mips.org' => 'Ralf Bächle',
 'ralphs:org.rmk.(none)' => 'Ralph Siemsen',
@@ -1059,6 +1073,7 @@
 'rth:twiddle.net' => 'Richard Henderson',
 'rth:vsop.sfbay.redhat.com' => 'Richard Henderson',
 'rui.sousa:laposte.net' => 'Rui Sousa',
+'russell_d_cagle:mindspring.com' => 'Russell Cagle', # google
 'rusty:linux.co.intel.com' => 'Rusty Lynch',
 'rusty:rustcorp.com.au' => 'Rusty Russell',
 'rvinson:mvista.com' => 'Randy Vinson',
@@ -1103,6 +1118,7 @@
 'shmulik.hen:intel.com' => 'Shmulik Hen',
 'silicon:falcon.sch.bme.hu' => 'Szilárd Pásztor', # google
 'simonb:lipsyncpost.co.uk' => 'Simon Burley',
+'skewer:terra.com.br' => 'Marcelo Abreu',
 'skip.ford:verizon.net' => 'Skip Ford',
 'skyrelighten:yahoo.co.kr' => 'Donggyoo Lee',
 'sl:lineo.com' => 'Stuart Lynne',
@@ -1140,6 +1156,7 @@
 'steve:chygwyn.com' => 'Steven Whitehouse',
 'steve:gw.chygwyn.com' => 'Steven Whitehouse',
 'steve:kbuxd.necst.nec.co.jp' => 'Steve Baur',
+'steved:redhat.com' => 'Steve Dickson',
 'stevef:linux.local' => 'Steve French', # guessed
 'stevef:smfhome1.austin.rr.com' => 'Steve French',
 'stevef:stevef95.austin.ibm.com' => 'Steve French',
@@ -1174,6 +1191,7 @@
 'thockin:sun.com' => 'Tim Hockin',
 'thomas:bender.thinknerd.de' => 'Thomas Walpuski',
 'thomas:osterried.de' => 'Thomas Osterried',
+'thomas:winischhofer.net' => 'Thomas Winischhofer', # whois
 'thomr9am:ss1000.ms.mff.cuni.cz' => 'Rudo Thomas',
 'thornber:sistina.com' => 'Joe Thornber',
 'thunder:ngforever.de' => 'Thunder From The Hill',
@@ -1219,6 +1237,7 @@
 'viro:math.psu.edu' => 'Alexander Viro',
 'viro:parcelfarce.linux.theplanet.co.uk' => 'Alexander Viro',
 'viro:www.linux.org.uk' => 'Alexander Viro',
+'vmlinuz386:yahoo.com.ar' => 'Gerardo Exequiel Pozzi', # lbdb
 'vnourval:tcs.hut.fi' => 'Ville Nuorvala',		# Can't spell his own login?
 'vnuorval:tcs.hut.fi' => 'Ville Nuorvala',
 'vojta:math.berkeley.edu' => 'Paul Vojta',
@@ -1261,6 +1280,7 @@
 'wstinson:wanadoo.fr' => 'William Stinson',
 'xavier.bru:bull.net' => 'Xavier Bru',
 'xkaspa06:stud.fee.vutbr.cz' => 'Tomas Kasparek',
+'xose:wanadoo.es' => 'Xose Vazquez Perez', # lbdb
 'ya:slamail.org' => 'Yaacov Akiba Slama',
 'yinah:couragetech.com.cn' => 'Yin Aihua',
 'yokota:netlab.is.tsukuba.ac.jp' => 'Yokota Hiroshi',
@@ -1278,7 +1298,7 @@
 'zwane:linux.realnet.co.sz' => 'Zwane Mwaikambo',
 'zwane:linuxpower.ca' => 'Zwane Mwaikambo',
 'zwane:mwaikambo.name' => 'Zwane Mwaikambo',
-'~~~~~~thisentrylastforconvenience~~~~~' => 'Cesar Brutus Anonymous'
+'~~~~~~thisentrylast:forconvenience~~~~~' => 'Cesar Brutus Anonymous'
 );
 
 sub doprint(\%@ ); # forward declaration
@@ -1290,6 +1310,7 @@
 # BK_USER,BK_HOST tuple
 sub rmap_address($) {
     my $in = shift;
+    confess "empty string passed to rmap_address" unless $in;
     my $key = lc $in;
     # try hash lookup first, return result if any
     if (defined $addresses{obfuscate $key}) {
@@ -1341,13 +1362,20 @@
 my %table =
   (
    'oneline' => { 'index' => \&get_name,
-		  'print' => \&print_oneline },
+		  'print' => \&print_oneline,
+		  'parse' => \&parse_file },
    'terse'   => { 'index' => \&get_name,
-		  'print' => \&print_terse },
+		  'print' => \&print_terse,
+		  'parse' => \&parse_file },
    'grouped' => { 'index' => \&get_author,
-		  'print' => \&print_grouped },
+		  'print' => \&print_grouped,
+		  'parse' => \&parse_file },
    'full'    => { 'index' => \&get_author,
-		  'print' => \&print_full }
+		  'print' => \&print_full,
+		  'parse' => \&parse_file },
+   'fixup'   => { 'index' => sub { },
+		  'print' => sub { },
+		  'parse' => \&fixup_file }
   );
 
 # temp store
@@ -1576,6 +1604,57 @@
   return join(" ", @a);
 }
 
+sub fixup_file(\%$$ ) {
+# arguments: %log hash
+#            file name
+#            file handle (IO::Handle or IO::File)
+  croak unless wantarray;
+  my $log = shift;
+  my $fn = shift;
+  my $fh = shift;
+  my $nre = '\S+[:@]\S+';
+
+  while($_ = $fh -> getline) {
+    chomp;
+    # grouped/full mode
+    if (/^<($nre)>:$/) {
+      my $a = $1;
+      if ($a =~ /:/) { $a = unveil($a); }
+      my $name = rmap_address($a);
+      if ($name ne $a) { # found name
+	print "$name:\n";
+      } else {
+	print "$_\n";
+      }
+      next;
+    }
+    # oneline/terse mode, unswapped
+    if (/\s+\(($nre)\)$/) {
+      my $a = $1;
+      if ($a =~ /:/) { $a = unveil($a); }
+      my $name = rmap_address($a);
+      if ($name ne $a) { # found name
+	s/\($nre\)$/$name/;
+      }
+      print "$_\n";
+      next;
+    }
+    # oneline/terse mode, swapped
+    if (/^$indent1($nre): /) {
+      my $a = $1;
+      if ($a =~ /:/) { $a = unveil($a); }
+      my $name = rmap_address($a);
+      if ($name ne $a) { # found name
+	s/^$indent1$nre:/$indent1$name:/;
+      }
+      print "$_\n";
+      next;
+    }
+    print "$_\n";
+  }
+  return ();
+}
+
 # Read a file and parse it into the %log hash.
 sub parse_file(\%$$ ) {
 # arguments: %log hash
@@ -1641,7 +1720,9 @@
 	} else {
 	  $author = $name . ' <' . $address . '>';
 	}
-      } else {
+      } else { # $havename
+	# must obfuscate name since it contains an address still
+	$name = obfuscate $name;
 	$author = '<' . $address . '>';
       }
       $first = 1;
@@ -1704,6 +1785,11 @@
 
 sub selftest() {
     my $rc = 0;
+    foreach my $i (keys %addresses) {
+	if ($i eq unveil $i) {
+	    print STDERR "Warning: address '$i' is not obfuscated!\n";
+	}
+    }
     foreach my $address (unveil keys %addresses) {
 	foreach my $ar (@addrregexps) {
 	    if ($address =~ m/$ar->[0]/) {
@@ -1797,7 +1883,8 @@
 sub doprint(\%@ ) {
   my $log = shift;
   print join("\n", @_), "\n" or write_error();
-  $table{$opt{mode}}->{print}->($log);
+  my $f_print = $table{$opt{mode}}->{'print'};
+  if (defined $f_print) { &$f_print($log); }
 }
 
 # --------------------------------------------------------------------
@@ -1835,7 +1922,7 @@
     my $fh = new IO::File;
     $fh->open($fn, "r")
       or die "cannot open \"$fn\": $!\nAborting";
-    push @prolog, parse_file(%log, $fn, $fh);
+    push @prolog, &{$table{$opt{'mode'}}->{'parse'}}(\%log, $fn, $fh);
     if (not $opt{merge}) {
       doprint(%log, @prolog);
       undef %log;
@@ -1852,7 +1939,7 @@
   my $fh = new IO::Handle;
   $fh->fdopen(fileno(STDIN), "r")
     or die "cannot open stdin: $!\nAborting";
-  @prolog = parse_file(%log, "stdin", $fh);
+  @prolog = &{$table{$opt{'mode'}}->{'parse'}}(\%log, "stdin", $fh);
   doprint(%log, @prolog);
 }
 
@@ -1869,6 +1956,34 @@
 __END__
 # --------------------------------------------------------------------
 # $Log: lk-changelog.pl,v $
+# Revision 0.167  2003/08/31 14:08:56  emma
+# ADD: --selftest now checks for non-obfuscated addresses
+# FIX: 1 address (wasn't obfuscated)
+# REMOVE: 1 address (didn't contain domain part)
+#
+# Revision 0.166  2003/08/31 14:05:04  emma
+# SECURITY: fix obfuscation of unknown addresses in terse/oneline modes
+# ADD: Add 9 new addresses.
+# ADD: Implement --mode=fixup to postprocess this script's output,
+#      replacing addresses by names (useful after updates of this script)
+# DOC: add empty line before =head1 NAME to fix pod2html output.
+# DOC: document --mode options in man page.
+#
+# Revision 0.165  2003/08/29 11:56:43  vita
+# 1 new address
+#
+# Revision 0.164  2003/08/27 13:34:29  vita
+# 1 new address
+#
+# Revision 0.163  2003/08/26 10:09:13  vita
+# 4 new addresses; fix Bryan O'Sullivan's regexp
+#
+# Revision 0.162  2003/08/26 00:01:23  emma
+# Fix typo in @addresses_handled_in_regexp, Bryan O'Sullivan's address got hosed.
+#
+# Revision 0.161  2003/08/25 23:56:43  emma
+# Bryan O'Sullivan sent a notice about the other addresses he might be using.
+#
 # Revision 0.160  2003/08/24 10:47:13  emma
 # Merge one mapping from Linus.
 #
@@ -2415,6 +2530,7 @@
 # Only consider e-mail addresses that are left-justified.
 # Suggested by Greg Kroah-Hartman <greg@kroah.com>.
 #
+
 =head1 NAME
 
 lk-changelog.pl - Reformat BitKeeper ChangeLog for Linux Kernel
@@ -2461,6 +2577,27 @@
 =head1 DESCRIPTION
 
 Summarizes or reformats BitKeeper ChangeLogs for Linux Kernel 2.X.
+
+--mode options are:
+
+=over
+
+=item oneline - a one-line-per-change format (supports --swap)
+
+=item terse - a shortened one-paragraph-per-change format (supports --swap)
+
+=item ordered - shortened changes grouped by sorted author
+
+=item full - full changes grouped by sorted author
+
+=item fixup - a special mode (since 0.166)
+
+This mode replaces addresses by names if the addresses are known. Useful
+to postprocess this script's output after new addresses have been added.
+Besides addresses that are replaced by names, the output is the verbatim
+input. No ordering or grouping takes place.
+
+=back
 
 =head1 ENVIRONMENT
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Copyright © 2003, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds