diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 2c5b7e3a3..e61c45108 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2013-01-20 Christopher Faylor + + * update-copyright: Update standard copyright information based on cvs + log and current sandbox status. + 2013-01-20 Christopher Faylor * malloc_wrapper.cc: Change 'use_internal_malloc' to 'use_internal' diff --git a/winsup/cygwin/update-copyright b/winsup/cygwin/update-copyright new file mode 100755 index 000000000..1ea2a5376 --- /dev/null +++ b/winsup/cygwin/update-copyright @@ -0,0 +1,80 @@ +#!/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; + } +} +