Deal with authorship properly, in a future-sustainable fashion
Peter Rabbitson [Mon, 22 Sep 2014 10:35:38 +0000 (12:35 +0200)]
This module is arguably one of the most successful collaborative projects on
CPAN. Make it known to the world by introducing a clear canonical source of
authorship metadata.

I have been holding off jumping on the "contributors from git" bandwagon
because of multiple issues

- Not every contribution results in a direct, attributtable commit
- We already had an extensive contributor list, much larger than the shortlog
- Loss of ircnicks (a fine tradition started in 266bdcc3)

So this commit does the proverbial bullet-biting and introduces *proper*
handling of all the ins and outs, including author-mode (CI as well) tests
for proper attribution. As a side-effect we break a lot of the footer links,
to be fixed in next commit.

Btw as I write this `195 contributors made this library what it is today`...
Mind. Blown.

12 files changed:
.mailmap
AUTHORS
MANIFEST.SKIP
Makefile.PL
lib/DBIx/Class.pm
lib/DBIx/Class/Manual/Features.pod
maint/Makefile.PL.inc/12_authordeps.pl
maint/Makefile.PL.inc/21_set_meta.pl
maint/Makefile.PL.inc/53_autogen_pod.pl
maint/Makefile.PL.inc/54_autogen_README.pl [moved from maint/Makefile.PL.inc/52_autogen_README.pl with 86% similarity]
maint/gen_pod_authors [new file with mode: 0755]
xt/authors.t [new file with mode: 0644]

index 866b3cc..2164555 100644 (file)
--- a/.mailmap
+++ b/.mailmap
@@ -5,13 +5,16 @@
 # https://www.kernel.org/pub/software/scm/git/docs/git-shortlog.html#_mapping_authors
 
 Alexander Hartmaier <abraxxa@cpan.org>      <alexander.hartmaier@t-systems.at>
+Alexander Kuznetsov <acca@cpan.org>         <acca(at)cpan.org>
 Amiri Barksdale <amiribarksdale@gmail.com>  <amiri@metalabel.com>
 Andrew Rodland <andrew@cleverdomain.org>    <arodland@cpan.org>
 Arthur Axel "fREW" Schmidt                  <frioux@gmail.com>
-Brendan Byrd <Perl@ResonatorSoft.org>       <byrd.b@insightcom.com>
-Brendan Byrd <Perl@ResonatorSoft.org>       <GitHub@ResonatorSoft.org>
-Brendan Byrd <Perl@ResonatorSoft.org>       <perl@resonatorsoft.org>
+Ash Berlin <ash@cpan.org>                   <ash_github@firemirror.com>
+Brendan Byrd <perl@resonatorsoft.org>       <byrd.b@insightcom.com>
+Brendan Byrd <perl@resonatorsoft.org>       <GitHub@ResonatorSoft.org>
+Brendan Byrd <perl@resonatorsoft.org>       <Perl@ResonatorSoft.org>
 Brian Phillips <bphillips@cpan.org>         <bphillips@digitalriver.com>
+Christian Walde <walde.christian@gmail.com> <walde.christian@googlemail.com>
 Jess Robinson <castaway@desert-island.me.uk><no-email-available@dev.catalystframework.org>
 Dagfinn Ilmari Mannsåker <ilmari@ilmari.org><ilmari.mannsaker@net-a-porter.com>
 David Kamholz <dkamholz@cpan.org>           <davekam@pobox.com>
@@ -21,17 +24,22 @@ David Schmidt <mail@davidschmidt.at>        <davewood@gmx.at>
 Devin Austin <dhoss@cpan.org>               <devin.austin@gmail.com>
 Duncan Garland <Duncan.Garland@motortrak.com> <duncan@duncan-laptop.(none)>
 Felix Antonius Wilhelm Ostmann <sadrak@cpan.org>  <ostmann@sadraksaemp.intern4.websuche.de>
+Fitz Elliott <fitz.elliott@gmail.com>       <felliott@fiskur.org>
 Gerda Shank <gshank@cpan.org>               <gerda.shank@gmail.com>
 Gianni Ceccarelli <dakkar@thenautilus.net>  <gianni.ceccarelli@net-a-porter.com>
 Gordon Irving <goraxe@cpan.org>             <goraxe@goraxe.me.uk>
 Hakim Cassimally <osfameron@cpan.org>       <hakim@vm-participo.(none)>
+Jason M. Mills <jmmills@cpan.org>           <jmmills@cpan.org>
 Jonathan Chu <milki@rescomp.berkeley.edu>   <milki@rescomp.berkeley.edu>
 Jose Luis Martinez <jlmartinez@capside.com> <jlmartinez@capside.com>
 Matt Phillips <mattp@cpan.org>              <mphillips@oanda.com>
 Norbert Csongrádi <bert@cpan.org>           <bert@cpan.org>
 Peter Rabbitson <ribasushi@cpan.org>        <rabbit@viator.rabbit.us>
 Roman Filippov <romanf@cpan.org>            <moltar@moltar.net>
+Ronald J Kimball <rjk@tamias.net>           <rkimball@pangeamedia.com>
 Samuel Kaufman <sam@socialflow.com>         <sam@socialflow.com>
 Tim Bunce <Tim.Bunce@pobox.com>             <Tim.Bunce@ig.co.uk>
 Toby Corkindale <tjc@cpan.org>              <toby@dryft.net>
