aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-02-28 17:32:13 -0500
committerMichael Mann <mmann78@netscape.net>2016-03-03 18:28:32 +0000
commit8435145b1fe1bcdc93bc48e26346739e9962686f (patch)
tree7775e36d4d5654cb04b1427701ea2d6b48e62f66 /tools
parentb70d1d7e14801754baee6af215b2162af38db211 (diff)
Create perl script to append existing AUTHORS file with information from git log.
new AUTHORS file can be created with "gen-authors" build parameter The "original" AUTHORS file has been fixed up to be kind to parsers (so no one gets excluded) and renamed to AUTHORS.src. This preserves the features authors worked on. For authors that didn't list features, they may be converted to just getting information from git. Change-Id: I9a4c4091e229f7f5e1c46d864527a98c1278e451 Reviewed-on: https://code.wireshark.org/review/14231 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'tools')
-rw-r--r--tools/generate_authors.pl197
1 files changed, 197 insertions, 0 deletions
diff --git a/tools/generate_authors.pl b/tools/generate_authors.pl
new file mode 100644
index 0000000000..2d14c35a2d
--- /dev/null
+++ b/tools/generate_authors.pl
@@ -0,0 +1,197 @@
+#!/usr/bin/perl
+
+my $debug = 0;
+# 0: off
+# 1: specific debug
+# 2: full debug
+
+#
+# Generate the AUTHORS file combining existing AUTHORS file with
+# git commit log.
+#
+# Usage: generate_authors.pl <original AUTHORS file> <output of git shortlog>
+
+#
+# Copyright 2016 Michael Mann (see AUTHORS file)
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+use warnings;
+use strict;
+use Getopt::Long;
+
+my $state = "";
+my %contributors = ();
+my $is_contributing = 0;
+my $crlf_find = "\n";
+my $crlf_replace = "\r\n";
+
+my $header = "
+
+Original Author
+-------- ------
+Gerald Combs <gerald[AT]wireshark.org>
+
+
+";
+
+my $trailer = "
+
+Acknowledgements
+------------
+Dan Lasley <dlasley[AT]promus.com> gave permission for his
+dumpit() hex-dump routine to be used.
+
+Mattia Cazzola <mattiac[AT]alinet.it> provided a patch to the
+hex dump display routine.
+
+We use the exception module from Kazlib, a C library written by
+Kaz Kylheku <kaz[AT]ashi.footprints.net>. Thanks go to him for
+his well-written library. The Kazlib home page can be found at
+http://users.footprints.net/~kaz/kazlib.html
+
+We use Lua BitOp, written by Mike Pall, for bitwise operations
+on numbers in Lua. The Lua BitOp home page can be found at
+http://bitop.luajit.org/
+
+Henrik Brix Andersen <brix[AT]gimp.org> gave permission for his
+webbrowser calling routine to be used.
+
+Christophe Devine <c.devine[AT]cr0.net> gave permission for his
+SHA1 routines to be used.
+
+snax <snax[AT]shmoo.com> gave permission to use his(?) weak key
+detection code from Airsnort.
+
+IANA gave permission for their port-numbers file to be used.
+
+We use the natural order string comparison algorithm, written by
+Martin Pool <mbp[AT]sourcefrog.net>.
+
+Emanuel Eichhammer <support[AT]qcustomplot.com> granted permission
+to use QCustomPlot.
+";
+
+my $git_log_text = "
+From git log
+---------------
+";
+
+# Perl trim function to remove whitespace from the start and end of the string
+sub trim($)
+{
+ my $string = shift;
+ $string =~ s/^\s+//;
+ $string =~ s/\s+$//;
+ return $string;
+}
+
+sub parse_author_name {
+ my $full_name = $_[0];
+
+ if ($full_name =~ /^([\w\.\-\'\x80-\xff]+(\s*[\w+\.\-\'\x80-\xff])*)\s+<([^>]*)>/) {
+ #Make an exception for Gerald because he's part of the header
+ if ($3 ne "gerald[AT]wireshark.org") {
+ $contributors{$3} = $1;
+ print "$full_name\n";
+ }
+ } elsif ($full_name =~ /^([\w\.\-\'\x80-\xff]+(\s*[\w+\.\-\'\x80-\xff])*)\s+\(/) {
+ $contributors{"<no_email>"} = $1;
+ print "$full_name\n";
+ }
+}
+
+sub parse_git_name {
+ my $full_name = $_[0];
+ my $name;
+ my $find = "\@";
+ my $replace = "[AT]";
+ my $email;
+
+ if ($full_name =~ /^([^<]*)\s*<([^>]*)>/) {
+ $name = $1;
+ #Convert real email address to "spam proof" one
+ $email = $2;
+ $email =~ s/$find/$replace/g;
+
+ if (!exists($contributors{ $email })) {
+ #Make an exception for Gerald because he's part of the header
+ if ($email ne "gerald[AT]wireshark.org") {
+ print "$name\t\t$email\r\n";
+ }
+ }
+ }
+}
+
+# ---------------------------------------------------------------------
+#
+# MAIN
+#
+
+$header =~ s/$crlf_find/$crlf_replace/g;
+print $header;
+
+open( my $author_fh, '<', $ARGV[0] ) or die "Can't open $ARGV[0]: $!";
+while ( my $line = <$author_fh> ) {
+ chomp $line;
+
+ last if ($line =~ "Acknowledgements");
+
+ if ($line =~ "Contributors") {
+ $is_contributing = 1;
+ } elsif ($is_contributing == 0) {
+ next;
+ }
+
+ if ($line =~ /([^\{]*)\{/) {
+ parse_author_name($line);
+ $state = "s_in_bracket";
+ } elsif ($state eq "s_in_bracket") {
+ if ($line =~ /([^\}]*)\}/) {
+ print "$line\n";
+ $state = "";
+ } else {
+ print "$line\n";
+ }
+ } elsif ($line =~ /</) {
+ parse_author_name($line);
+ } elsif ($line =~ "(e-mail address removed at contributor's request)") {
+ parse_author_name($line);
+ } else {
+ print "$line\n";
+ }
+}
+close $author_fh;
+
+$git_log_text =~ s/$crlf_find/$crlf_replace/g;
+print $git_log_text;
+
+open( my $git_author_fh, '<', $ARGV[1] ) or die "Can't open $ARGV[1]: $!";
+
+while ( my $git_line = <$git_author_fh> ) {
+ chomp $git_line;
+
+ parse_git_name($git_line);
+}
+close $git_author_fh;
+
+$trailer =~ s/$crlf_find/$crlf_replace/g;
+print $trailer;
+
+__END__