| #!/usr/bin/perl |
| use strict; |
| use File::stat; |
| sub update_maybe($%); |
| |
| my $year = (split ' ', ~~localtime)[4]; |
| my %dates = (); |
| my %files = (); |
| my $cvs; |
| open $cvs, '-|', '/usr/bin/cvs', 'update', @ARGV or die "cvs update failed - $!\n"; |
| while (<$cvs>) { |
| /^M (.*)$/o and $files{$1}{$year} = 1; |
| } |
| close $cvs; |
| |
| open $cvs, '-|', '/usr/bin/cvs', 'log', '-N', '-b', @ARGV or die "cvs log failed - $!\n"; |
| my $file; |
| while (<$cvs>) { |
| if (/^Working file: (.*)$/o) { |
| $file = $1; |
| } elsif (/^date: (\d+)/o) { |
| $files{$file}{$1} = 1; |
| } elsif (/^=+$/o) { |
| my $rec = delete $files{$file}; |
| update_maybe($file, %{$rec}) if -e $file; |
| } |
| } |
| close $cvs; |
| |
| exit 0; |
| |
| sub addwrap($$) { |
| my $indent = shift; |
| my $copyright = shift; |
| $copyright =~ s/Red Hat\n/Red Hat, Inc.\n/so; |
| return $copyright if length($copyright) <= 80; |
| my @lines; |
| while (length($copyright) > 80) { |
| my $i = index($copyright, ' ', 80 - 6); |
| push @lines, substr($copyright, 0, $i) . "\n"; |
| substr($copyright, 0, $i + 1) = $indent; |
| } |
| push @lines, $copyright unless $copyright =~ /^\s*$/o; |
| return join('', @lines); |
| } |
| |
| sub update_maybe($%) { |
| my $f = shift; |
| local @ARGV = $f; |
| my %dates = @_; |
| my @file = (); |
| my $copyright = ''; |
| my $modified = 0; |
| while (<>) { |
| if ($copyright) { |
| push @file, $_; |
| } elsif (/^(?:dnl\s|[#\s]*)Copyright/o) { |
| $copyright = $_; |
| $copyright .= scalar <> while $copyright =~ /,\s*$/o; |
| if ($copyright !~ /Red Hat, Inc\.\n/o) { |
| push @file, $copyright; |
| next; |
| } |
| for my $date ($copyright =~ /(\d+)/g) { |
| $dates{$date} = 1; |
| } |
| my $indent = ($copyright =~ /\A(dnl\s+|[#\s]*)/o)[0]; |
| my $newcopyright = addwrap $indent, |
| $indent . 'Copyright ' . |
| (join ', ', sort {$a <=> $b} sort keys %dates) . |
| " Red Hat, Inc.\n"; |
| push @file, $newcopyright; |
| $modified = $newcopyright ne $copyright; |
| } else { |
| push @file, $_; |
| } |
| } |
| if ($modified) { |
| print "updating $f\n"; |
| my $fcopy = "$f.copyright"; |
| rename $f, $fcopy or die "$0: couldn't rename $f -> $fcopy - $!\n"; |
| my $st = stat($fcopy); |
| open my $fd, '>', $f; |
| chmod $st->mode & 07777, $f; |
| print $fd @file; |
| close $fd; |
| } |
| } |
| |