diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2009-03-07 12:04:14 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2009-03-07 12:04:14 +0000 |
commit | 78c6d42fb0e287b40f625ac35469e87345b7cab1 (patch) | |
tree | cc8be40c4f9eb6aefb36053e70e935dd28ff2291 /usr.sbin/pkg_add/OpenBSD | |
parent | ae86cf1eed2dbd7e8529b31e1117082b01999c1e (diff) |
introduce versionspecs as a derivative object from version.
Allows an operator such as <=.
also overrides the compare operator for the pnum part, because specifically,
in pkgspecs, if the pnum is not specified, it stands for "any pnum will do"...
yes, that's hairy...
Diffstat (limited to 'usr.sbin/pkg_add/OpenBSD')
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PackageName.pm | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageName.pm b/usr.sbin/pkg_add/OpenBSD/PackageName.pm index d4ec0668d42..c42bd216169 100644 --- a/usr.sbin/pkg_add/OpenBSD/PackageName.pm +++ b/usr.sbin/pkg_add/OpenBSD/PackageName.pm @@ -1,5 +1,5 @@ # ex:ts=8 sw=4: -# $OpenBSD: PackageName.pm,v 1.32 2008/10/20 10:25:16 espie Exp $ +# $OpenBSD: PackageName.pm,v 1.33 2009/03/07 12:04:13 espie Exp $ # # Copyright (c) 2003-2007 Marc Espie <espie@openbsd.org> # @@ -231,6 +231,12 @@ sub to_string return $string; } +sub pnum_compare +{ + my ($a, $b) = @_; + return $a->{pnum} <=> $b->{pnum} +} + sub compare { my ($a, $b) = @_; @@ -240,7 +246,7 @@ sub compare } # Simple case: only p number differs if ($a->{string} eq $b->{string}) { - return $a->{pnum} <=> $b->{pnum} + return $a->pnum_compare($b); } # Try a diff in dewey numbers first for (my $i = 0; ; $i++) { @@ -295,6 +301,46 @@ sub dewey_compare return $a cmp $b; } +package OpenBSD::PackageName::versionspec; +our @ISA = qw(OpenBSD::PackageName::version); + +sub from_string +{ + my ($class, $s) = @_; + my ($op, $version) = ('=', $s); + if ($s =~ m/^(\>\=|\>|\<\=|\<|\=)(.*)$/) { + ($op, $version) = ($1, $2); + } + my $self = $class->SUPER::from_string($version); + $self->{op} = $op; + return $self; +} + +sub pnum_compare +{ + my ($spec, $b) = @_; + if ($spec->{pnum} == -1) { + return 0; + } else { + return $spec->SUPER::pnum_compare($b); + } +} + +sub match +{ + my ($self, $b) = @_; + + my $op = $self->{op}; + + my $compare = - $self->compare($b); + return 0 if $op eq '<' && $compare >= 0; + return 0 if $op eq '<=' && $compare > 0; + return 0 if $op eq '>' && $compare <= 0; + return 0 if $op eq '>=' && $compare < 0; + return 0 if $op eq '=' && $compare != 0; + return 1; +} + package OpenBSD::PackageName::Stem; sub to_string { |