Wed Aug 17 17:40:09 2022 UTC ()
lintpkgsrc: fix loading of package data; condense loading of categories


(rillig)
diff -r1.108 -r1.109 pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl

cvs diff -r1.108 -r1.109 pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl (expand / switch to unified diff)

--- pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl 2022/08/17 17:26:35 1.108
+++ pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl 2022/08/17 17:40:09 1.109
@@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
1#!@PERL5@ 1#!@PERL5@
2# $NetBSD: lintpkgsrc.pl,v 1.108 2022/08/17 17:26:35 rillig Exp $ 2# $NetBSD: lintpkgsrc.pl,v 1.109 2022/08/17 17:40:09 rillig Exp $
3 3
4# Written by David Brownlee <abs@netbsd.org>. 4# Written by David Brownlee <abs@netbsd.org>.
5# 5#
6# Caveats: 6# Caveats:
7# The 'Makefile parsing' algorithm used to obtain package versions and 7# The 'Makefile parsing' algorithm used to obtain package versions and
8# DEPENDS information is geared towards speed rather than perfection, 8# DEPENDS information is geared towards speed rather than perfection,
9# though it has gotten somewhat better over time, it only parses the 9# though it has gotten somewhat better over time, it only parses the
10# simpler Makefile conditionals. 10# simpler Makefile conditionals.
11# 11#
12# TODO: Handle fun DEPENDS like avifile-devel with 12# TODO: Handle fun DEPENDS like avifile-devel with
13# {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} 13# {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1}
14 14
15use v5.36; 15use v5.36;
@@ -143,26 +143,27 @@ sub load($class, $fname) { @@ -143,26 +143,27 @@ sub load($class, $fname) {
143 while (defined(my $line = <STORE>)) { 143 while (defined(my $line = <STORE>)) {
144 chomp($line); 144 chomp($line);
145 if ($line =~ m"^ package \t ([^\t]+) \t ([^\t]+) $"x) { 145 if ($line =~ m"^ package \t ([^\t]+) \t ([^\t]+) $"x) {
146 $pkgver = $self->add($1, $2); 146 $pkgver = $self->add($1, $2);
147 } elsif ($line =~ m"^ var \t ([^\t]+) \t (.*) $"x) { 147 } elsif ($line =~ m"^ var \t ([^\t]+) \t (.*) $"x) {
148 $pkgver->var($1, $2); 148 $pkgver->var($1, $2);
149 } elsif ($line =~ m"^ sub ") { 149 } elsif ($line =~ m"^ sub ") {
150 die "Outdated cache format in '$fname'\n"; 150 die "Outdated cache format in '$fname'\n";
151 } else { 151 } else {
152 die "Invalid line '$line' in cache '$fname'\n"; 152 die "Invalid line '$line' in cache '$fname'\n";
153 } 153 }
154 } 154 }
155 close(STORE) or die; 155 close(STORE) or die;
 156 $self;
156} 157}
157 158
158sub store($self, $fname) { 159sub store($self, $fname) {
159 open(STORE, '>', $fname) 160 open(STORE, '>', $fname)
160 or die("Cannot save package data to $fname: $!\n"); 161 or die("Cannot save package data to $fname: $!\n");
161 foreach my $pkgver ($self->pkgvers_all) { 162 foreach my $pkgver ($self->pkgvers_all) {
162 my $pkgbase = $pkgver->pkgbase; 163 my $pkgbase = $pkgver->pkgbase;
163 my $pkgversion = $pkgver->pkgversion; 164 my $pkgversion = $pkgver->pkgversion;
164 165
165 $pkgbase =~ /^\S+$/ 166 $pkgbase =~ /^\S+$/
166 or die "cannot store package name '$pkgbase'\n"; 167 or die "cannot store package name '$pkgbase'\n";
167 $pkgversion =~ /^\S+$/ 168 $pkgversion =~ /^\S+$/
168 or die "cannot store package version '$pkgversion'\n"; 169 or die "cannot store package version '$pkgversion'\n";
@@ -787,31 +788,28 @@ sub list_installed_packages() { @@ -787,31 +788,28 @@ sub list_installed_packages() {
787 open(PKG_INFO, "$conf_pkg_info -e '*' |") 788 open(PKG_INFO, "$conf_pkg_info -e '*' |")
788 or fail("Unable to run $conf_pkg_info: $!"); 789 or fail("Unable to run $conf_pkg_info: $!");
789 chomp(my @pkgs = <PKG_INFO>); 790 chomp(my @pkgs = <PKG_INFO>);
790 close(PKG_INFO); 791 close(PKG_INFO);
791 map { $_ = canonicalize_pkgname($_) } @pkgs; 792 map { $_ = canonicalize_pkgname($_) } @pkgs;
792} 793}
793 794
794# List top level pkgsrc categories 795# List top level pkgsrc categories
795# 796#
796sub list_pkgsrc_categories($pkgsrcdir) { 797sub list_pkgsrc_categories($pkgsrcdir) {
797 my (@categories); 798 my (@categories);
798 799
799 opendir(BASE, $pkgsrcdir) || die("Unable to opendir($pkgsrcdir): $!"); 800 opendir(BASE, $pkgsrcdir) || die("Unable to opendir($pkgsrcdir): $!");
800 @categories = 801 @categories = grep { !/^\./ && -f "$pkgsrcdir/$_/Makefile" }
801 grep(substr($_, 0, 1) ne '.' 802 readdir(BASE);
802 && $_ ne 'CVS' 
803 && -f "$pkgsrcdir/$_/Makefile", 
804 readdir(BASE)); 
805 closedir(BASE); 803 closedir(BASE);
806 @categories; 804 @categories;
807} 805}
808 806
809# For a given category, list potentially valid pkgdirs 807# For a given category, list potentially valid pkgdirs
810# 808#
811sub list_pkgsrc_pkgdirs($pkgsrcdir, $cat) { 809sub list_pkgsrc_pkgdirs($pkgsrcdir, $cat) {
812 opendir(CAT, "$pkgsrcdir/$cat") 810 opendir(CAT, "$pkgsrcdir/$cat")
813 or die("Unable to opendir($pkgsrcdir/$cat): $!"); 811 or die("Unable to opendir($pkgsrcdir/$cat): $!");
814 my @pkgdirs = sort grep { 812 my @pkgdirs = sort grep {
815 $_ ne 'Makefile' 813 $_ ne 'Makefile'
816 && $_ ne 'pkg' 814 && $_ ne 'pkg'
817 && $_ ne 'CVS' 815 && $_ ne 'CVS'