90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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;
 | |
|     }
 | |
| }
 | |
| 
 |