diff options
author | rillig <rillig@pkgsrc.org> | 2022-08-03 20:32:55 +0000 |
---|---|---|
committer | rillig <rillig@pkgsrc.org> | 2022-08-03 20:32:55 +0000 |
commit | c4d3e1600f64f694af7265c589b729792fcd8e8e (patch) | |
tree | 9dce01ba105972b952d272e21ea10cf996840f63 /pkgtools | |
parent | 51c24d968a9be399c9cda2ab0ad47b3ad322ffe9 (diff) | |
download | pkgsrc-c4d3e1600f64f694af7265c589b729792fcd8e8e.tar.gz |
lintpkgsrc: clean up and condense comparison of package versions
One less 'eval' to worry about.
Diffstat (limited to 'pkgtools')
-rwxr-xr-x | pkgtools/lintpkgsrc/files/lintpkgsrc.pl | 62 | ||||
-rw-r--r-- | pkgtools/lintpkgsrc/files/t/pkgversion.t | 5 |
2 files changed, 24 insertions, 43 deletions
diff --git a/pkgtools/lintpkgsrc/files/lintpkgsrc.pl b/pkgtools/lintpkgsrc/files/lintpkgsrc.pl index 822ab6338f5..cd7deaa6918 100755 --- a/pkgtools/lintpkgsrc/files/lintpkgsrc.pl +++ b/pkgtools/lintpkgsrc/files/lintpkgsrc.pl @@ -1,6 +1,6 @@ #!@PERL5@ -# $NetBSD: lintpkgsrc.pl,v 1.47 2022/08/03 20:14:16 rillig Exp $ +# $NetBSD: lintpkgsrc.pl,v 1.48 2022/08/03 20:32:55 rillig Exp $ # Written by David Brownlee <abs@netbsd.org>. # @@ -297,12 +297,13 @@ sub canonicalize_pkgname($) { return $pkgname; } -sub convert_to_standard_pkgversion(@) { - my ($elem, @temp); +sub split_pkgversion($) { + my ($pkgversion) = @_; # See pkg_install/lib/dewey.c. - # 'nb' has already been handled when we are here. - foreach $elem (@_) { + my (@temp); + my $nb = ($pkgversion =~ s/^(.*)nb(\d+)$/$1/) ? +$2 : 0; + foreach my $elem (split(/(\D+)/, lc($pkgversion))) { if ($elem =~ /\d/) { push(@temp, $elem); } elsif ($elem eq "pl" || $elem eq "." || $elem eq "_") { @@ -318,50 +319,29 @@ sub convert_to_standard_pkgversion(@) { push(@temp, ord($elem) - ord("a") + 1); } } + push(@temp, $nb); @temp; } -sub pkgversioncmp_extract($$) { - my ($match, $val) = @_; - my ($cmp, @matchlist, @vallist); - - @matchlist = convert_to_standard_pkgversion(split(/(\D+)/, lc($match))); - @vallist = convert_to_standard_pkgversion(split(/(\D+)/, lc($val))); - $cmp = 0; - while ($cmp == 0 && (@matchlist || @vallist)) { - $cmp = ((shift @matchlist || 0) <=> (shift @vallist || 0)); - } - $cmp; -} - -# Package version number matching. -# Also handles 'nb<N>' suffix (checked iff values otherwise identical). sub pkgversioncmp($$$) { - my ($match, $test, $val) = @_; - my ($cmp, $match_nb, $val_nb); + my ($va, $op, $vb) = @_; - $match_nb = $val_nb = 0; - if ($match =~ /(.*)nb(.*)/) { - # Handle nb<N> suffix - $match = $1; - $match_nb = $2; + my @a = split_pkgversion($va); + my @b = split_pkgversion($vb); + my $cmp = 0; + while ($cmp == 0 && (@a || @b)) { + $cmp = (shift @a || 0) <=> (shift @b || 0); } - if ($val =~ /(.*)nb(.*)/) { - # Handle nb<N> suffix - $val = $1; - $val_nb = $2; - } - - $cmp = pkgversioncmp_extract($match, $val); - - if (!$cmp) { - # Iff otherwise identical, check nb suffix - $cmp = pkgversioncmp_extract($match_nb, $val_nb); + if ($op eq '<') { + $cmp < 0; + } elsif ($op eq '<=') { + $cmp <= 0; + } elsif ($op eq '>') { + $cmp > 0; + } else { + $cmp >= 0; } - - debug("eval pkgversioncmp $cmp $test 0\n"); - eval "$cmp $test 0"; } # Return a copy of $line in which trivial variable expressions are replaced diff --git a/pkgtools/lintpkgsrc/files/t/pkgversion.t b/pkgtools/lintpkgsrc/files/t/pkgversion.t index 1f617e8d87c..b2e36180ec2 100644 --- a/pkgtools/lintpkgsrc/files/t/pkgversion.t +++ b/pkgtools/lintpkgsrc/files/t/pkgversion.t @@ -1,10 +1,10 @@ -# $NetBSD: pkgversion.t,v 1.4 2022/08/03 18:51:56 rillig Exp $ +# $NetBSD: pkgversion.t,v 1.5 2022/08/03 20:32:55 rillig Exp $ use strict; use warnings; use Test; -BEGIN { plan tests => 5, onfail => sub { die } } +BEGIN { plan tests => 6, onfail => sub { die } } require('../lintpkgsrc.pl'); @@ -13,3 +13,4 @@ ok(pkgversioncmp('3.4', '<=', '3.4'), 1); ok(pkgversioncmp('3.4', '>=', '3.4.0.0.0'), 1); ok(pkgversioncmp('3.4nb13', '>=', '3.4'), 1); ok(pkgversioncmp('3.4nb13', '<', '3.4'), ''); +ok(pkgversioncmp('3.4nb13', '>', '3.4nb5'), 1); |