diff options
Diffstat (limited to 'Master/tlpkg/bin/check-collection-coverage')
-rwxr-xr-x | Master/tlpkg/bin/check-collection-coverage | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/Master/tlpkg/bin/check-collection-coverage b/Master/tlpkg/bin/check-collection-coverage new file mode 100755 index 00000000000..a00aac3a2c1 --- /dev/null +++ b/Master/tlpkg/bin/check-collection-coverage @@ -0,0 +1,113 @@ +#!/usr/bin/env perl +# $Id: check-collection-coverage 0 2007-10-14 20:32:44Z karl $ +# Copyright 2007 Norbert Preining +# This file is licensed under the GNU General Public License version 2 +# or any later version. +# +# Check that all package are contained in some collection. + +BEGIN { + $^W = 1; + ($mydir = $0) =~ s,/[^/]*$,,; + unshift (@INC, "$mydir/.."); +} + +our $mydir; + +use strict; + +use TeXLive::TLConfig; +use TeXLive::TLPOBJ; +use TeXLive::TLPDB; +use Getopt::Long; +use Pod::Usage; +use File::Path; + +my $help = 0; + +GetOptions("help|?" => \$help) or pod2usage(1); +pod2usage(-exitstatus => 0, -verbose => 2) if $help; + +exit (&main ()); + +sub main +{ + # get the db. + chomp (my $Master = `cd $mydir/../.. && pwd`); # xx TLPDB should default + my $tlpdb = TeXLive::TLPDB->new ("root" => "$Master"); + die("Cannot find tlpdb in $Master!\n") unless defined($tlpdb); + my @colls = $tlpdb->collections; + my %found; + for my $pkg ($tlpdb->list_packages) { + my $cat = $tlpdb->get_package($pkg)->category; + # ignore collections and schemes + next if ($cat eq "Collection"); + next if ($cat eq "Scheme"); + next if ($pkg =~ m/\./); + $found{$pkg}{'present'} = 1; + foreach my $c (@colls) { + if (grep(/^$pkg$/,$tlpdb->get_package($c)->depends)) { + $found{$pkg}{$c} = 1; + } + } + } + my @notincolls; + my @multicolls; + foreach my $pkg (keys %found) { + my @k = keys %{$found{$pkg}}; + if ($#k <= 0) { push @notincolls, $pkg; } + if ($#k > 1) { push @multicolls, $pkg; } + } + if (@notincolls) { + print "NOT COVERED PACKAGES:\n"; + for my $pkg (@notincolls) { + print "\t$pkg\n"; + } + } + if (@multicolls) { + print "MULTIPLE COVERED PACKAGES: \n"; + for my $pkg (@multicolls) { + print "\t$pkg: "; + for my $c (keys %{$found{$pkg}}) { + print "$c " if ($c ne "present"); + } + print "\n"; + } + } +} + + + +__END__ + +=head1 NAME + +check-collection-coverage - check that all packages are contained in some collection + +=head1 SYNOPSIS + +check-collection-coverage + +=head1 OPTIONS + +There are no options bug C<-help>. + +=head1 DESCRIPTION + +Every package should be included in some collection. This program checks +for that and echos found problems to stdout. + +=head1 AUTHORS AND COPYRIGHT + +This script and its documentation were written for the TeX Live +distribution (L<http://tug.org/texlive>) and both are licensed under the +GNU General Public License Version 2 or later. + +=cut + +### Local Variables: +### perl-indent-level: 2 +### tab-width: 2 +### indent-tabs-mode: nil +### End: +# vim:set tabstop=2 expandtab: # |