Commit | Line | Data |
bcba2324 |
1 | #!/usr/bin/env perl |
2 | |
3 | use strict; use warnings FATAL => 'all'; |
4 | |
5 | use IO::All qw(io); |
6 | use List::Util qw(first min max); |
7 | |
8 | sub vwarn { warn $_[0] if $ENV{COPYRITE_VERBOSE} } |
9 | |
10 | my $fname = shift @ARGV; |
11 | |
12 | unless ($fname and $fname =~ /\.pm$/) { |
13 | die "You didn't supply me a filename or it didn't end in .pm - please |
14 | invoke me as $0 lib/Foo/Bar.pm or similar"; |
15 | } |
16 | |
17 | my %head_section; @head_section{qw(AUTHOR AUTHORS CONTRIBUTORS)} = (1,1,1); |
18 | |
19 | my @lines = io($fname)->getlines; |
20 | |
21 | my @use = grep $head_section{$_}, map { /^=head1 (\w+)/ ? ($1) : () } @lines; |
22 | |
23 | die "Couldn't find =head1 sections for any of ".join(' ', keys %head_section) |
24 | unless @use; |
25 | |
26 | vwarn "Found =head1 sections for: ".join(' ', @use)." in ${fname}\n"; |
27 | |
28 | my $changes = first { -e $_ } qw(Changes ChangeLog); |
29 | |
30 | die "Couldn't find Changes or ChangeLog file :(" unless $changes; |
31 | |
32 | my @changes = io($changes)->getlines; |
33 | |
34 | my @years = map /(200\d|199\d)/g, grep /^\S/, @changes; |
35 | |
36 | vwarn "Found years: ".join(' ', @years)." in ${changes}\n"; |
37 | |
38 | vwarn "Patch follows:\n\n\n"; |
39 | |
40 | my ($min_year, $max_year) = (min(@years), max(@years)); |
41 | |
42 | my $year_set = do { |
43 | if ($max_year > $min_year) { |
44 | "${min_year} - ${max_year}" |
45 | } else { |
46 | "${max_year}" |
47 | } |
48 | }; |
49 | |
50 | my $section_links = join ' and ', map "L</${_}>", @use; |
51 | |
52 | my $pname = join '::', map { s/\.pm//; $_ } grep /^[A-Z]/, split /\//, $fname; |
53 | |
54 | my $pod = <<"END"; |
55 | =head1 COPYRIGHT |
56 | |
57 | Copyright (c) ${min_year} - ${max_year} |
58 | the ${pname} ${section_links} |
59 | as listed above. |
60 | |
61 | END |
62 | |
63 | $pod =~ s/^ //mg; |
64 | |
65 | print $pod; |