+Tommy Butler <tbutler.cpan.org@internetalias.net> <tommybutler@users.noreply.github.com>
+Ton Voon <ton.voon@opsview.com>             <ton.voon@opsera.com>
 Wallace Reis <wreis@cpan.org>               <wallace@reis.org.br>
diff --git a/AUTHORS b/AUTHORS
index d3352f0..b0f74ed 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
-abraxxa: Alexander Hartmaier <abraxxa@cpan.org>
+#
+#     The list of the awesome folks behind DBIx::Class
+#
+# This utf8-encoded file lists every code author and idea contributor
+# in alphabetical order
+#
+# Entry format (all elements optional, order is mandatory):
+#   (ircnick:) (name) (<email>)
+#
+#
+#    *** EVEN THOUGH FIELDS ARE OPTIONAL, COMMITTERS ARE QUITE ***
+#   *** STRONGLY URGED TO KEEP THIS LIST AS COMPLETE AS POSSIBLE ***
+#
+#             *** IN OTHER WORDS - DO NOT BE LAZY ***
+#
 
+abraxxa: Alexander Hartmaier <abraxxa@cpan.org>
 acca: Alexander Kuznetsov <acca@cpan.org>
-
 aherzog: Adam Herzog <adam@herzogdesigns.com>
-
 Alexander Keusch <cpan@keusch.at>
-
 alexrj: Alessandro Ranellucci <aar@cpan.org>
-
-alnewkirk: Al Newkirk <we@ana.im>
-
-amiri: Amiri Barksdale <amiri@metalabel.com>
-
+alnewkirk: Al Newkirk <github@alnewkirk.com>
+amiri: Amiri Barksdale <amiribarksdale@gmail.com>
 amoore: Andrew Moore <amoore@cpan.org>
-
 Andrew Mehta <Andrew@unitedgames.co.uk>
-
 andrewalker: Andre Walker <andre@andrewalker.net>
-
 andyg: Andy Grundman <andy@hybridized.org>
-
-ank: Andres Kievsky
-
+ank: Andres Kievsky <ank@ank.com.ar>
 arc: Aaron Crane <arc@cpan.org>
-
 arcanez: Justin Hunter <justin.d.hunter@gmail.com>
-
 ash: Ash Berlin <ash@cpan.org>
-
 bert: Norbert Csongrádi <bert@cpan.org>
-
 bfwg: Colin Newell <colin.newell@gmail.com>
-
 blblack: Brandon L. Black <blblack@gmail.com>
-
 bluefeet: Aran Deltac <bluefeet@cpan.org>
-
-bphillips: Brian Phillips <bphillips@cpan.org>
-
 boghead: Bryan Beeley <cpan@beeley.org>
-
+bphillips: Brian Phillips <bphillips@cpan.org>
 brd: Brad Davis <brd@FreeBSD.org>
-
+Brian Kirkbride <brian.kirkbride@deeperbydesign.com>
 bricas: Brian Cassidy <bricas@cpan.org>
-
 brunov: Bruno Vecchi <vecchi.b@gmail.com>
-
 caelum: Rafael Kitover <rkitover@cpan.org>
-
 caldrin: Maik Hentsche <maik.hentsche@amd.com>
-
-castaway: Jess Robinson
-
-claco: Christopher H. Laco
-
-clkao: CL Kao
-
-Ctrl-o L<http://ctrlo.com/>
-
-da5id: David Jack Olrik <djo@cpan.org>
-
+castaway: Jess Robinson <castaway@desert-island.me.uk>
+chorny: Alexandr Ciornii <alexchorny@gmail.com>
+claco: Christopher H. Laco <claco@cpan.org>
+clkao: CL Kao <clkao@clkao.org>
+Ctrl-O http://ctrlo.com/
+da5id: David Jack Olrik <david@olrik.dk>
+dams: Damien Krotkine <dams@cpan.org>
+dandv: Dan Dascalescu <ddascalescu+github@gmail.com>
 dariusj: Darius Jokilehto <dariusjokilehto@yahoo.co.uk>
-
-davewood: David Schmidt <davewood@gmx.at>
-
+davewood: David Schmidt <mail@davidschmidt.at>
 daxim: Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>
-
+dduncan: Darren Duncan <darren@darrenduncan.net>
 debolaz: Anders Nor Berle <berle@cpan.org>
-
 dew: Dan Thomas <dan@godders.org>
-
 dim0xff: Dmitry Latin <dim0xff@gmail.com>
-
 dkubb: Dan Kubb <dan.kubb-cpan@onautopilot.com>
-
 dnm: Justin Wheeler <jwheeler@datademons.com>
-
 dpetrov: Dimitar Petrov <mitakaa@gmail.com>
-
+dsteinbrunner: David Steinbrunner <dsteinbrunner@pobox.com>
 duncan_dmg: Duncan Garland <Duncan.Garland@motortrak.com>
-
 dwc: Daniel Westermann-Clark <danieltwc@cpan.org>
-
 dyfrgi: Michael Leuchtenburg <michael@slashhome.org>
-
 edenc: Eden Cardim <edencardim@gmail.com>
-
-Eligo L<http://eligo.co.uk/>
-
+Eligo http://eligo.co.uk/
 ether: Karen Etheridge <ether@cpan.org>
