Index: head/Tools/scripts/chkmodules.pl =================================================================== --- head/Tools/scripts/chkmodules.pl (revision 109167) +++ head/Tools/scripts/chkmodules.pl (revision 109168) @@ -1,130 +1,130 @@ #!/usr/bin/perl -w # # Copyright (c) 2004 Oliver Eikemeier. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright notice # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the name of the author nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # $FreeBSD$ # # MAINTAINER= eik@FreeBSD.org # # CVSROOT-ports/modules auditing script, based on a shell script by # Clement Laforet. # +require 5.005; use strict; use File::Find; +use Cwd 'abs_path'; -require 5.005; -use strict; - my $portsdir = $ENV{PORTSDIR} ? $ENV{PORTSDIR} : '/usr/ports'; my $cvsroot = $ENV{CVSROOT} ? $ENV{CVSROOT} : '/home/ncvs/CVSROOT-ports'; my @excludes = $ENV{EXCLUDE} ? split(' ', $ENV{EXCLUDE}) : ('local', 'rookies'); -d "$portsdir" or die "Can't find ports tree at $portsdir.\n"; -f "$cvsroot/modules" or die "Can't read modules file $cvsroot/modules.\n"; +$portsdir = abs_path($portsdir); my %ports = ('ports' => 1); my $excludepattern = '(?:'.join('|', 'distfiles', 'packages', @excludes).')'; sub wanted { !-d || ( /^CVS$/ || $File::Find::name =~ m"^$portsdir/$excludepattern$"os || $File::Find::name =~ m"^$portsdir/[^/]+/pkg$"os ) && ($File::Find::prune = 1) || $File::Find::name =~ m"^$portsdir/([^/]+/[^/]+)$"os && ($ports{$1} = undef) && ($File::Find::prune = 1) || $File::Find::name =~ m"^$portsdir/((?:Mk|Templates|Tools)(?:/.+)?)"os && ($ports{$1} = 1) || $File::Find::name =~ m"^$portsdir/([^/]+)$"os && ($ports{$1} = undef); } find(\&wanted, $portsdir); my %extraneous; my %missorted; my %illegal; my $lastmodule = ''; open(MODULES, "$cvsroot/modules"); while () { chomp; next if 1 .. /^# !!MERGE!!/; next if /^(#|$)/; my ($module, $portsdir) = split; if ($lastmodule gt $module) { $missorted{$.} = $_; } $lastmodule = $module; next if $portsdir eq 'ports'; if ($module !~ /^[a-z\d]/i || $portsdir !~ m"^ports/([^/]+(?:/[^/]+)?)") { $illegal{$.} = $_; next; } if (exists $ports{$1}) { $ports{$1} = $.; } else { $extraneous{$.} = $_; } } close(MODULES); my @missing = grep(!defined $ports{$_}, keys %ports); print "** chkmodules report: **\n" if %extraneous || %illegal || %missorted || @missing; print join("\n ", "\nModules with illegal names:", map("$_: $illegal{$_}", sort { $a <=> $b } keys %illegal)), "\n" if %illegal; print join("\n ", "\nModules that are not sorted correctly:", map("$_: $missorted{$_}", sort { $a <=> $b } keys %missorted)), "\n" if %missorted; print join("\n ", "\nOrphaned entries:", map("$_: $extraneous{$_}", sort { $a <=> $b } keys %extraneous)), "\n" if %extraneous; print join("\n - ", "\nMissing entries in modules:", sort @missing), "\n" if @missing; exit %extraneous || %illegal || %missorted || @missing ? 1 : 0; Property changes on: head/Tools/scripts/chkmodules.pl ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.2 \ No newline at end of property +1.3 \ No newline at end of property Index: head/Tools/scripts/chkversion.pl =================================================================== --- head/Tools/scripts/chkversion.pl (revision 109167) +++ head/Tools/scripts/chkversion.pl (revision 109168) @@ -1,155 +1,160 @@ #!/usr/bin/perl -w # # Copyright (c) 2004 Oliver Eikemeier. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # 1. Redistributions of source code must retain the above copyright notice # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the name of the author nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # $FreeBSD$ # # MAINTAINER= eik@FreeBSD.org # # PORTVERSION auditing script # # For many port tools to work correctly, it is of utmost importance that # PORTVERSION/-REVISION/-EPOCH of a port is a monotonic increasing sequence # over time. See also # # for more information. Tools that won't work include pkg_version, portupgrade # and portaudit. One common example is an accidentially deleted PORTEPOCH. # # This scripts compares version numbers with previously known ones, and is # primarily intended to be run from a (non-root) cron job. # # If you simply call it, it will compare all ports with their INDEX entry # and complain if version numbers have gone backwards. You need and old # INDEX for this, of course. An up-to-date INDEX will accomplish nothing. # # To use the script as intended, do the following (assuming you want to # run the script as user `ports'): # install port sysutils/pkg_install-devel (optional) # mkdir -p /var/db/chkversion # touch /var/db/chkversion/VERSIONS # chown -R ports /var/db/chkversion # and enter chkversions.pl into the crontab of ports, or run it by hand # if you can spare the time. # +require 5.005; use strict; use File::Find; +use Cwd 'abs_path'; -require 5.005; -use strict; - my $portsdir = $ENV{PORTSDIR} ? $ENV{PORTSDIR} : '/usr/ports'; - my $versiondir = $ENV{VERSIONDIR} ? $ENV{VERSIONDIR} : '/var/db/chkversion'; +my $cvsblame = $ENV{CVSBLAME} ? 1 : 0; my $pkg_version = -x '/usr/local/sbin/pkg_version' ? '/usr/local/sbin/pkg_version' : '/usr/sbin/pkg_version'; -d "$portsdir" or die "Can't find ports tree at $portsdir.\n"; +$portsdir = abs_path($portsdir); my $useindex = !-w "$versiondir"; my $versionfile = $useindex - ? "$portsdir/`cd $portsdir; make -VINDEXFILE`" + ? "$portsdir/".`cd $portsdir; make -VINDEXFILE` : "$versiondir/VERSIONS"; chomp $versionfile; my %pkgname; sub wanted { !-d || (/^CVS$/ || $File::Find::name =~ m"^$portsdir/(?:Mk|Templates|Tools|distfiles|packages)$"os || $File::Find::name =~ m"^$portsdir/[^/]+/pkg$"os ) && ($File::Find::prune = 1) || $File::Find::name =~ m"^$portsdir/([^/]+/[^/]+)$"os && ($File::Find::prune = 1) && ( $pkgname{$1} = `cd "$File::Find::name"; make -VPKGNAME 2>/dev/null`, chomp $pkgname{$1} ); } find(\&wanted, $portsdir); my %backwards; - open VERSIONS, "<$versionfile"; while () { chomp; next if /^(#|$)/; my ($origin, $version); if ($useindex) { ($version, $origin) = split /\|/; $origin =~ s,^.*/([^/]+/[^/]+)/?$,$1,; } else { ($origin, $version) = split; } if (defined $pkgname{$origin}) { my $newversion = $pkgname{$origin}; my $oldversion = $version; $newversion =~ s/^.*-//; $oldversion =~ s/^.*-//; my $result = `$pkg_version -t '$newversion' '$oldversion'`; chomp $result; if ($result eq '<') { $backwards{$origin} = "$pkgname{$origin} < $version"; $pkgname{$origin} = $version; } } else { $pkgname{$origin} = $version; } } close VERSIONS; if (!$useindex) { system "mv -f '$versionfile' '$versionfile.bak'"; open VERSIONS, ">$versionfile"; print VERSIONS join("\n", map("$_\t$pkgname{$_}", sort keys %pkgname)), "\n"; close VERSIONS; } -print join("\n - ", - "Package versions going backwards:", - map("$_: $backwards{$_}", sort keys %backwards)), - "\n" - if %backwards; +if (%backwards) { + print "Package versions going backwards:\n"; + foreach (sort keys %backwards) { + print " - $_: $backwards{$_}\n"; + if ($cvsblame && -d "$portsdir/$_/CVS") { + my @cvslog = `cd "$portsdir/$_"; cvs -R log -N -r. Makefile`; + print map "\t" . $_, grep /^-/ .. /^=/, @cvslog; + print "\n"; + } + } +} Property changes on: head/Tools/scripts/chkversion.pl ___________________________________________________________________ Modified: cvs2svn:cvs-rev ## -1 +1 ## -1.1 \ No newline at end of property +1.2 \ No newline at end of property