diff options
author | rillig <rillig@pkgsrc.org> | 2022-08-04 07:00:51 +0000 |
---|---|---|
committer | rillig <rillig@pkgsrc.org> | 2022-08-04 07:00:51 +0000 |
commit | aeb88896f6eeed6409a0f4a4c6710b7c528df5c1 (patch) | |
tree | 6c050fa8fd50016e864a9676de0881ead92badee /pkgtools | |
parent | dac279fc4be5131b9bad115301fe58ed8242521a (diff) | |
download | pkgsrc-aeb88896f6eeed6409a0f4a4c6710b7c528df5c1.tar.gz |
lintpkgsrc: rename PkgList to PkgDb
Diffstat (limited to 'pkgtools')
-rwxr-xr-x | pkgtools/lintpkgsrc/files/lintpkgsrc.pl | 79 | ||||
-rw-r--r-- | pkgtools/lintpkgsrc/files/t/packages.t | 68 |
2 files changed, 79 insertions, 68 deletions
diff --git a/pkgtools/lintpkgsrc/files/lintpkgsrc.pl b/pkgtools/lintpkgsrc/files/lintpkgsrc.pl index b917705c9c6..d3dfb83604a 100755 --- a/pkgtools/lintpkgsrc/files/lintpkgsrc.pl +++ b/pkgtools/lintpkgsrc/files/lintpkgsrc.pl @@ -1,6 +1,6 @@ #!@PERL5@ -# $NetBSD: lintpkgsrc.pl,v 1.54 2022/08/04 06:02:41 rillig Exp $ +# $NetBSD: lintpkgsrc.pl,v 1.55 2022/08/04 07:00:51 rillig Exp $ # Written by David Brownlee <abs@netbsd.org>. # @@ -24,7 +24,6 @@ use Cwd 'realpath', 'getcwd'; # PkgVer is a PKGBASE + PKGVERSION, including some of the variables that # have been extracted from the package Makefile. -# package PkgVer; sub new($$$) { @@ -125,8 +124,10 @@ sub add($$$) { $self->{pkgvers}->{$pkgversion} = PkgVer->new($pkgbase, $pkgversion); } -# Returns all available versioned packages of this PKGBASE, in decreasing -# alphabetical(!) order. +# pkgver() returns all PkgVers of this pkgbase, in decreasing alphabetical(!) +# version order. +# +# pkgver($pkgversion) returns the PkgVer, or undef. sub pkgver($@) { my ($self, $pkgversion) = @_; @@ -137,6 +138,7 @@ sub pkgver($@) { return sort { $b->pkgversion cmp $a->pkgversion } values %{$pkgvers}; } +# XXX: Returns the alphabetically(!) highest PkgVer. sub latestver($) { my ($self) = @_; @@ -152,9 +154,8 @@ sub store($) { } } -# PkgList is the master list of all packages in pkgsrc. -# -package PkgList; +# PkgDb is a small database of all packages in pkgsrc. +package PkgDb; sub new($) { my ($class) = @_; @@ -179,6 +180,13 @@ sub numpkgver($) { scalar($self->pkgver); } +# pkgver() returns all PkgVers, sorted by pkgbase, then by version in +# decreasing alphabetical(!) order. +# +# pkgver($pkgbase) returns all PkgVers of the given pkgbase, sorted by +# version in decreasing alphabetical(!) order. +# +# pkgver($pkgbase, $pkgversion) returns the package, or undef. sub pkgver($$$) { my ($self, $pkgbase, $pkgversion) = @_; @@ -199,21 +207,24 @@ sub pkgver($$$) { return; } +# pkgs() returns all Pkgs, sorted by pkgbase. +# +# pkgs($pkgbase) returns the Pkgs, or undef. sub pkgs($$) { my ($self, $pkgbase) = @_; if (defined $pkgbase) { return $self->{$pkgbase}; } else { - return sort { $a->pkgbase cmp $b->pkgbase } values %{$self}; + return sort { $a->pkgbase cmp $b->pkgbase } values %$self; } } sub store($) { my ($self) = @_; - foreach my $pkgbase (sort keys %$self) { - $self->{$pkgbase}->store(); + foreach my $pkgs ($self->pkgs) { + $pkgs->store(); } } @@ -226,8 +237,8 @@ my $conf_prefix = '@PREFIX@'; my $conf_sysconfdir = '@PKG_SYSCONFDIR@'; my ( - $pkglist, # list of Pkg packages - $pkg_installver, # installed version of pkg_install pseudo-pkg + $pkgdb, # Database of pkgsrc packages + $pkg_installver, # Installed version of pkg_install pseudo-pkg $default_vars, # Set for Makefiles, inc PACKAGES & PKGSRCDIR %opt, # Command line options @matched_prebuiltpackages, # List of obsolete prebuilt package paths @@ -831,7 +842,7 @@ sub invalid_version($) { if (defined($badver)) { my ($pkgs); - if ($pkgs = $pkglist->pkgs($pkg)) { + if ($pkgs = $pkgdb->pkgs($pkg)) { $fail .= "Version mismatch: '$pkg' $badver vs " . join(',', $pkgs->versions) . "\n"; @@ -959,7 +970,7 @@ sub package_globmatch($) { my ($test, @pkgvers); ($matchpkgname, $test, $matchver) = ($1, $2, $3); - if (@pkgvers = $pkglist->pkgver($matchpkgname)) { + if (@pkgvers = $pkgdb->pkgver($matchpkgname)) { foreach my $pkgver (@pkgvers) { if ($test eq '-') { if ($pkgver->pkgversion eq $matchver) { @@ -986,11 +997,11 @@ sub package_globmatch($) { ($matchpkgname, $matchver) = ($1, $2); - if (defined $pkglist->pkgs($matchpkgname)) { + if (defined $pkgdb->pkgs($matchpkgname)) { push(@pkgnames, $matchpkgname); } elsif ($regex = glob2regex($matchpkgname)) { - foreach my $pkg ($pkglist->pkgs) { + foreach my $pkg ($pkgdb->pkgs) { if ($pkg->pkgbase =~ /$regex/) { push(@pkgnames, $pkg->pkgbase); } @@ -1002,12 +1013,12 @@ sub package_globmatch($) { $regex = glob2regex($matchver); foreach my $pkg (@pkgnames) { - if (defined $pkglist->pkgver($pkg, $matchver)) { + if (defined $pkgdb->pkgver($pkg, $matchver)) { return ($matchver); } if ($regex) { - foreach my $ver ($pkglist->pkgs($pkg)->versions) { + foreach my $ver ($pkgdb->pkgs($pkg)->versions) { if ($ver =~ /$regex/) { $matchver = undef; last; @@ -1023,7 +1034,7 @@ sub package_globmatch($) { if ($matchver && ($regex = glob2regex($pkgmatch))) { # (large-glob) - foreach my $pkgver ($pkglist->pkgver) { + foreach my $pkgver ($pkgdb->pkgver) { if ($pkgver->pkgname =~ /$regex/) { $matchver = undef; last; @@ -1114,8 +1125,8 @@ sub parse_makefile_pkgsrc($) { print "\nBogus: $pkgname (from $file)\n"; } elsif ($pkgname =~ /(.*)-(\d.*)/) { - if ($pkglist) { - my ($pkgver) = $pkglist->add($1, $2); + if ($pkgdb) { + my ($pkgver) = $pkgdb->add($1, $2); debug("add $1 $2\n"); @@ -1158,11 +1169,11 @@ sub load_pkgsrc_makefiles($) { open(STORE, '<', $fname) or die("Cannot read pkgsrc store from $fname: $!\n"); my ($pkgver); - $pkglist = PkgList->new; + $pkgdb = PkgDb->new; while (defined(my $line = <STORE>)) { chomp($line); if ($line =~ qr"^package\t([^\t]+)\t([^\t]+$)$") { - $pkgver = $pkglist->add($1, $2); + $pkgver = $pkgdb->add($1, $2); } elsif ($line =~ qr"^var\t([^\t]+)\t(.*)$") { $pkgver->var($1, $2); } elsif ($line =~ qr"^sub ") { @@ -1180,7 +1191,7 @@ sub scan_pkgsrc_makefiles($) { my ($pkgsrcdir) = @_; my (@categories); - if ($pkglist) { + if ($pkgdb) { # Already done return; @@ -1191,7 +1202,7 @@ sub scan_pkgsrc_makefiles($) { return; } - $pkglist = new PkgList; + $pkgdb = new PkgDb; @categories = list_pkgsrc_categories($pkgsrcdir); verbose('Scan Makefiles: '); @@ -1214,7 +1225,7 @@ sub scan_pkgsrc_makefiles($) { if (!$opt{L}) { my ($len); - $_ = $pkglist->numpkgver() . ' packages'; + $_ = $pkgdb->numpkgver() . ' packages'; $len = @categories - length($_); verbose("\b" x @categories, $_, ' ' x $len, "\b" x $len, "\n"); } @@ -1224,7 +1235,7 @@ sub scan_pkgsrc_makefiles($) { # sub pkgsrc_check_depends() { - foreach my $pkgver ($pkglist->pkgver) { + foreach my $pkgver ($pkgdb->pkgver) { my ($err, $msg); defined $pkgver->var('DEPENDS') || next; @@ -1369,7 +1380,7 @@ sub store_pkgsrc_makefiles($) { open(STORE, '>', $fname) or die("Cannot save pkgsrc store to $fname: $!\n"); my $prev = select(STORE); - $pkglist->store(); + $pkgdb->store(); select($prev); close(STORE) or die("Cannot save pkgsrc store to $fname: $!\n"); @@ -1423,7 +1434,7 @@ sub check_prebuilt_packages() { $pkg = canonicalize_pkgname($pkg); my ($pkgs); - if ($pkgs = $pkglist->pkgs($pkg)) { + if ($pkgs = $pkgdb->pkgs($pkg)) { my ($pkgver) = $pkgs->pkgver($ver); if (!defined $pkgver) { @@ -1510,7 +1521,7 @@ sub remove_distfiles($$) { my @installed; foreach my $pkgname (sort @pkgs) { if ($pkgname =~ /^([^*?[]+)-([\d*?[].*)/) { - foreach my $pkgver ($pkglist->pkgver($1)) { + foreach my $pkgver ($pkgdb->pkgver($1)) { next if $pkgver->var('dir') =~ /-current/; push(@installed, $pkgver); last; @@ -1605,7 +1616,7 @@ sub list_broken_packages($) { my ($pkgsrcdir) = @_; scan_pkgsrc_makefiles($pkgsrcdir); - foreach my $pkgver ($pkglist->pkgver) { + foreach my $pkgver ($pkgdb->pkgver) { my $broken = $pkgver->var('BROKEN'); next unless $broken; print $pkgver->pkgname . ": $broken\n"; @@ -1651,7 +1662,7 @@ sub list_packages_not_in_SUBDIR($) { } scan_pkgsrc_makefiles($pkgsrcdir); - foreach my $pkgver ($pkglist->pkgver) { + foreach my $pkgver ($pkgdb->pkgver) { my $pkgpath = $pkgver->var('dir'); if (!defined $in_subdir{$pkgpath}) { print "$pkgpath: Not in SUBDIR\n"; @@ -1666,7 +1677,7 @@ sub generate_map_file($$) { scan_pkgsrc_makefiles($pkgsrcdir); open(TABLE, '>', $tmpfile) or fail("Cannot write '$tmpfile': $!"); - foreach my $pkgver ($pkglist->pkgver) { + foreach my $pkgver ($pkgdb->pkgver) { print TABLE $pkgver->pkgbase . "\t" . $pkgver->var('dir') . "\t" . $pkgver->pkgversion . "\n"; @@ -1689,7 +1700,7 @@ sub check_outdated_installed_packages($) { print $_; next unless $pkgname =~ /^([^*?[]+)-([\d*?[].*)/; - foreach my $pkgver ($pkglist->pkgver($1)) { + foreach my $pkgver ($pkgdb->pkgver($1)) { next if $pkgver->var('dir') =~ /-current/; push(@update, $pkgver); last; diff --git a/pkgtools/lintpkgsrc/files/t/packages.t b/pkgtools/lintpkgsrc/files/t/packages.t index d82d39ef0f8..fe2e3af087c 100644 --- a/pkgtools/lintpkgsrc/files/t/packages.t +++ b/pkgtools/lintpkgsrc/files/t/packages.t @@ -1,4 +1,4 @@ -# $NetBSD: packages.t,v 1.8 2022/08/04 06:27:36 rillig Exp $ +# $NetBSD: packages.t,v 1.9 2022/08/04 07:00:51 rillig Exp $ use strict; use warnings; @@ -33,66 +33,66 @@ sub test_pkgs() { ok($pkgs->latestver->pkgversion, '1.0nb4'); } -sub test_pkglist() { - my $pkglist = PkgList->new(); +sub test_pkgdb() { + my $pkgdb = PkgDb->new(); - ok($pkglist->numpkgver, 0); - ok(join(', ', map { $_->pkgname } $pkglist->pkgver), ''); + ok($pkgdb->numpkgver, 0); + ok(join(', ', map { $_->pkgname } $pkgdb->pkgver), ''); - $pkglist->add('base', '1.0'); + $pkgdb->add('base', '1.0'); - ok($pkglist->numpkgver, 1); + ok($pkgdb->numpkgver, 1); - $pkglist->add('other', '5.7'); + $pkgdb->add('other', '5.7'); - ok($pkglist->numpkgver, 2); + ok($pkgdb->numpkgver, 2); - my $base_8_0 = $pkglist->add('base', '8.0'); + my $base_8_0 = $pkgdb->add('base', '8.0'); - ok($pkglist->numpkgver, 3); + ok($pkgdb->numpkgver, 3); ok($base_8_0->pkgname, 'base-8.0'); - my $actual = join(', ', map { $_->pkgname } $pkglist->pkgver); + my $actual = join(', ', map { $_->pkgname } $pkgdb->pkgver); ok($actual, 'base-8.0, base-1.0, other-5.7'); - $actual = join(', ', map { $_->pkgname } $pkglist->pkgver('base')); + $actual = join(', ', map { $_->pkgname } $pkgdb->pkgver('base')); ok($actual, 'base-8.0, base-1.0'); - $actual = join(', ', map { $_->pkgname } $pkglist->pkgver('unknown')); + $actual = join(', ', map { $_->pkgname } $pkgdb->pkgver('unknown')); ok($actual, ''); - ok($pkglist->pkgver('base', '1.0')->pkgname, 'base-1.0'); - ok($pkglist->pkgver('unknown', '1.0'), undef); - ok($pkglist->pkgver('base', '3.0'), undef); + ok($pkgdb->pkgver('base', '1.0')->pkgname, 'base-1.0'); + ok($pkgdb->pkgver('unknown', '1.0'), undef); + ok($pkgdb->pkgver('base', '3.0'), undef); - ok(join(', ', map { $_->pkgbase } $pkglist->pkgs), 'base, other'); - ok($pkglist->pkgs('base')->pkgbase, 'base'); - ok($pkglist->pkgs('unknown'), undef); + ok(join(', ', map { $_->pkgbase } $pkgdb->pkgs), 'base, other'); + ok($pkgdb->pkgs('base')->pkgbase, 'base'); + ok($pkgdb->pkgs('unknown'), undef); } sub test_package_variables() { - my $pkglist = PkgList->new(); - my $pkgbase_1_0 = $pkglist->add('pkgbase', '1.0'); + my $pkgdb = PkgDb->new(); + my $pkgbase_1_0 = $pkgdb->add('pkgbase', '1.0'); $pkgbase_1_0->var('NAME', 'value'); ok($pkgbase_1_0->var('NAME'), 'value'); ok($pkgbase_1_0->var('undefined'), undef); - my $pkgbase_2_0 = $pkglist->add('pkgbase', '2.0'); - my $pkgbase_1_5 = $pkglist->add('pkgbase', '1.5'); - my $pkgbase_1_10 = $pkglist->add('pkgbase', '1.10'); + my $pkgbase_2_0 = $pkgdb->add('pkgbase', '2.0'); + my $pkgbase_1_5 = $pkgdb->add('pkgbase', '1.5'); + my $pkgbase_1_10 = $pkgdb->add('pkgbase', '1.10'); $pkgbase_2_0->var('COMMENT', 'Version 2 of the package'); - ok($pkglist->pkgs('unknown-pkgbase'), undef); + ok($pkgdb->pkgs('unknown-pkgbase'), undef); # The versions are sorted in decreasing alphabetical order. - my $versions = join(', ', $pkglist->pkgs('pkgbase')->versions()); + my $versions = join(', ', $pkgdb->pkgs('pkgbase')->versions()); ok($versions, '2.0, 1.5, 1.10, 1.0'); # The versioned packages are sorted in decreasing alphabetical order. - my @pkgvers = $pkglist->pkgver('pkgbase'); + my @pkgvers = $pkgdb->pkgver('pkgbase'); ok(join(', ', map { $_->pkgversion } @pkgvers), '2.0, 1.5, 1.10, 1.0'); ok($pkgvers[0], $pkgbase_2_0); ok($pkgvers[3], $pkgbase_1_0); @@ -100,11 +100,11 @@ sub test_package_variables() { # Demonstrate how the package data is stored in the cache file. sub test_store_order() { - my $pkglist = PkgList->new(); + my $pkgdb = PkgDb->new(); - my $pkgbase_1_0 = $pkglist->add('pkgbase', '1.0'); - my $pkgbase_1_3nb4 = $pkglist->add('pkgbase', '1.3nb4'); - my $pkgbase_1_15 = $pkglist->add('pkgbase', '1.15'); + my $pkgbase_1_0 = $pkgdb->add('pkgbase', '1.0'); + my $pkgbase_1_3nb4 = $pkgdb->add('pkgbase', '1.3nb4'); + my $pkgbase_1_15 = $pkgdb->add('pkgbase', '1.15'); # Ensure that variables are stored in alphabetical order. $pkgbase_1_0->var('COMMENT', 'Version 1'); @@ -115,7 +115,7 @@ sub test_store_order() { $pkgbase_1_15->var('COMMENT', 'Version 1.15'); my $stdout = capture { - $pkglist->store(); + $pkgdb->store(); }; # XXX: 1.3nb4 should be sorted before 1.15. @@ -133,6 +133,6 @@ sub test_store_order() { test_pkgver(); test_pkgs(); -test_pkglist(); +test_pkgdb(); test_package_variables(); test_store_order(); |