Wed Aug 3 19:22:34 2022 UTC ()
lintpkgsrc: refactor PkgVer internals to be more descriptive


(rillig)
diff -r1.43 -r1.44 pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl
diff -r1.4 -r1.5 pkgsrc/pkgtools/lintpkgsrc/files/t/packages.t

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

--- pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl 2022/08/03 16:15:49 1.43
+++ pkgsrc/pkgtools/lintpkgsrc/files/lintpkgsrc.pl 2022/08/03 19:22:34 1.44
@@ -1,16 +1,16 @@ @@ -1,16 +1,16 @@
1#!@PERL5@ 1#!@PERL5@
2 2
3# $NetBSD: lintpkgsrc.pl,v 1.43 2022/08/03 16:15:49 rillig Exp $ 3# $NetBSD: lintpkgsrc.pl,v 1.44 2022/08/03 19:22:34 rillig Exp $
4 4
5# Written by David Brownlee <abs@netbsd.org>. 5# Written by David Brownlee <abs@netbsd.org>.
6# 6#
7# Caveats: 7# Caveats:
8# The 'Makefile parsing' algorithm used to obtain package versions and 8# The 'Makefile parsing' algorithm used to obtain package versions and
9# DEPENDS information is geared towards speed rather than perfection, 9# DEPENDS information is geared towards speed rather than perfection,
10# though it has gotten somewhat better over time, it only parses the 10# though it has gotten somewhat better over time, it only parses the
11# simpler Makefile conditionals. 11# simpler Makefile conditionals.
12# 12#
13# TODO: Handle fun DEPENDS like avifile-devel with 13# TODO: Handle fun DEPENDS like avifile-devel with
14# {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1} 14# {qt2-designer>=2.2.4,qt2-designer-kde>=2.3.1nb1}
15 15
16use locale; 16use locale;
@@ -18,73 +18,73 @@ use strict; @@ -18,73 +18,73 @@ use strict;
18use warnings; 18use warnings;
19use Getopt::Std; 19use Getopt::Std;
20use File::Find; 20use File::Find;
21use File::Basename; 21use File::Basename;
22use IPC::Open3; 22use IPC::Open3;
23use Cwd 'realpath', 'getcwd'; 23use Cwd 'realpath', 'getcwd';
24 24
25# PkgVer is a PKGBASE + PKGVERSION, including some of the variables that 25# PkgVer is a PKGBASE + PKGVERSION, including some of the variables that
26# have been extracted from the package Makefile. 26# have been extracted from the package Makefile.
27# 27#
28package PkgVer; 28package PkgVer;
29 29
30sub new($$$) { 30sub new($$$) {
31 my $class = shift; 31 my ($class, $pkgbase, $pkgversion) = @_;
32 my $self = {}; 32 my $self = {
33 33 pkgbase => $pkgbase,
 34 pkgversion => $pkgversion,
 35 vars => {},
 36 };
34 bless $self, $class; 37 bless $self, $class;
35 $self->{_pkg} = $_[0]; 
36 $self->{_ver} = $_[1]; 
37 return $self; 38 return $self;
38} 39}
39 40
40sub pkgname($) { 41sub pkg($) {
41 my $self = shift; 42 my ($self) = @_;
42 43
43 $self->pkg . '-' . $self->ver; 44 $self->{pkgbase};
44} 45}
45 46
46sub pkg($) { 47sub ver($) {
47 my $self = shift; 48 my ($self) = @_;
48 49
49 $self->{_pkg}; 50 $self->{pkgversion};
50} 51}
51 52
52sub var($$$) { 53sub pkgname($) {
53 my $self = shift; 54 my $self = shift;
54 my ($key, $val) = @_; 
55 55
56 (defined $val) 56 $self->pkg . '-' . $self->ver;
57 ? ($self->{$key} = $val) 
58 : $self->{$key}; 
59} 57}
60 58
61sub ver($) { 59sub var($$$) {
62 my $self = shift; 60 my ($self, $key, $val) = @_;
63 61
64 $self->{_ver}; 62 (defined $val)
 63 ? ($self->{vars}->{$key} = $val)
 64 : $self->{vars}->{$key};
65} 65}
66 66
67sub vars($) { 67sub vars($) {
68 my $self = shift; 68 my ($self) = @_;
69 69
70 grep(!/^_(pkg|ver)$/, keys %{$self}); 70 keys %{$self->{vars}};
71} 71}
72 72
73sub store($) { 73sub store($) {
74 my $self = shift; 74 my $self = shift;
75 75
76 my $name = $self->{_pkg}; 76 my $name = $self->pkg;
77 my $ver = $self->{_ver}; 77 my $ver = $self->ver;
78 78
79 $name =~ /\s/ and die "cannot store package name '$name'\n"; 79 $name =~ /\s/ and die "cannot store package name '$name'\n";
80 $ver =~ /\s/ and die "cannot store package version '$ver'\n"; 80 $ver =~ /\s/ and die "cannot store package version '$ver'\n";
81 printf("package\t%s\t%s\n", $name, $ver); 81 printf("package\t%s\t%s\n", $name, $ver);
82 82
83 foreach my $varname (sort $self->vars) { 83 foreach my $varname (sort $self->vars) {
84 my $value = $self->{$varname}; 84 my $value = $self->{$varname};
85 $varname =~ /\s/ and die "cannot store variable name '$varname'\n"; 85 $varname =~ /\s/ and die "cannot store variable name '$varname'\n";
86 $value =~ /\n/ and die "cannot store variable value '$value'\n"; 86 $value =~ /\n/ and die "cannot store variable value '$value'\n";
87 printf("var\t%s\t%s\n", $varname, $value); 87 printf("var\t%s\t%s\n", $varname, $value);
88 } 88 }
89} 89}
90 90