-
+evdb: Edmund von der Burg <evdb@ecclestoad.co.uk>
+faxm0dem: Fabien Wernli <cpan@faxm0dem.org>
 felliott: Fitz Elliott <fitz.elliott@gmail.com>
-
 freetime: Bill Moseley <moseley@hank.org>
-
 frew: Arthur Axel "fREW" Schmidt <frioux@gmail.com>
-
+gbjk: Gareth Kirwan <gbjk@thermeon.com>
+Getty: Torsten Raudssus <torsten@raudss.us>
 goraxe: Gordon Irving <goraxe@cpan.org>
-
 gphat: Cory G Watson <gphat@cpan.org>
-
-Grant Street Group L<http://www.grantstreet.com/>
-
+Grant Street Group http://www.grantstreet.com/
 groditi: Guillermo Roditi <groditi@cpan.org>
-
+gshank: Gerda Shank <gshank@cpan.org>
 guacamole: Fred Steinberg <fred.steinberg@gmail.com>
-
 Haarg: Graham Knop <haarg@haarg.org>
-
-hobbs: Andrew Rodland <arodland@cpan.org>
-
+hobbs: Andrew Rodland <andrew@cleverdomain.org>
+Ian Wells <ijw@cack.org.uk>
 idn: Ian Norton <i.norton@shadowcat.co.uk>
-
-ilmari: Dagfinn Ilmari MannsE<aring>ker <ilmari@ilmari.org>
-
+ilmari: Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
 initself: Mike Baas <mike@initselftech.com>
-
 ironcamel: Naveed Massjouni <naveedm9@gmail.com>
-
-jawnsy: Jonathan Yu <jawnsy@cpan.org>
-
 jasonmay: Jason May <jason.a.may@gmail.com>
-
+jawnsy: Jonathan Yu <jawnsy@cpan.org>
 jegade: Jens Gassmann <jens.gassmann@atomix.de>
-
 jeneric: Eric A. Miller <emiller@cpan.org>
-
-jesper: Jesper Krogh
-
+jesper: Jesper Krogh <jesper@krogh.cc>
+Jesse Sheidlower <jester@panix.com>
 jgoulah: John Goulah <jgoulah@cpan.org>
-
 jguenther: Justin Guenther <jguenther@cpan.org>
-
 jhannah: Jay Hannah <jay@jays.net>
-
 jmac: Jason McIntosh <jmac@appleseed-sc.com>
-
+jmmills: Jason M. Mills <jmmills@cpan.org>
 jnapiorkowski: John Napiorkowski <jjn1056@yahoo.com>
-
-jon: Jon Schutz <jjschutz@cpan.org>
-
 Joe Carlson <jwcarlson@lbl.gov>
-
+jon: Jon Schutz <jjschutz@cpan.org>
+Jordan Metzmeier <jmetzmeier@magazines.com>
 jshirley: J. Shirley <jshirley@gmail.com>
-
 kaare: Kaare Rasmussen
-
-konobi: Scott McWhirter
-
+kd: Kieren Diment <diment@gmail.com>
+konobi: Scott McWhirter <konobi@cpan.org>
+lejeunerenard: Sean Zellmer <sean@lejeunerenard.com>
 littlesavage: Alexey Illarionov <littlesavage@orionet.ru>
-
 lukes: Luke Saunders <luke.saunders@gmail.com>
-
 marcus: Marcus Ramberg <mramberg@cpan.org>
-
+mateu: Mateu X. Hunter <hunter@missoula.org>
+Matt LeBlanc <antirice@gmail.com>
+Matt Sickler <imMute@msk4.com>
 mattlaw: Matt Lawrence
-
 mattp: Matt Phillips <mattp@cpan.org>
-
 mdk: Mark Keating <m.keating@shadowcat.co.uk>
-
-mna: Maya
-
+melo: Pedro Melo <melo@simplicidade.org>
+metaperl: Terrence Brannon <metaperl@gmail.com>
 michaelr: Michael Reddick <michael.reddick@gmail.com>
-
 milki: Jonathan Chu <milki@rescomp.berkeley.edu>
-
 minty: Murray Walker <perl@minty.org>
-
 mithaldu: Christian Walde <walde.christian@gmail.com>
-
 mjemmeson: Michael Jemmeson <michael.jemmeson@gmail.com>
-
+mna: Maya
+mo: Moritz Onken <onken@netcubed.de>
+moltar: Roman Filippov <romanf@cpan.org>
+moritz: Moritz Lenz <moritz@faui2k3.org>
 mrf: Mike Francis <ungrim97@gmail.com>
-
+mst: Matt S. Trout <mst@shadowcat.co.uk>
 mstratman: Mark A. Stratman <stratman@gmail.com>
-
-ned: Neil de Carteret
-
+ned: Neil de Carteret <n3dst4@gmail.com>
 nigel: Nigel Metheringham <nigelm@cpan.org>
-
 ningu: David Kamholz <dkamholz@cpan.org>
-
 Nniuq: Ron "Quinn" Straight" <quinnfazigu@gmail.org>
-
 norbi: Norbert Buchmuller <norbi@nix.hu>
-
+nothingmuch: Yuval Kogman <nothingmuch@woobling.org>
 nuba: Nuba Princigalli <nuba@cpan.org>
-
 Numa: Dan Sully <daniel@cpan.org>
-
 oalders: Olaf Alders <olaf@wundersolutions.com>
