newlib/winsup/cygwin/update-copyright

81 lines
1.8 KiB
Plaintext
Raw Normal View History

#!/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;
}
}