cvs diff -r1.4 -r1.5 pkgsrc/pkgtools/lintpkgsrc/files/t/packages.t (expand / switch to unified diff)

--- pkgsrc/pkgtools/lintpkgsrc/files/t/packages.t 2022/08/03 18:51:56 1.4
+++ pkgsrc/pkgtools/lintpkgsrc/files/t/packages.t 2022/08/03 19:22:34 1.5
@@ -1,24 +1,32 @@ @@ -1,24 +1,32 @@
1# $NetBSD: packages.t,v 1.4 2022/08/03 18:51:56 rillig Exp $ 1# $NetBSD: packages.t,v 1.5 2022/08/03 19:22:34 rillig Exp $
2 2
3use strict; 3use strict;
4use warnings; 4use warnings;
5use Capture::Tiny 'capture'; 5use Capture::Tiny 'capture';
6use Test; 6use Test;
7 7
8BEGIN { plan tests => 11, onfail => sub { die } } 8BEGIN { plan tests => 11, onfail => sub { die } }
9 9
10require('../lintpkgsrc.pl'); 10require('../lintpkgsrc.pl');
11 11
 12sub test_pkgver() {
 13 my $pkgver = PkgVer->new('base', '1.0nb4');
 14
 15 ok($pkgver->pkg , 'base');
 16 ok($pkgver->ver , '1.0nb4');
 17 ok($pkgver->pkgname , 'base-1.0nb4');
 18}
 19
12sub test_package_variables() { 20sub test_package_variables() {
13 my $pkglist = PkgList->new(); 21 my $pkglist = PkgList->new();
14 my $pkgbase_1_0 = $pkglist->add('pkgbase', '1.0'); 22 my $pkgbase_1_0 = $pkglist->add('pkgbase', '1.0');
15 23
16 $pkgbase_1_0->var('NAME', 'value'); 24 $pkgbase_1_0->var('NAME', 'value');
17 25
18 ok($pkgbase_1_0->var('NAME'), 'value'); 26 ok($pkgbase_1_0->var('NAME'), 'value');
19 ok($pkgbase_1_0->var('undefined'), undef); 27 ok($pkgbase_1_0->var('undefined'), undef);
20 28
21 my $pkgbase_2_0 = $pkglist->add('pkgbase', '2.0'); 29 my $pkgbase_2_0 = $pkglist->add('pkgbase', '2.0');
22 my $pkgbase_1_5 = $pkglist->add('pkgbase', '1.5'); 30 my $pkgbase_1_5 = $pkglist->add('pkgbase', '1.5');
23 my $pkgbase_1_10 = $pkglist->add('pkgbase', '1.10'); 31 my $pkgbase_1_10 = $pkglist->add('pkgbase', '1.10');
24 32
@@ -47,15 +55,16 @@ sub test_store_order() { @@ -47,15 +55,16 @@ sub test_store_order() {
47 55
48 my $stdout = capture { 56 my $stdout = capture {
49 $pkglist->store(); 57 $pkglist->store();
50 }; 58 };
51 59
52 # XXX: 1.3nb4 should be sorted before 1.15. 60 # XXX: 1.3nb4 should be sorted before 1.15.
53 # On the other hand, this is just an internal cache file format. 61 # On the other hand, this is just an internal cache file format.
54 ok($stdout, '' 62 ok($stdout, ''
55 . "package\tpkgbase\t1.0\n" 63 . "package\tpkgbase\t1.0\n"
56 . "package\tpkgbase\t1.15\n" 64 . "package\tpkgbase\t1.15\n"
57 . "package\tpkgbase\t1.3nb4\n"); 65 . "package\tpkgbase\t1.3nb4\n");
58} 66}
59 67
 68test_pkgver();
60test_package_variables(); 69test_package_variables();
61test_store_order(); 70test_store_order();