-
+Olly Betts <olly@survex.com>
+osfameron: Hakim Cassimally <osfameron@cpan.org>
 ovid: Curtis "Ovid" Poe <ovid@cpan.org>
-
-oyse: E<Oslash>ystein Torget <oystein.torget@dnv.com>
-
-paulm: Paul Makepeace
-
-penguin: K J Cheetham
-
+oyse: Øystein Torget <oystein.torget@dnv.com>
+paulm: Paul Makepeace <paulm+pause@paulm.com>
+penguin: K J Cheetham <jamie@shadowcatsystems.co.uk>
 perigrin: Chris Prather <chris@prather.org>
-
-peter: Peter Collingbourne <peter@pcc.me.uk>
-
 Peter Siklósi <einon@einon.hu>
-
-Peter Valdemar ME<oslash>rch <peter@morch.com>
-
+Peter Valdemar Mørch <peter@morch.com>
+peter: Peter Collingbourne <peter@pcc.me.uk>
 phaylon: Robert Sedlacek <phaylon@dunkelheit.at>
-
 plu: Johannes Plunien <plu@cpan.org>
-
-pplu: Jose Luis Martinez <jlmartinez@capside.com>
-
 Possum: Daniel LeWarne <possum@cpan.org>
-
-quicksilver: Jules Bean
-
+pplu: Jose Luis Martinez <jlmartinez@capside.com>
+quicksilver: Jules Bean <jules@jellybean.co.uk>
+racke: Stefan Hornburg <racke@linuxia.de>
 rafl: Florian Ragwitz <rafl@debian.org>
-
 rainboxx: Matthias Dietrich <perl@rb.ly>
-
-Relequestual: Ben Hutton <relequestual@gmail.com>
-
 rbo: Robert Bohne <rbo@cpan.org>
-
 rbuels: Robert Buels <rmb32@cornell.edu>
-
 rdj: Ryan D Johnson <ryan@innerfence.com>
-
+Relequestual: Ben Hutton <relequestual@gmail.com>
+renormalist: Steffen Schwigon <schwigon@cpan.org>
 ribasushi: Peter Rabbitson <ribasushi@cpan.org>
-
 rjbs: Ricardo Signes <rjbs@cpan.org>
-
-robkinyon: Rob Kinyon <rkinyon@cpan.org>
-
+Robert Krimen <rkrimen@cpan.org>
 Robert Olson <bob@rdolson.org>
-
-moltar: Roman Filippov <romanf@cpan.org>
-
+robkinyon: Rob Kinyon <rkinyon@cpan.org>
+Roman Ardern-Corris <spam_in@3legs.com>
+ruoso: Daniel Ruoso <daniel@ruoso.com>
 Sadrak: Felix Antonius Wilhelm Ostmann <sadrak@cpan.org>
-
 sc_: Just Another Perl Hacker
-
+schwern: Michael G Schwern <mschwern@cpan.org>
+Scott R. Godin <webdragon.net@gmail.com>
 scotty: Scotty Allen <scotty@scottyallen.com>
-
 semifor: Marc Mims <marc@questright.com>
-
-SineSwiper: Brendan Byrd <bbyrd@cpan.org>
-
+Simon Elliott <cpan@browsing.co.uk>
+SineSwiper: Brendan Byrd <perl@resonatorsoft.org>
 skaufman: Samuel Kaufman <sam@socialflow.com>
-
 solomon: Jared Johnson <jaredj@nmgi.com>
-
 spb: Stephen Bennett <stephen@freenode.net>
-
 Squeeks <squeek@cpan.org>
-
+srezic: Slaven Rezic <slaven@rezic.de>
 sszabo: Stephan Szabo <sszabo@bigpanda.com>
-
 Stephen Peters <steve@stephenpeters.me>
-
+stonecolddevin: Devin Austin <dhoss@cpan.org>
 talexb: Alex Beamish <talexb@gmail.com>
-
 tamias: Ronald J Kimball <rjk@tamias.net>
-
 TBSliver: Tom Bloor <t.bloor@shadowcat.co.uk>
-
 teejay : Aaron Trevena <teejay@cpan.org>
-
 theorbtwo: James Mastros <james@mastros.biz>
-
+Thomas Kratz <tomk@cpan.org>
+timbunce: Tim Bunce <tim.bunce@pobox.com>
 Todd Lipcon
-
-Tom Hukins
-
-tonvoon: Ton Voon <tonvoon@cpan.org>
-
+Tom Hukins <tom@eborcom.com>
+tommy: Tommy Butler <tbutler.cpan.org@internetalias.net>
+tonvoon: Ton Voon <ton.voon@opsview.com>
 triode: Pete Gamache <gamache@cpan.org>
-
 typester: Daisuke Murase <typester@cpan.org>
-
+uree: Oriol Soriano <oriol.soriano@capside.com>
+uwe: Uwe Voelker <uwe@uwevoelker.de>
 victori: Victor Igumnov <victori@cpan.org>
-
-wdh: Will Hawes
-
+wdh: Will Hawes <wdhawes@gmail.com>
 wesm: Wes Malone <wes@mitsi.com>
-
 willert: Sebastian Willert <willert@cpan.org>
-
+wintermute: Toby Corkindale <tjc@cpan.org>
 wreis: Wallace Reis <wreis@cpan.org>
-
 xenoterracide: Caleb Cushing <xenoterracide@gmail.com>
