#!/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) { update_maybe($file, %{delete $files{$file}}); } } close $cvs; exit 0; sub addwrap($$) { my $copyright = shift; my $indent = shift; 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 @lines; } sub update_maybe($%) { my $f = shift; local @ARGV = $f; my %dates = @_; my @file = (); my $copyright = ''; my $modified = 1; while (<>) { if ($copyright) { push @file, $_; } elsif (/^\s*Copyright/o) { $copyright = $_; $copyright .= scalar <> while $copyright =~ /,\s*$/o; for my $date ($copyright =~ /(\d+)/g) { $dates{$date} = 1; } my $indent = ($copyright =~ /\A(\s*)/o)[0]; $copyright = $indent . 'Copyright ' . (join ', ', sort {$a <=> $b} sort keys %dates) . " Red Hat\n"; push @file, addwrap($copyright, $indent); } else { push @file, $_; } } if ($modified) { 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; } }