8 my @known_authors = do {
9 # according to #p5p this is how one safely reads random unicode
10 # this set of boilerplate is insane... wasn't perl unicode-king...?
13 require PerlIO::encoding;
14 local $PerlIO::encoding::fallback = Encode::FB_CROAK();
16 open (my $fh, '<:encoding(UTF-8)', 'AUTHORS') or die "Unable to open AUTHORS - can't happen: $!\n";
17 map { chomp; ( ( ! $_ or $_ =~ /^\s*\#/ ) ? () : $_ ) } <$fh>;
19 } or die "Known AUTHORS file seems empty... can't happen...";
22 [ grep { /^\s/ or /\s\s/ } @known_authors ],
24 "No entries with leading or doubled space",
28 [ grep { / \:[^\s\/] /x or /^ [^:]*? \s+ \: /x } @known_authors ],
30 "No entries with malformed nicks",
35 [ sort { lc $a cmp lc $b } @known_authors ],
36 'Author list is case-insensitively sorted'
39 my $email_re = qr/( \< [^\<\>]+ \> ) $/x;
41 my (%known_authors, $count);
42 for (@known_authors) {
43 my ($name_email) = m/ ^ (?: [^\:]+ \: \s )? (.+) /x;
44 my ($email) = $name_email =~ $email_re;
47 $known_authors{$name_email}++
49 ( $email and $known_authors{$email}++ )
51 fail "Duplicate found: $name_email";
58 # do not announce anything under travis - we are watching for STDERR silence
59 diag "\n\n$count contributors made this library what it is today\n\n"
60 unless ($ENV{TRAVIS}||'') eq 'true';
63 if (length $ENV{PATH}) {
64 ( $ENV{PATH} ) = join ( $Config{path_sep},
65 map { length($_) ? File::Spec->rel2abs($_) : () }
66 split /\Q$Config{path_sep}/, $ENV{PATH}
70 # this may fail - not every system has git
71 if (my @git_authors = map
72 { my ($gitname) = m/^ \s* \d+ \s* (.+?) \s* $/mx; utf8::decode($gitname); $gitname }
73 qx( git shortlog -e -s )
76 my ($eml) = $_ =~ $email_re;
78 fail "Commit author '$_' (from git) not reflected in AUTHORS, perhaps a missing .mailmap entry?"
79 unless $known_authors{$eml};