-
-uree: Oriol Soriano <oriol.soriano@capside.com>
-
 yrlnry: Mark Jason Dominus <mjd@plover.com>
-
 zamolxes: Bogdan Lucaciu <bogdan@wiz.ro>
-
 Zefram: Andrew Main <zefram@fysh.org>
index 5e2f3f3..bc654e4 100644 (file)
@@ -1,4 +1,4 @@
-^(?!script/|examples/|lib/|inc/|t/|xt/|Makefile\.PL$|maint/|README$|MANIFEST$|Changes$|META\.(?:yml|json)$)
+^(?!script/|examples/|lib/|inc/|t/|xt/|Makefile\.PL$|maint/|README$|MANIFEST$|Changes$|AUTHORS$|META\.(?:yml|json)$)
 
 # Avoid version control files.
 \bRCS\b
index 20d0404..ad540f1 100644 (file)
@@ -206,7 +206,12 @@ for my $mod (sort keys %final_req) {
 # IFF we are running interactively
 auto_install();
 
-WriteAll();
+{
+  # M::I understands unicode in meta but does not write with the right
+  # layers - fhtagn!!!
+  local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /Wide character in print/ };
+  WriteAll();
+}
 
 exit 0;
 
index 2508368..b2bcb12 100644 (file)
@@ -283,323 +283,26 @@ accessible at the following locations:
 
 =back
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-mst: Matt S. Trout <mst@shadowcatsystems.co.uk>
+Even though a large portion of the source I<appears> to be written by just a
+handful of people, this library continues to remain a collaborative effort -
+perhaps one of the most successful such projects on L<CPAN|http://cpan.org>.
+It is important to remember that ideas do not always result in a direct code
+contribution, but deserve acknowledgement just the same. Time and time again
+the seemingly most insignificant questions and suggestions have been shown
+to catalyze monumental improvements in consistency, accuracy and performance.
 
-(I mostly consider myself "project founder" these days but the AUTHOR heading
-is traditional :)
+=for comment this line is replaced with the author list at dist-building time
 
