Date: Wed, 28 Mar 2001 23:19:56 +0200 From: Anton Berezin <tobez@tobez.org> To: "Bruce A. Mah" <bmah@freebsd.org> Cc: freebsd-ports@freebsd.org, knu@freebsd.org Subject: Re: pkg_version comparison routine Message-ID: <20010328231956.B34676@heechee.tobez.org> In-Reply-To: <200103280237.f2S2bUP02277@bmah-freebsd-0.cisco.com>; from bmah@freebsd.org on Tue, Mar 27, 2001 at 06:37:30PM -0800 References: <200103280237.f2S2bUP02277@bmah-freebsd-0.cisco.com>
index | next in thread | previous in thread | raw e-mail
On Tue, Mar 27, 2001 at 06:37:30PM -0800, Bruce A. Mah wrote:
> I'm going to revisit an issue long overdue...the fact that the
> algorithm used by pkg_version(1) for comparing versions doesn't work
> in all the cases specified by the Porter's Handbook. knu tried to get
> my attention on this issue a number of months ago, even going so far
> as to submit some patches to fix this problem. Unfortunately I
> dropped the ball on this, and I'm sure he's understandably annoyed at
> me.
We not just steal a little snippet from devel/p5-Sort-Versions?
I believe it handles most insane possibilities.
sub versions {
my(@A) = ($::a =~ /(\.|\d+|[^\.\d]+)/g);
my(@B) = ($::b =~ /(\.|\d+|[^\.\d]+)/g);
my($A,$B);
while(@A and @B) {
$A=shift @A;
$B=shift @B;
if($A eq "." and $B eq ".") {
next;
} elsif( $A eq "." ) {
return -1;
} elsif( $B eq "." ) {
return 1;
} elsif($A =~ /^\d+$/ and $B =~ /^\d+$/) {
return $A <=> $B if $A <=> $B;
} else {
$A = uc $A;
$B = uc $B;
return $A cmp $B if $A cmp $B;
}
}
@A <=> @B;
}
Cheers,
+Anton.
--
May the tuna salad be with you.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010328231956.B34676>