-=head1 CONTRIBUTORS
-
-abraxxa: Alexander Hartmaier <abraxxa@cpan.org>
-
-acca: Alexander Kuznetsov <acca@cpan.org>
-
-aherzog: Adam Herzog <adam@herzogdesigns.com>
-
-Alexander Keusch <cpan@keusch.at>
-
-alexrj: Alessandro Ranellucci <aar@cpan.org>
-
-alnewkirk: Al Newkirk <we@ana.im>
-
-amiri: Amiri Barksdale <amiri@metalabel.com>
-
-amoore: Andrew Moore <amoore@cpan.org>
-
-Andrew Mehta <Andrew@unitedgames.co.uk>
-
-andrewalker: Andre Walker <andre@andrewalker.net>
-
-andyg: Andy Grundman <andy@hybridized.org>
-
-ank: Andres Kievsky
-
-arc: Aaron Crane <arc@cpan.org>
-
-arcanez: Justin Hunter <justin.d.hunter@gmail.com>
-
-ash: Ash Berlin <ash@cpan.org>
-
-bert: Norbert Csongrádi <bert@cpan.org>
-
-bfwg: Colin Newell <colin.newell@gmail.com>
-
-blblack: Brandon L. Black <blblack@gmail.com>
-
-bluefeet: Aran Deltac <bluefeet@cpan.org>
-
-bphillips: Brian Phillips <bphillips@cpan.org>
-
-boghead: Bryan Beeley <cpan@beeley.org>
-
-brd: Brad Davis <brd@FreeBSD.org>
-
-bricas: Brian Cassidy <bricas@cpan.org>
-
-brunov: Bruno Vecchi <vecchi.b@gmail.com>
-
-caelum: Rafael Kitover <rkitover@cpan.org>
-
-caldrin: Maik Hentsche <maik.hentsche@amd.com>
-
-castaway: Jess Robinson
-
-claco: Christopher H. Laco
-
-clkao: CL Kao
-
-Ctrl-o L<http://ctrlo.com/>
-
-da5id: David Jack Olrik <djo@cpan.org>
-
-dariusj: Darius Jokilehto <dariusjokilehto@yahoo.co.uk>
-
-davewood: David Schmidt <davewood@gmx.at>
-
-daxim: Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <daxim@cpan.org>
-
-debolaz: Anders Nor Berle <berle@cpan.org>
-
-dew: Dan Thomas <dan@godders.org>
-
-dim0xff: Dmitry Latin <dim0xff@gmail.com>
-
-dkubb: Dan Kubb <dan.kubb-cpan@onautopilot.com>
-
-dnm: Justin Wheeler <jwheeler@datademons.com>
-
-dpetrov: Dimitar Petrov <mitakaa@gmail.com>
-
-duncan_dmg: Duncan Garland <Duncan.Garland@motortrak.com>
-
-dwc: Daniel Westermann-Clark <danieltwc@cpan.org>
-
-dyfrgi: Michael Leuchtenburg <michael@slashhome.org>
-
-edenc: Eden Cardim <edencardim@gmail.com>
-
-Eligo L<http://eligo.co.uk/>
-
-ether: Karen Etheridge <ether@cpan.org>
-
-felliott: Fitz Elliott <fitz.elliott@gmail.com>
-
-freetime: Bill Moseley <moseley@hank.org>
-
-frew: Arthur Axel "fREW" Schmidt <frioux@gmail.com>
-
-goraxe: Gordon Irving <goraxe@cpan.org>
-
-gphat: Cory G Watson <gphat@cpan.org>
-
-Grant Street Group L<http://www.grantstreet.com/>
-
-groditi: Guillermo Roditi <groditi@cpan.org>
-
-guacamole: Fred Steinberg <fred.steinberg@gmail.com>
-
-Haarg: Graham Knop <haarg@haarg.org>
-
-hobbs: Andrew Rodland <arodland@cpan.org>
-
-idn: Ian Norton <i.norton@shadowcat.co.uk>
-
-ilmari: Dagfinn Ilmari MannsE<aring>ker <ilmari@ilmari.org>
-
-initself: Mike Baas <mike@initselftech.com>
-
-ironcamel: Naveed Massjouni <naveedm9@gmail.com>
-
-jawnsy: Jonathan Yu <jawnsy@cpan.org>
-
-jasonmay: Jason May <jason.a.may@gmail.com>
-
-jegade: Jens Gassmann <jens.gassmann@atomix.de>
-
-jeneric: Eric A. Miller <emiller@cpan.org>
-
-jesper: Jesper Krogh
-
-jgoulah: John Goulah <jgoulah@cpan.org>
-
-jguenther: Justin Guenther <jguenther@cpan.org>
-
-jhannah: Jay Hannah <jay@jays.net>
-
-jmac: Jason McIntosh <jmac@appleseed-sc.com>
-
-jnapiorkowski: John Napiorkowski <jjn1056@yahoo.com>
-
-jon: Jon Schutz <jjschutz@cpan.org>
-
-Joe Carlson <jwcarlson@lbl.gov>
-
-jshirley: J. Shirley <jshirley@gmail.com>
-
-kaare: Kaare Rasmussen
-
-konobi: Scott McWhirter
-
-littlesavage: Alexey Illarionov <littlesavage@orionet.ru>
-
-lukes: Luke Saunders <luke.saunders@gmail.com>
-
-marcus: Marcus Ramberg <mramberg@cpan.org>
-
-mattlaw: Matt Lawrence
-
-mattp: Matt Phillips <mattp@cpan.org>
-
-mdk: Mark Keating <m.keating@shadowcat.co.uk>
-
-mna: Maya
-
-michaelr: Michael Reddick <michael.reddick@gmail.com>
-
-milki: Jonathan Chu <milki@rescomp.berkeley.edu>
-
-minty: Murray Walker <perl@minty.org>
-
-mithaldu: Christian Walde <walde.christian@gmail.com>
-
-mjemmeson: Michael Jemmeson <michael.jemmeson@gmail.com>
-
-mrf: Mike Francis <ungrim97@gmail.com>
-
-mstratman: Mark A. Stratman <stratman@gmail.com>
-
-ned: Neil de Carteret
-
-nigel: Nigel Metheringham <nigelm@cpan.org>
-
-ningu: David Kamholz <dkamholz@cpan.org>
-
-Nniuq: Ron "Quinn" Straight" <quinnfazigu@gmail.org>
-
-norbi: Norbert Buchmuller <norbi@nix.hu>
-
-nuba: Nuba Princigalli <nuba@cpan.org>
-
-Numa: Dan Sully <daniel@cpan.org>
-
-oalders: Olaf Alders <olaf@wundersolutions.com>
-
-ovid: Curtis "Ovid" Poe <ovid@cpan.org>
-
-oyse: E<Oslash>ystein Torget <oystein.torget@dnv.com>
-
-paulm: Paul Makepeace
-
-penguin: K J Cheetham
-
-perigrin: Chris Prather <chris@prather.org>
-
-peter: Peter Collingbourne <peter@pcc.me.uk>
-
-Peter Siklósi <einon@einon.hu>
-
-Peter Valdemar ME<oslash>rch <peter@morch.com>
-
-phaylon: Robert Sedlacek <phaylon@dunkelheit.at>
-
-plu: Johannes Plunien <plu@cpan.org>
-
-pplu: Jose Luis Martinez <jlmartinez@capside.com>
-
-Possum: Daniel LeWarne <possum@cpan.org>
-
-quicksilver: Jules Bean
-
-rafl: Florian Ragwitz <rafl@debian.org>
-
-rainboxx: Matthias Dietrich <perl@rb.ly>
-
-Relequestual: Ben Hutton <relequestual@gmail.com>
-
-rbo: Robert Bohne <rbo@cpan.org>
-
-rbuels: Robert Buels <rmb32@cornell.edu>
-
-rdj: Ryan D Johnson <ryan@innerfence.com>
-
-ribasushi: Peter Rabbitson <ribasushi@cpan.org>
-
-rjbs: Ricardo Signes <rjbs@cpan.org>
-
-robkinyon: Rob Kinyon <rkinyon@cpan.org>
-
-Robert Olson <bob@rdolson.org>
-
-moltar: Roman Filippov <romanf@cpan.org>
-
-Sadrak: Felix Antonius Wilhelm Ostmann <sadrak@cpan.org>
-
-sc_: Just Another Perl Hacker
-
-scotty: Scotty Allen <scotty@scottyallen.com>
-
-semifor: Marc Mims <marc@questright.com>
-
-SineSwiper: Brendan Byrd <bbyrd@cpan.org>
-
-skaufman: Samuel Kaufman <sam@socialflow.com>
-
-solomon: Jared Johnson <jaredj@nmgi.com>
-
-spb: Stephen Bennett <stephen@freenode.net>
-
-Squeeks <squeek@cpan.org>
-
-sszabo: Stephan Szabo <sszabo@bigpanda.com>
-
-Stephen Peters <steve@stephenpeters.me>
-
-talexb: Alex Beamish <talexb@gmail.com>
-
-tamias: Ronald J Kimball <rjk@tamias.net>
-
-TBSliver: Tom Bloor <t.bloor@shadowcat.co.uk>
-
-teejay : Aaron Trevena <teejay@cpan.org>
-
-theorbtwo: James Mastros <james@mastros.biz>
-
-Todd Lipcon
-
-Tom Hukins
-
-tonvoon: Ton Voon <tonvoon@cpan.org>
-
-triode: Pete Gamache <gamache@cpan.org>
-
-typester: Daisuke Murase <typester@cpan.org>
-
-victori: Victor Igumnov <victori@cpan.org>
-
-wdh: Will Hawes
-
-wesm: Wes Malone <wes@mitsi.com>
-
-willert: Sebastian Willert <willert@cpan.org>
-
-wreis: Wallace Reis <wreis@cpan.org>
-
-xenoterracide: Caleb Cushing <xenoterracide@gmail.com>
-
-uree: Oriol Soriano <oriol.soriano@capside.com>
-
-yrlnry: Mark Jason Dominus <mjd@plover.com>
-
-zamolxes: Bogdan Lucaciu <bogdan@wiz.ro>
-
-Zefram: Andrew Main <zefram@fysh.org>
+The canonical source of authors and their details is the F<AUTHORS> file at
+the root of this distribution (or repository). The canonical source of
+per-line authorship is the L<git repository|/HOW TO CONTRIBUTE> history
+itself.
 
 =head1 COPYRIGHT
 
-Copyright (c) 2005 - 2011 the DBIx::Class L</AUTHOR> and L</CONTRIBUTORS>
-as listed above.
+Copyright (c) 2005 the DBIx::Class L</AUTHORS> as listed above.
 
 =head1 LICENSE
 
index 523e927..b288ad2 100644 (file)
@@ -6,9 +6,9 @@ DBIx::Class::Manual::Features - A boatload of DBIx::Class features with links to
 
 =head2 Large Community
 
-Currently there are 88 people listed as contributors to DBIC.  That ranges
-from documentation help, to test help, to added features, to entire database
-support.
+There are L<hundres of DBIC contributors|DBIx::Class/AUTHORS> listed in
+F<AUTHORS>. That ranges from documentation help, to test help, to added
+features, to entire database support.
 
 =head2 Active Community
 
index 152a390..3e3caa3 100644 (file)
@@ -91,6 +91,9 @@ END {
 
   if (keys %removed_build_requires) {
     print "Regenerating META with author requires excluded\n";
+    # M::I understands unicode in meta but does not write with the right
+    # layers - fhtagn!!!
+    local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /Wide character in print/ };
     Meta->write;
   }
 
index e489860..845728e 100644 (file)
@@ -1,7 +1,26 @@
-# authorshipz
-author 'mst: Matt S. Trout <mst@shadowcat.co.uk>';
+# principal author list is kinda mandated by spec, luckily is rather static
+author 'mst: Matt S Trout <mst@shadowcat.co.uk> (project founder - original idea, architecture and implementation)';
+author 'castaway: Jess Robinson <castaway@desert-island.me.uk> (lions share of the reference documentation and manuals)';
+author 'ribasushi: Peter Rabbitson <ribasushi@cpan.org> (present day maintenance and controlled evolution)';
+
+# pause sanity
 Meta->{values}{x_authority} = 'cpan:RIBASUSHI';
 
+# populate x_contributors
+# a direct dump of the sort is ok - xt/authors.t guarantees source sanity
+Meta->{values}{x_contributors} = [ do {
+  # according to #p5p this is how one safely reads random unicode
+  # this set of boilerplate is insane... wasn't perl unicode-king...?
+  no warnings 'once';
+  require Encode;
+  require PerlIO::encoding;
+  local $PerlIO::encoding::fallback = Encode::FB_CROAK();
+
+  open (my $fh, '<:encoding(UTF-8)', 'AUTHORS') or die "Unable to open AUTHORS - can't happen: $!\n";
+  map { chomp; ( (! $_ or $_ =~ /^\s*\#/) ? () : $_ ) } <$fh>;
+
+}];
+
 # legalese
 license 'perl';
 resources 'license' => 'http://dev.perl.org/licenses/';
index fb222ee..ff72fd9 100644 (file)
@@ -93,6 +93,32 @@ EOP
 }
 
 
+# generate the DBIx/Class.pod only during distdir
+{
+  my $dist_pod_fn = File::Spec->catfile($pod_dir, qw(lib DBIx Class.pod));
+
+  postamble <<"EOP";
+
+clonedir_generate_files : dbic_distdir_gen_dbic_pod
+
+dbic_distdir_gen_dbic_pod :
+
+\tperldoc -u lib/DBIx/Class.pm > $dist_pod_fn
+\t@{[ $mm_proto->oneliner(
+  "s!^.*?this line is replaced with the author list.*! qq{List of the awesome contributors who made DBIC v$ver possible\n\n} . qx(\$^X -Ilib maint/gen_pod_authors)!me",
+  [qw( -0777 -p -i )]
+) ]} $dist_pod_fn
+
+create_distdir : dbic_distdir_defang_authors
+
+# Remove the maintainer-only warning (be nice ;)
+dbic_distdir_defang_authors :
+\t@{[ $mm_proto->oneliner('s/ ^ \s* \# \s* \*\*\* .+ \n ( ^ \s* \# \s*? \n )? //xmg', [qw( -0777 -p -i )] ) ]} \$(DISTVNAME)/AUTHORS
+
+EOP
+}
+
+
 # on some OSes generated files may have an incorrect \n - fix it
 # so that the xt tests pass on a fresh checkout (also shipping a
 # dist with CRLFs is beyond obnoxious)
similarity index 86%
rename from maint/Makefile.PL.inc/52_autogen_README.pl
rename to maint/Makefile.PL.inc/54_autogen_README.pl
index 0f4a38c..cadb401 100644 (file)
@@ -13,9 +13,9 @@ postamble <<"EOP";
 
 clonedir_generate_files : dbic_clonedir_gen_readme
 
-dbic_clonedir_gen_readme :
+dbic_clonedir_gen_readme : dbic_distdir_gen_dbic_pod
 \t@{[ $mm_proto->oneliner('mkpath', ['-MExtUtils::Command']) ]} $dir
-\tpod2text lib/DBIx/Class.pm > $fn
+\tpod2text $dir/lib/DBIx/Class.pod > $fn
 
 EOP
 
diff --git a/maint/gen_pod_authors b/maint/gen_pod_authors
new file mode 100755 (executable)
index 0000000..0bfa32c
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl
+
+use warnings;
+use strict;
+
+# we will be outputting *ENCODED* utf8, hence the raw open below
+# the file is already sanity-checked by xt/authors.t
+my @known_authors = do {
+  open (my $fh, '<:raw', 'AUTHORS') or die "Unable to open AUTHORS - can't happen: $!\n";
+  map { chomp; ( ( ! $_ or $_ =~ /^\s*\#/ ) ? () : $_ ) } <$fh>;
+} or die "Known AUTHORS file seems empty... can't happen...";
+
+$_ =~ s!( \b https? :// [^\s\>]+ )!L<$1|$1>!x
+  for @known_authors;
+
+print join "\n\n",
+  '=encoding utf8',
+  '=over',
+  @known_authors,
+  '=back',
+  '',
+;
+
+1;
diff --git a/xt/authors.t b/xt/authors.t
new file mode 100644 (file)
index 0000000..5eb533b
--- /dev/null
@@ -0,0 +1,77 @@
+use warnings;
+use strict;
+
+use Test::More;
+use Config;
+use File::Spec;
+
+my @known_authors = do {
+  # according to #p5p this is how one safely reads random unicode
+  # this set of boilerplate is insane... wasn't perl unicode-king...?
+  no warnings 'once';
+  require Encode;
+  require PerlIO::encoding;
+  local $PerlIO::encoding::fallback = Encode::FB_CROAK();
+
+  open (my $fh, '<:encoding(UTF-8)', 'AUTHORS') or die "Unable to open AUTHORS - can't happen: $!\n";
+  map { chomp; ( ( ! $_ or $_ =~ /^\s*\#/ ) ? () : $_ ) } <$fh>;
+
+} or die "Known AUTHORS file seems empty... can't happen...";
+
+is_deeply (
+  [ grep { /^\s/ } @known_authors ],
+  [],
+  "No entries with leading space",
+);
+
+is_deeply (
+  \@known_authors,
+  [ sort { lc $a cmp lc $b } @known_authors ],
+  'Author list is case-insensitively sorted'
+);
+
+my $email_re = qr/( \< [^\<\>]+ \> ) $/x;
+
+my (%known_authors, $count);
+for (@known_authors) {
+  my ($name_email) = m/ ^ (?: [^\:]+ \: \s )? (.+) /x;
+  my ($email) = $name_email =~ $email_re;
+
+  if (
+    $known_authors{$name_email}++
+      or
+    ( $email and $known_authors{$email}++ )
+  ) {
+    fail "Duplicate found: $name_email";
+  }
+  else {
+    $count++;
+  }
+}
+
+# do not announce anything under travis - we are watching for STDERR silence
+diag "\n\n$count contributors made this library what it is today\n\n"
+  unless ($ENV{TRAVIS}||'') eq 'true';
+
+# augh taint mode
+if (length $ENV{PATH}) {
+  ( $ENV{PATH} ) = join ( $Config{path_sep},
+    map { length($_) ? File::Spec->rel2abs($_) : () }
+      split /\Q$Config{path_sep}/, $ENV{PATH}
+  ) =~ /\A(.+)\z/;
+}
+
+# this may fail - not every system has git
+if (my @git_authors = map
+  { my ($gitname) = m/^ \s* \d+ \s* (.+?) \s* $/mx; utf8::decode($gitname); $gitname }
+  qx( git shortlog -e -s )
+) {
+  for (@git_authors) {
+    my ($eml) = $_ =~ $email_re;
+
+    fail "Commit author '$_' (from git) not reflected in AUTHORS, perhaps a missing .mailmap entry?"
+      unless $known_authors{$eml};
+  }
+}
+
+done_testing;